@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":"project-definition-validation.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveParsedCheckTree } from \"./check-tree/resolution.ts\";\nimport { parseCheckTreeAuthoring } from \"./check-tree/authoring.ts\";\nimport { materializeCheckTreeAuthoring } from \"./check-tree/materialization.ts\";\nimport { parseOutputs } from \"./output-validation.ts\";\nimport {\n type ProjectDefinitionDiagnostic,\n type ProjectDefinitionValidationResult,\n type SchedulerPolicy\n} from \"./project-definition.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\ntype DefinitionValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\n\nconst PROJECT_DEFINITION_KEYS = [\"apiVersion\", \"checks\", \"outputs\", \"scheduler\"] as const;\n\n/**\n * Validates one closed Definition before Run can invoke any project callback.\n * Successful validation carries information-only Check warnings separately.\n */\nexport function validateProjectDefinition(value: unknown): ProjectDefinitionValidationResult {\n try {\n return validateProjectDefinitionValue(value);\n } catch {\n return invalidDefinition(\"definition\");\n }\n}\n\nfunction validateProjectDefinitionValue(value: unknown): ProjectDefinitionValidationResult {\n const data = exactProjectDefinition(value);\n if (!data.ok) return data;\n return parseProjectDefinitionFields(data.value);\n}\n\nfunction parseProjectDefinitionFields(\n data: Readonly<Record<string, unknown>>\n): ProjectDefinitionValidationResult {\n const scheduler = parseScheduler(data.scheduler);\n if (scheduler === undefined) return invalidDefinition(\"definition.scheduler\");\n const checks = snapshotClosedArray(data.checks);\n if (checks === undefined) return invalidDefinition(\"definition.checks\");\n const parsedChecks = parseCheckTreeAuthoring(checks);\n if (parsedChecks === undefined) return invalidDefinition(\"definition.checks\");\n const tree = resolveParsedCheckTree(parsedChecks, scheduler.maxParallel);\n if (tree === undefined) return invalidDefinition(\"definition.checks\");\n const outputs = parseOutputs(data.outputs);\n if (outputs === undefined) return invalidDefinition(\"definition.outputs\");\n return Object.freeze({\n ok: true,\n value: {\n apiVersion: \"1\" as const,\n checks: materializeCheckTreeAuthoring(parsedChecks),\n outputs,\n scheduler\n },\n warnings: tree.warnings\n });\n}\n\nfunction exactProjectDefinition(\n value: unknown\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = exactRecord(\n value,\n PROJECT_DEFINITION_KEYS,\n \"invalid-project-definition\",\n \"definition\"\n );\n if (!data.ok) return data;\n return data.value.apiVersion === \"1\"\n ? data\n : invalid(\"invalid-project-definition\", \"definition.apiVersion\", \"invalid-value\");\n}\n\nfunction exactRecord(\n value: unknown,\n allowedKeys: readonly string[],\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return invalid(kind, path, \"invalid-value\");\n const unknownKey = Object.keys(data).find((key) => !allowedKeys.includes(key));\n if (unknownKey !== undefined) return invalid(kind, `${path}.${unknownKey}`, \"unknown-key\");\n return Object.freeze({ ok: true, value: data });\n}\n\nfunction parseScheduler(value: unknown): SchedulerPolicy | undefined {\n const data = exactKeys(value, [\"maxParallel\"]);\n return typeof data?.maxParallel === \"number\" &&\n Number.isSafeInteger(data.maxParallel) &&\n data.maxParallel > 0\n ? Object.freeze({ maxParallel: data.maxParallel })\n : undefined;\n}\n\nfunction exactKeys(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return undefined;\n return Object.keys(data).length === keys.length && keys.every((key) => Object.hasOwn(data, key))\n ? data\n : undefined;\n}\n\nfunction invalidDefinition(path: string): ProjectDefinitionValidationResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({ kind: \"invalid-project-definition\", path, reason: \"invalid-value\" })\n });\n}\n\nfunction invalid(\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string,\n reason: ProjectDefinitionDiagnostic[\"reason\"]\n): DefinitionValidationResult<never> {\n return Object.freeze({ ok: false, error: Object.freeze({ kind, path, reason }) });\n}\n"]}
1
+ {"version":3,"file":"project-definition-validation.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveParsedCheckTree } from \"./check-tree/resolution.ts\";\nimport { parseCheckTreeAuthoring } from \"./check-tree/authoring.ts\";\nimport { materializeCheckTreeAuthoring } from \"./check-tree/materialization.ts\";\nimport { parseOutputs } from \"./output-validation.ts\";\nimport {\n type ProjectDefinitionDiagnostic,\n type ProjectDefinitionValidationResult,\n type AdmissionPolicy,\n type CustomAdmissionStrategy,\n type NormalizedCheck,\n type SchedulerTerminalEffect,\n type SchedulerPolicy\n} from \"./project-definition.ts\";\nimport {\n snapshotClosedArray,\n snapshotClosedPolicyRecord,\n snapshotClosedRecord\n} from \"../data-boundary/closed-values.ts\";\nimport { snapshotResourceUnitMapping } from \"./resource-unit-mapping.ts\";\nimport { parseProjectChangesConfiguration } from \"./project-changes.ts\";\n\ntype DefinitionValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\n\nconst PROJECT_DEFINITION_KEYS = [\n \"apiVersion\",\n \"changes\",\n \"checks\",\n \"outputs\",\n \"scheduler\"\n] as const;\n\n/**\n * Validates one closed Definition before Run can invoke any project callback.\n * Successful validation carries information-only Check warnings separately.\n */\nexport function validateProjectDefinition(value: unknown): ProjectDefinitionValidationResult {\n try {\n return validateProjectDefinitionValue(value);\n } catch {\n return invalidDefinition(\"definition\");\n }\n}\n\nfunction validateProjectDefinitionValue(value: unknown): ProjectDefinitionValidationResult {\n const data = exactProjectDefinition(value);\n if (!data.ok) return data;\n return parseProjectDefinitionFields(data.value);\n}\n\nfunction parseProjectDefinitionFields(\n data: Readonly<Record<string, unknown>>\n): ProjectDefinitionValidationResult {\n const scheduler = parseScheduler(data.scheduler);\n if (scheduler === undefined) return invalidDefinition(\"definition.scheduler\");\n const changes = Object.hasOwn(data, \"changes\")\n ? parseProjectChangesConfiguration(data.changes)\n : undefined;\n if (Object.hasOwn(data, \"changes\") && changes === undefined) {\n return invalidDefinition(\"definition.changes\");\n }\n const checks = snapshotClosedArray(data.checks);\n if (checks === undefined) return invalidDefinition(\"definition.checks\");\n const parsedChecks = parseCheckTreeAuthoring(checks);\n if (parsedChecks === undefined) return invalidDefinition(\"definition.checks\");\n const tree = resolveParsedCheckTree(\n parsedChecks,\n scheduler.maxParallel,\n scheduler.resourceCapacities\n );\n if (tree === undefined) return invalidDefinition(\"definition.checks\");\n if (!hasOnlyKnownChangeFlagReferences(tree.leaves, changes)) {\n return invalidDefinition(\"definition.checks\");\n }\n const outputs = parseOutputs(data.outputs);\n if (outputs === undefined) return invalidDefinition(\"definition.outputs\");\n return Object.freeze({\n ok: true,\n value: {\n apiVersion: \"1\" as const,\n checks: materializeCheckTreeAuthoring(parsedChecks),\n ...(changes === undefined ? {} : { changes }),\n outputs,\n scheduler\n },\n warnings: tree.warnings\n });\n}\n\nfunction hasOnlyKnownChangeFlagReferences(\n checks: readonly NormalizedCheck[],\n changes: ReturnType<typeof parseProjectChangesConfiguration>\n): boolean {\n return checks.every(\n (check) =>\n check.enabledByFlags === undefined ||\n hasOnlyKnownChangeFlagConditionReferences(check.enabledByFlags.when, changes)\n );\n}\n\nfunction hasOnlyKnownChangeFlagConditionReferences(\n condition: import(\"../check/check.ts\").CheckFlagCondition,\n changes: ReturnType<typeof parseProjectChangesConfiguration>\n): boolean {\n if (typeof condition === \"string\") {\n const prefix = \"vibe-check:change:\";\n return (\n !condition.startsWith(prefix) ||\n (changes !== undefined && Object.hasOwn(changes.flags, condition.slice(prefix.length)))\n );\n }\n if (condition.kind === \"not\") {\n return hasOnlyKnownChangeFlagConditionReferences(condition.condition, changes);\n }\n return condition.conditions.every((child) =>\n hasOnlyKnownChangeFlagConditionReferences(child, changes)\n );\n}\n\nfunction exactProjectDefinition(\n value: unknown\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = exactRecord(\n value,\n PROJECT_DEFINITION_KEYS,\n \"invalid-project-definition\",\n \"definition\"\n );\n if (!data.ok) return data;\n return data.value.apiVersion === \"1\"\n ? data\n : invalid(\"invalid-project-definition\", \"definition.apiVersion\", \"invalid-value\");\n}\n\nfunction exactRecord(\n value: unknown,\n allowedKeys: readonly string[],\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return invalid(kind, path, \"invalid-value\");\n const unknownKey = Object.keys(data).find((key) => !allowedKeys.includes(key));\n if (unknownKey !== undefined) return invalid(kind, `${path}.${unknownKey}`, \"unknown-key\");\n return Object.freeze({ ok: true, value: data });\n}\n\nfunction parseScheduler(value: unknown): SchedulerPolicy | undefined {\n const data = snapshotClosedPolicyRecord(value, {\n optional: [\"admissionPolicy\", \"terminalEffects\", \"resourceCapacities\"],\n required: [\"maxParallel\"]\n });\n if (data === undefined) return undefined;\n const admissionPolicy = Object.hasOwn(data, \"admissionPolicy\")\n ? parseAdmissionPolicy(data.admissionPolicy)\n : Object.freeze({ kind: \"static\" as const });\n if (admissionPolicy === undefined) return undefined;\n const terminalEffects = parseTerminalEffects(data.terminalEffects);\n if (terminalEffects === undefined) return undefined;\n const resourceCapacities = snapshotResourceUnitMapping(\n Object.hasOwn(data, \"resourceCapacities\") ? data.resourceCapacities : {}\n );\n if (resourceCapacities === undefined) return undefined;\n const maxParallel = positiveSafeInteger(data.maxParallel);\n if (maxParallel === undefined) return undefined;\n return Object.freeze({ admissionPolicy, maxParallel, terminalEffects, resourceCapacities });\n}\n\nfunction positiveSafeInteger(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n\nfunction parseTerminalEffects(value: unknown): readonly SchedulerTerminalEffect[] | undefined {\n if (value === undefined) return Object.freeze([]);\n if (!Array.isArray(value)) return undefined;\n const hooks: SchedulerTerminalEffect[] = [];\n for (const hook of value) {\n if (!isTerminalEffect(hook)) return undefined;\n hooks.push(hook);\n }\n return Object.freeze(hooks);\n}\n\nfunction isTerminalEffect(value: unknown): value is SchedulerTerminalEffect {\n return typeof value === \"function\";\n}\n\nfunction parseAdmissionPolicy(value: unknown): AdmissionPolicy | undefined {\n const data = snapshotClosedRecord(value);\n if (data === undefined || typeof data.kind !== \"string\") return undefined;\n switch (data.kind) {\n case \"static\":\n return parseStaticAdmissionPolicy(data);\n case \"custom\":\n return parseCustomAdmissionPolicy(data);\n }\n return undefined;\n}\n\nfunction parseStaticAdmissionPolicy(\n policy: Readonly<Record<string, unknown>>\n): Extract<AdmissionPolicy, { readonly kind: \"static\" }> | undefined {\n return hasExactKeys(policy, [\"kind\"]) ? Object.freeze({ kind: \"static\" }) : undefined;\n}\n\nfunction parseCustomAdmissionPolicy(\n policy: Readonly<Record<string, unknown>>\n): Extract<AdmissionPolicy, { readonly kind: \"custom\" }> | undefined {\n if (!hasExactKeys(policy, [\"kind\", \"strategy\"])) return undefined;\n const strategy = parseCustomAdmissionStrategy(policy.strategy);\n return strategy === undefined ? undefined : Object.freeze({ kind: \"custom\", strategy });\n}\n\nfunction parseCustomAdmissionStrategy(value: unknown): CustomAdmissionStrategy | undefined {\n const strategy = snapshotClosedRecord(value);\n if (strategy === undefined || typeof strategy.kind !== \"string\") return undefined;\n if (strategy.kind === \"simple\") {\n if (!hasExactKeys(strategy, [\"kind\", \"decide\"])) return undefined;\n if (!isSimpleCustomDecision(strategy.decide)) return undefined;\n return Object.freeze({ kind: \"simple\" as const, decide: strategy.decide });\n }\n if (strategy.kind === \"prepared\") {\n if (!hasExactKeys(strategy, [\"kind\", \"prepare\"])) return undefined;\n if (!isPreparedCustomPreparation(strategy.prepare)) return undefined;\n return Object.freeze({ kind: \"prepared\" as const, prepare: strategy.prepare });\n }\n return undefined;\n}\n\nfunction isSimpleCustomDecision(\n value: unknown\n): value is Extract<CustomAdmissionStrategy, { readonly kind: \"simple\" }>[\"decide\"] {\n return typeof value === \"function\";\n}\n\nfunction isPreparedCustomPreparation(\n value: unknown\n): value is Extract<CustomAdmissionStrategy, { readonly kind: \"prepared\" }>[\"prepare\"] {\n return typeof value === \"function\";\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 invalidDefinition(path: string): ProjectDefinitionValidationResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({\n kind: \"invalid-project-definition\",\n path,\n reason: \"invalid-value\"\n })\n });\n}\n\nfunction invalid(\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string,\n reason: ProjectDefinitionDiagnostic[\"reason\"]\n): DefinitionValidationResult<never> {\n return Object.freeze({\n ok: false,\n error: Object.freeze({ kind, path, reason })\n });\n}\n"]}
@@ -1,12 +1,18 @@
1
- import { createHash } from "node:crypto";
2
1
  import { resolveCheckTree } from "./check-tree/resolution.mjs";
3
- import { DEFAULT_PROJECT_OUTPUTS } from "./output-defaults.mjs";
4
- import { isNonArrayRecord } from "../data-boundary/value-shapes.mjs";
2
+ import { DEFAULT_PROJECT_OUTPUTS, resolveProgressRenderingOutput } from "./output-defaults.mjs";
3
+ import { createDeclarativeProjectSnapshot } from "./declarative-snapshot.mjs";
4
+ import { EMPTY_RESOURCE_UNIT_MAPPING, snapshotResourceUnitMapping } from "./resource-unit-mapping.mjs";
5
+ import { parseProjectChangesConfiguration } from "./project-changes.mjs";
6
+ export { createDeclarativeFingerprint } from "./declarative-snapshot.mjs";
7
+ const STATIC_ADMISSION_POLICY = Object.freeze({
8
+ kind: "static"
9
+ });
5
10
  /** 使用 Product 默认输出创建普通 Project Definition。 */
6
11
  export function defineConfig(value) {
7
12
  return {
8
13
  apiVersion: value.apiVersion ?? "1",
9
14
  checks: value.checks ?? [],
15
+ ...(value.changes === undefined ? {} : { changes: value.changes }),
10
16
  outputs: {
11
17
  machinePublication: {
12
18
  directory: value.outputs?.machinePublication?.directory ??
@@ -14,10 +20,7 @@ export function defineConfig(value) {
14
20
  enabled: value.outputs?.machinePublication?.enabled ??
15
21
  DEFAULT_PROJECT_OUTPUTS.machinePublication.enabled
16
22
  },
17
- progressRendering: {
18
- enabled: value.outputs?.progressRendering?.enabled ??
19
- DEFAULT_PROJECT_OUTPUTS.progressRendering.enabled
20
- },
23
+ progressRendering: resolveProgressRenderingOutput(value.outputs?.progressRendering ?? {}),
21
24
  diagnosticLogging: {
22
25
  directory: value.outputs?.diagnosticLogging?.directory ??
23
26
  DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.directory,
@@ -25,68 +28,77 @@ export function defineConfig(value) {
25
28
  DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.enabled
26
29
  }
27
30
  },
28
- scheduler: { maxParallel: value.scheduler?.maxParallel ?? 4 }
31
+ scheduler: {
32
+ admissionPolicy: value.scheduler?.admissionPolicy ?? STATIC_ADMISSION_POLICY,
33
+ maxParallel: value.scheduler?.maxParallel ?? 4,
34
+ terminalEffects: value.scheduler?.terminalEffects ?? [],
35
+ resourceCapacities: value.scheduler?.resourceCapacities ?? EMPTY_RESOURCE_UNIT_MAPPING
36
+ }
29
37
  };
30
38
  }
31
39
  export function normalizeProjectDefinition(definition) {
32
- const tree = resolveCheckTree(definition.checks, definition.scheduler.maxParallel);
40
+ const scheduler = normalizeSchedulerPolicy(definition.scheduler);
41
+ const tree = resolveCheckTree(definition.checks, scheduler.maxParallel, scheduler.resourceCapacities);
33
42
  if (tree === undefined)
34
43
  throw new TypeError("Project Definition Check tree failed closed normalization");
35
44
  const checks = Object.freeze(tree.leaves.map(normalizeCheck));
45
+ const changes = definition.changes === undefined
46
+ ? undefined
47
+ : parseProjectChangesConfiguration(definition.changes);
48
+ if (definition.changes !== undefined && changes === undefined) {
49
+ throw new TypeError("Project Definition changes failed closed normalization");
50
+ }
51
+ const { changes: _authoredChanges, ...baseDefinition } = definition;
52
+ const normalizedDefinition = Object.freeze({
53
+ ...baseDefinition,
54
+ ...(changes === undefined ? {} : { changes }),
55
+ scheduler
56
+ });
36
57
  return Object.freeze({
37
58
  checks,
38
- declarative: freezeDeclarativeSnapshot(definition, checks),
39
- definitionWarnings: tree.warnings
59
+ ...(changes === undefined ? {} : { changes }),
60
+ declarative: createDeclarativeProjectSnapshot(normalizedDefinition, checks),
61
+ definitionWarnings: tree.warnings,
62
+ scheduler
40
63
  });
41
64
  }
42
65
  function normalizeCheck(leaf) {
43
66
  return Object.freeze({
67
+ admissionPriority: leaf.admissionPriority,
44
68
  definition: leaf.definition,
45
69
  dependsOn: leaf.dependsOn,
46
- execution: leaf.execution,
70
+ ...(leaf.enabledByFlags === undefined ? {} : { enabledByFlags: leaf.enabledByFlags }),
71
+ execute: leaf.execute,
72
+ ...(leaf.handoff === undefined ? {} : { handoff: leaf.handoff }),
47
73
  maxParallel: leaf.maxParallel,
48
74
  mutex: leaf.mutex,
75
+ observes: leaf.observes,
49
76
  options: leaf.options,
50
- ...(leaf.preflight === undefined ? {} : { preflight: leaf.preflight }),
51
- visibility: leaf.visibility
77
+ ...(leaf.prepare === undefined ? {} : { prepare: leaf.prepare }),
78
+ resourceClaims: leaf.resourceClaims,
79
+ omitQuietPassedRow: leaf.omitQuietPassedRow
52
80
  });
53
81
  }
54
- export function createDeclarativeFingerprint(snapshot) {
55
- return createHash("sha256").update(stableJson(snapshot)).digest("hex");
56
- }
57
- function freezeDeclarativeSnapshot(definition, checks) {
58
- const declarations = checks
59
- .map(({ execution: _execution, preflight: _preflight, ...declaration }) => declaration)
60
- .sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));
61
- return deepFreeze({
62
- apiVersion: definition.apiVersion,
63
- checks: declarations,
64
- outputs: definition.outputs,
65
- scheduler: definition.scheduler
82
+ function normalizeSchedulerPolicy(policy) {
83
+ const resourceCapacities = snapshotResourceUnitMapping(policy.resourceCapacities);
84
+ if (resourceCapacities === undefined) {
85
+ throw new TypeError("Project Definition scheduler resource capacities failed normalization");
86
+ }
87
+ let admissionPolicy;
88
+ if (policy.admissionPolicy.kind === "static") {
89
+ admissionPolicy = STATIC_ADMISSION_POLICY;
90
+ }
91
+ else {
92
+ admissionPolicy = Object.freeze({
93
+ kind: "custom",
94
+ strategy: Object.freeze({ ...policy.admissionPolicy.strategy })
95
+ });
96
+ }
97
+ return Object.freeze({
98
+ admissionPolicy,
99
+ maxParallel: policy.maxParallel,
100
+ terminalEffects: Object.freeze([...policy.terminalEffects]),
101
+ resourceCapacities
66
102
  });
67
103
  }
68
- function compareText(left, right) {
69
- if (left < right)
70
- return -1;
71
- if (left > right)
72
- return 1;
73
- return 0;
74
- }
75
- function deepFreeze(value) {
76
- if (typeof value !== "object" || value === null || Object.isFrozen(value))
77
- return value;
78
- for (const item of Object.values(value))
79
- deepFreeze(item);
80
- return Object.freeze(value);
81
- }
82
- function stableJson(value) {
83
- if (Array.isArray(value))
84
- return `[${value.map(stableJson).join(",")}]`;
85
- if (isNonArrayRecord(value))
86
- return `{${Object.keys(value)
87
- .sort()
88
- .map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)
89
- .join(",")}}`;
90
- return JSON.stringify(value);
91
- }
92
104
  //# sourceMappingURL=project-definition.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-definition.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { resolveCheckTree, type ResolvedCheckTreeLeaf } from \"./check-tree/resolution.ts\";\nimport type { MeaninglessCheckWarning } from \"./check-tree/authoring.ts\";\nimport type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { Check, CheckExecution, CheckPreflight, CheckVisibility } from \"../check/check.ts\";\nimport { DEFAULT_PROJECT_OUTPUTS } from \"./output-defaults.ts\";\nimport { isNonArrayRecord } from \"../data-boundary/value-shapes.ts\";\n\n/** 一次 Project Run 的明确输出配置。 */\nexport interface ProjectOutputs {\n /** `run.json` 与 `records.ndjson` publication。 */\n readonly machinePublication: Readonly<{\n /** 相对目录以 project root 解析,默认 `artifacts/vibe-check`。 */\n readonly directory: string;\n /** `false` 时本次 Run 不发布 machine output。 */\n readonly enabled: boolean;\n }>;\n /** 人读 progress rendering。 */\n readonly progressRendering: Readonly<{\n /** `false` 时不构造或写入 progress writer。 */\n readonly enabled: boolean;\n }>;\n /** 仅供维护者读取的一次 invocation diagnostic log。 */\n readonly diagnosticLogging: Readonly<{\n /** 相对目录以 project root 解析,默认 `.log/vibe-check`。 */\n readonly directory: string;\n /** `false` 时不创建 diagnostic writer 或 file。 */\n readonly enabled: boolean;\n }>;\n}\n\n/** 定义级的 Check 调度预算。 */\nexport interface SchedulerPolicy {\n readonly maxParallel: number;\n}\n/** 已补齐默认 outputs、可交给 run 执行的项目定义。 */\nexport interface ProjectDefinition {\n readonly apiVersion: \"1\";\n readonly checks: readonly Check[];\n readonly outputs: ProjectOutputs;\n readonly scheduler: SchedulerPolicy;\n}\ntype ProjectDefinitionInput = Readonly<{\n apiVersion?: \"1\";\n checks?: readonly Check[];\n outputs?: Partial<{\n machinePublication: Partial<ProjectOutputs[\"machinePublication\"]>;\n progressRendering: Partial<ProjectOutputs[\"progressRendering\"]>;\n diagnosticLogging: Partial<ProjectOutputs[\"diagnosticLogging\"]>;\n }>;\n scheduler?: Partial<SchedulerPolicy>;\n}>;\nexport interface ProjectDefinitionDiagnostic {\n readonly kind: \"invalid-project-definition\";\n readonly path: string;\n readonly reason: \"invalid-value\" | \"unknown-key\";\n}\nexport type DefinitionWarning = MeaninglessCheckWarning;\nexport type ProjectDefinitionValidationResult = Readonly<\n | {\n readonly ok: true;\n readonly value: ProjectDefinition;\n readonly warnings: readonly DefinitionWarning[];\n }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\nexport interface NormalizedCheckDeclaration {\n readonly definition: CheckDescriptor;\n readonly dependsOn: readonly string[];\n readonly maxParallel: number;\n readonly mutex: readonly string[];\n readonly options: object;\n readonly visibility: CheckVisibility;\n}\nexport interface NormalizedCheck extends NormalizedCheckDeclaration {\n readonly execution: CheckExecution;\n readonly preflight?: CheckPreflight;\n}\nexport interface DeclarativeProjectSnapshot {\n readonly apiVersion: \"1\";\n readonly checks: readonly NormalizedCheckDeclaration[];\n readonly outputs: ProjectOutputs;\n readonly scheduler: SchedulerPolicy;\n}\nexport interface NormalizedProjectDefinition {\n readonly checks: readonly NormalizedCheck[];\n readonly declarative: DeclarativeProjectSnapshot;\n readonly definitionWarnings: readonly DefinitionWarning[];\n}\n/** 使用 Product 默认输出创建普通 Project Definition。 */\nexport function defineConfig<const T extends ProjectDefinitionInput>(\n value: T & Record<Exclude<keyof T, keyof ProjectDefinitionInput>, never>\n): ProjectDefinition {\n return {\n apiVersion: value.apiVersion ?? \"1\",\n checks: value.checks ?? [],\n outputs: {\n machinePublication: {\n directory:\n value.outputs?.machinePublication?.directory ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.directory,\n enabled:\n value.outputs?.machinePublication?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.enabled\n },\n progressRendering: {\n enabled:\n value.outputs?.progressRendering?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.progressRendering.enabled\n },\n diagnosticLogging: {\n directory:\n value.outputs?.diagnosticLogging?.directory ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.directory,\n enabled:\n value.outputs?.diagnosticLogging?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.enabled\n }\n },\n scheduler: { maxParallel: value.scheduler?.maxParallel ?? 4 }\n };\n}\nexport function normalizeProjectDefinition(\n definition: ProjectDefinition\n): NormalizedProjectDefinition {\n const tree = resolveCheckTree(definition.checks, definition.scheduler.maxParallel);\n if (tree === undefined)\n throw new TypeError(\"Project Definition Check tree failed closed normalization\");\n const checks = Object.freeze(tree.leaves.map(normalizeCheck));\n return Object.freeze({\n checks,\n declarative: freezeDeclarativeSnapshot(definition, checks),\n definitionWarnings: tree.warnings\n });\n}\nfunction normalizeCheck(leaf: ResolvedCheckTreeLeaf): NormalizedCheck {\n return Object.freeze({\n definition: leaf.definition,\n dependsOn: leaf.dependsOn,\n execution: leaf.execution,\n maxParallel: leaf.maxParallel,\n mutex: leaf.mutex,\n options: leaf.options,\n ...(leaf.preflight === undefined ? {} : { preflight: leaf.preflight }),\n visibility: leaf.visibility\n });\n}\nexport function createDeclarativeFingerprint(snapshot: DeclarativeProjectSnapshot): string {\n return createHash(\"sha256\").update(stableJson(snapshot)).digest(\"hex\");\n}\nfunction freezeDeclarativeSnapshot(\n definition: ProjectDefinition,\n checks: readonly NormalizedCheck[]\n): DeclarativeProjectSnapshot {\n const declarations = checks\n .map(({ execution: _execution, preflight: _preflight, ...declaration }) => declaration)\n .sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));\n return deepFreeze({\n apiVersion: definition.apiVersion,\n checks: declarations,\n outputs: definition.outputs,\n scheduler: definition.scheduler\n });\n}\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const item of Object.values(value)) deepFreeze(item);\n return Object.freeze(value);\n}\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n if (isNonArrayRecord(value))\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)\n .join(\",\")}}`;\n return JSON.stringify(value);\n}\n"]}
1
+ {"version":3,"file":"project-definition.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveCheckTree, type ResolvedCheckTreeLeaf } from \"./check-tree/resolution.ts\";\nimport type { MeaninglessCheckWarning } from \"./check-tree/authoring.ts\";\nimport type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type {\n Check,\n CheckPreparation,\n CheckResourceClaims,\n CheckFlagEnablement\n} from \"../check/check.ts\";\nimport type { HandoffProviderIdentity } from \"../check/handoff-provider-identity.ts\";\nimport { DEFAULT_PROJECT_OUTPUTS, resolveProgressRenderingOutput } from \"./output-defaults.ts\";\nimport type {\n ProgressRenderingOutput,\n ResolvedProgressRenderingOutput\n} from \"./progress-rendering-output.ts\";\nimport { createDeclarativeProjectSnapshot } from \"./declarative-snapshot.ts\";\nimport {\n EMPTY_RESOURCE_UNIT_MAPPING,\n snapshotResourceUnitMapping\n} from \"./resource-unit-mapping.ts\";\nimport {\n parseProjectChangesConfiguration,\n type NormalizedProjectChangesConfiguration,\n type ProjectChangesConfiguration\n} from \"./project-changes.ts\";\nexport { createDeclarativeFingerprint } from \"./declarative-snapshot.ts\";\n\n/** 一次 Project Run 的明确输出配置。 */\nexport interface ProjectOutputs {\n /** `run.json` 与 `records.ndjson` publication。 */\n readonly machinePublication: Readonly<{\n /** 相对目录从 project root 解析;绝对目录直接作为 target,默认 `artifacts/vibe-check`。 */\n readonly directory: string;\n /** `false` 时本次 Run 不发布 machine output。 */\n readonly enabled: boolean;\n }>;\n /** 人读 progress lifecycle 与 preview 配置。 */\n readonly progressRendering: ProgressRenderingOutput;\n /** 仅供维护者读取的一次 invocation diagnostic log。 */\n readonly diagnosticLogging: Readonly<{\n /** 相对目录从 project root 解析;绝对目录直接作为 target,默认 `.log/vibe-check`。 */\n readonly directory: string;\n /** `false` 时不创建 diagnostic writer 或 file。 */\n readonly enabled: boolean;\n }>;\n}\n\nexport type {\n ProgressPreviewFormatter,\n ProgressRenderingOutput,\n ResolvedProgressRenderingOutput\n} from \"./progress-rendering-output.ts\";\n\n/** 已解析的 Run outputs;只在 Product invocation 内部使用。 */\nexport interface ResolvedProjectOutputs extends Omit<ProjectOutputs, \"progressRendering\"> {\n readonly progressRendering: ResolvedProgressRenderingOutput;\n}\n\n/** callback-free Definition output 投影;仅供 declarative fingerprint 使用。 */\nexport interface DeclarativeProjectOutputs extends Omit<ProjectOutputs, \"progressRendering\"> {\n readonly progressRendering: Readonly<{\n readonly enabled: boolean;\n readonly formatter: \"custom\" | \"default\";\n readonly messagePreviewLimit: number;\n readonly recordPreviewLimit: number;\n readonly textPreviewCodePointLimit: number;\n }>;\n}\n\nexport type {\n AdmissionPolicy,\n AdmissionPolicyContext,\n AdmissionPolicyMeasurement,\n AdmissionProposal,\n AdmissionCatalog,\n AdmissionGraph,\n AdmissionGraphInput,\n AdmissionInspection,\n AdmissionNonSelectableTask,\n AdmissionRejectionReason,\n AdmissionScopeLifecycle,\n AdmissionSelectionRejectionReason,\n AdmissionSelectionValidation,\n AdmissionSelectionValidationRejectionReason,\n AdmissionSettlementOutcome,\n AdmissionSettledTask,\n AdmissionState,\n AdmissionTransitionResult,\n CustomAdmissionPreparationContext,\n CustomAdmissionStrategy,\n PreparedCustomAdmissionStrategy,\n SchedulerDecisionMeasurementCumulative,\n SchedulerGraphSnapshot,\n SchedulerMeasurementActionObservation,\n SchedulerMeasurementActionObservationInterval,\n SchedulerMeasurementAdmission,\n SchedulerMeasurementContext,\n SchedulerMeasurementEffect,\n SchedulerTerminalEffect,\n SchedulerMeasurementIntervalContribution,\n SchedulerMeasurementPeakCounts,\n SchedulerMeasurementTiming,\n SchedulerMeasurementTimingFacts,\n SchedulerMeasurementTimingUnavailableReason,\n SchedulerPolicy,\n SchedulerRawMeasurement\n} from \"./scheduler-policy.ts\";\nimport type {\n AdmissionPolicy,\n DeclarativeSchedulerPolicy,\n SchedulerPolicy\n} from \"./scheduler-policy.ts\";\n\n/**\n * `defineConfig(...)` 形成的可重复运行项目定义:声明检查内容、调度方式与默认输出。\n *\n * 本次 root、flags、signal、Check 产物与日志目标以及显式 aggregation 交给 `run` 的第二个参数;\n * 其中的 output overrides 只改变当前调用,不修改这里的默认值。\n */\nexport interface ProjectDefinition {\n readonly apiVersion: \"1\";\n readonly checks: readonly Check[];\n /** 可选的静态 Git comparison 与本次 Run 的 change-flag regions。 */\n readonly changes?: ProjectChangesConfiguration;\n readonly outputs: ProjectOutputs;\n readonly scheduler: SchedulerPolicy;\n}\ntype ProjectDefinitionInput = Readonly<{\n apiVersion?: \"1\";\n checks?: readonly Check[];\n changes?: ProjectChangesConfiguration;\n outputs?: Partial<{\n machinePublication: Partial<ProjectOutputs[\"machinePublication\"]>;\n progressRendering: Partial<ProjectOutputs[\"progressRendering\"]>;\n diagnosticLogging: Partial<ProjectOutputs[\"diagnosticLogging\"]>;\n }>;\n scheduler?: Partial<SchedulerPolicy>;\n}>;\nexport interface ProjectDefinitionDiagnostic {\n readonly kind: \"invalid-project-definition\";\n readonly path: string;\n readonly reason: \"invalid-value\" | \"unknown-key\";\n}\nexport type DefinitionWarning = MeaninglessCheckWarning;\nexport type ProjectDefinitionValidationResult = Readonly<\n | {\n readonly ok: true;\n readonly value: ProjectDefinition;\n readonly warnings: readonly DefinitionWarning[];\n }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\nexport interface NormalizedCheckDeclaration {\n readonly admissionPriority: number;\n readonly definition: CheckDescriptor;\n readonly dependsOn: readonly string[];\n /** Definition 已验证、snapshot 并冻结的单一 recursive flag-condition control。 */\n readonly enabledByFlags?: CheckFlagEnablement;\n readonly maxParallel: number;\n readonly mutex: readonly string[];\n readonly observes: readonly string[];\n readonly options: object;\n readonly resourceClaims: CheckResourceClaims;\n readonly omitQuietPassedRow: boolean;\n}\nexport interface NormalizedCheck extends NormalizedCheckDeclaration {\n readonly execute: NonNullable<Check[\"execute\"]>;\n readonly handoff?: HandoffProviderIdentity;\n readonly prepare?: CheckPreparation;\n}\nexport interface DeclarativeProjectSnapshot {\n readonly apiVersion: \"1\";\n readonly checks: readonly NormalizedCheckDeclaration[];\n readonly changes?: NormalizedProjectChangesConfiguration;\n readonly outputs: DeclarativeProjectOutputs;\n readonly scheduler: DeclarativeSchedulerPolicy;\n}\nexport interface NormalizedProjectDefinition {\n readonly checks: readonly NormalizedCheck[];\n readonly changes?: NormalizedProjectChangesConfiguration;\n readonly declarative: DeclarativeProjectSnapshot;\n readonly definitionWarnings: readonly DefinitionWarning[];\n /** Runtime scheduler policy;custom callback 保留在此处。 */\n readonly scheduler: SchedulerPolicy;\n}\nconst STATIC_ADMISSION_POLICY: AdmissionPolicy = Object.freeze({\n kind: \"static\"\n});\n/** 使用 Product 默认输出创建普通 Project Definition。 */\nexport function defineConfig<const T extends ProjectDefinitionInput>(\n value: T & Record<Exclude<keyof T, keyof ProjectDefinitionInput>, never>\n): ProjectDefinition {\n return {\n apiVersion: value.apiVersion ?? \"1\",\n checks: value.checks ?? [],\n ...(value.changes === undefined ? {} : { changes: value.changes }),\n outputs: {\n machinePublication: {\n directory:\n value.outputs?.machinePublication?.directory ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.directory,\n enabled:\n value.outputs?.machinePublication?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.enabled\n },\n progressRendering: resolveProgressRenderingOutput(value.outputs?.progressRendering ?? {}),\n diagnosticLogging: {\n directory:\n value.outputs?.diagnosticLogging?.directory ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.directory,\n enabled:\n value.outputs?.diagnosticLogging?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.enabled\n }\n },\n scheduler: {\n admissionPolicy: value.scheduler?.admissionPolicy ?? STATIC_ADMISSION_POLICY,\n maxParallel: value.scheduler?.maxParallel ?? 4,\n terminalEffects: value.scheduler?.terminalEffects ?? [],\n resourceCapacities: value.scheduler?.resourceCapacities ?? EMPTY_RESOURCE_UNIT_MAPPING\n }\n };\n}\nexport function normalizeProjectDefinition(\n definition: ProjectDefinition\n): NormalizedProjectDefinition {\n const scheduler = normalizeSchedulerPolicy(definition.scheduler);\n const tree = resolveCheckTree(\n definition.checks,\n scheduler.maxParallel,\n scheduler.resourceCapacities\n );\n if (tree === undefined)\n throw new TypeError(\"Project Definition Check tree failed closed normalization\");\n const checks = Object.freeze(tree.leaves.map(normalizeCheck));\n const changes =\n definition.changes === undefined\n ? undefined\n : parseProjectChangesConfiguration(definition.changes);\n if (definition.changes !== undefined && changes === undefined) {\n throw new TypeError(\"Project Definition changes failed closed normalization\");\n }\n const { changes: _authoredChanges, ...baseDefinition } = definition;\n const normalizedDefinition = Object.freeze({\n ...baseDefinition,\n ...(changes === undefined ? {} : { changes }),\n scheduler\n });\n return Object.freeze({\n checks,\n ...(changes === undefined ? {} : { changes }),\n declarative: createDeclarativeProjectSnapshot(normalizedDefinition, checks),\n definitionWarnings: tree.warnings,\n scheduler\n });\n}\nfunction normalizeCheck(leaf: ResolvedCheckTreeLeaf): NormalizedCheck {\n return Object.freeze({\n admissionPriority: leaf.admissionPriority,\n definition: leaf.definition,\n dependsOn: leaf.dependsOn,\n ...(leaf.enabledByFlags === undefined ? {} : { enabledByFlags: leaf.enabledByFlags }),\n execute: leaf.execute,\n ...(leaf.handoff === undefined ? {} : { handoff: leaf.handoff }),\n maxParallel: leaf.maxParallel,\n mutex: leaf.mutex,\n observes: leaf.observes,\n options: leaf.options,\n ...(leaf.prepare === undefined ? {} : { prepare: leaf.prepare }),\n resourceClaims: leaf.resourceClaims,\n omitQuietPassedRow: leaf.omitQuietPassedRow\n });\n}\nfunction normalizeSchedulerPolicy(policy: SchedulerPolicy): SchedulerPolicy {\n const resourceCapacities = snapshotResourceUnitMapping(policy.resourceCapacities);\n if (resourceCapacities === undefined) {\n throw new TypeError(\"Project Definition scheduler resource capacities failed normalization\");\n }\n let admissionPolicy: AdmissionPolicy;\n if (policy.admissionPolicy.kind === \"static\") {\n admissionPolicy = STATIC_ADMISSION_POLICY;\n } else {\n admissionPolicy = Object.freeze({\n kind: \"custom\" as const,\n strategy: Object.freeze({ ...policy.admissionPolicy.strategy })\n });\n }\n return Object.freeze({\n admissionPolicy,\n maxParallel: policy.maxParallel,\n terminalEffects: Object.freeze([...policy.terminalEffects]),\n resourceCapacities\n });\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
2
+ export const EMPTY_RESOURCE_UNIT_MAPPING = Object.freeze({});
3
+ /** Snapshots a canonical closed resource-to-positive-units mapping. */
4
+ export function snapshotResourceUnitMapping(value) {
5
+ const data = snapshotClosedRecord(value);
6
+ if (data === undefined)
7
+ return undefined;
8
+ const entries = [];
9
+ for (const resourceId of Object.keys(data).sort()) {
10
+ const units = data[resourceId];
11
+ if (resourceId.trim().length === 0 ||
12
+ typeof units !== "number" ||
13
+ !Number.isSafeInteger(units) ||
14
+ units <= 0) {
15
+ return undefined;
16
+ }
17
+ entries.push([resourceId, units]);
18
+ }
19
+ return Object.freeze(Object.fromEntries(entries));
20
+ }
21
+ //# sourceMappingURL=resource-unit-mapping.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-unit-mapping.mjs","sourceRoot":"","sources":["../../../src/project-definition/resource-unit-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,MAAM,CAAC,MAAM,2BAA2B,GAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAElF,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,IACE,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;YAC5B,KAAK,IAAI,CAAC,EACV,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import { snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport type ResourceUnitMapping = Readonly<Record<string, number>>;\n\nexport const EMPTY_RESOURCE_UNIT_MAPPING: ResourceUnitMapping = Object.freeze({});\n\n/** Snapshots a canonical closed resource-to-positive-units mapping. */\nexport function snapshotResourceUnitMapping(value: unknown): ResourceUnitMapping | undefined {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return undefined;\n const entries: [string, number][] = [];\n for (const resourceId of Object.keys(data).sort()) {\n const units = data[resourceId];\n if (\n resourceId.trim().length === 0 ||\n typeof units !== \"number\" ||\n !Number.isSafeInteger(units) ||\n units <= 0\n ) {\n return undefined;\n }\n entries.push([resourceId, units]);\n }\n return Object.freeze(Object.fromEntries(entries));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scheduler-policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-policy.mjs","sourceRoot":"","sources":["../../../src/project-definition/scheduler-policy.ts"],"names":[],"mappings":"","sourcesContent":["/** 自定义准入 policy 对当前 Task 的唯一提议。 */\nexport type AdmissionProposal =\n | Readonly<{ readonly kind: \"select\"; readonly taskId: string }>\n | Readonly<{ readonly kind: \"wait\" }>;\n\n/** 独立模拟 immutable Scheduler admission graph 的 exact input。 */\nexport interface AdmissionGraphInput {\n /** 要模拟的已规范化静态图 DTO;模拟器会先验证其 closed shape 与引用。 */\n readonly graph: SchedulerGraphSnapshot;\n /** standalone state 的 root 并行上限。 */\n readonly maxParallel: number;\n}\n\n/** 一次假设性 Task settlement 的公开二值结果;它不是 Task execution result。 */\nexport type AdmissionSettlementOutcome = \"satisfied\" | \"unsatisfied\";\n\n/** 可从同一静态图形成 independent initial states 的 standalone handle。 */\nexport interface AdmissionGraph {\n /** 从同一已验证 graph 形成一个新的全 pending immutable state。 */\n initialState(this: void): AdmissionState;\n}\n\n/** 不可变且 opaque 的 hypothetical admission boundary。 */\nexport interface AdmissionState {\n /** 当前 dynamic admission facts;读取不会控制真实 Scheduler。 */\n readonly inspection: AdmissionInspection;\n /** 当前 pending Task 的可选性分区;按 canonical taskId 顺序输出。 */\n readonly catalog: AdmissionCatalog;\n /** 只模拟一次 admission,不启动、预检或执行 Task。 */\n select(this: void, taskId: string): AdmissionTransitionResult;\n /** 只模拟一个当前 running Task 的二值结算。 */\n settle(\n this: void,\n taskId: string,\n outcome: AdmissionSettlementOutcome\n ): AdmissionTransitionResult;\n /** 不构造 catalog 的单 Task select legality query。 */\n validateSelection(this: void, taskId: string): AdmissionSelectionValidation;\n}\n\n/** 当前 immutable state 的公开动态 inspection。 */\nexport interface AdmissionInspection {\n /** 当前 root、active scope 与 running count 形成的 capacity 快照。 */\n readonly capacity: Readonly<{\n /** 合成当前 active scope 限制后的有效并行上限。 */\n readonly effectiveMaxParallel: number;\n /** standalone graph 的 root 并行上限。 */\n readonly maxParallel: number;\n /** 当前 hypothetical running Task 数。 */\n readonly running: number;\n }>;\n /** 下一合法动作类别:选择 Task、等待 running Task,或 state 已完成。 */\n readonly nextBoundary: \"select\" | \"wait\" | \"complete\";\n /** 当前 hypothetical running Task IDs,按 graph 的 canonical Task 顺序。 */\n readonly runningTaskIds: readonly string[];\n /** 当前 named resource occupancy;按 resourceId 规范排序。 */\n readonly resources: readonly Readonly<{\n /** 尚可原子取得的 units。 */\n readonly available: number;\n /** graph 声明的总 units。 */\n readonly capacity: number;\n /** 当前 running Tasks 已占用的 units。 */\n readonly inUse: number;\n /** named resource 的稳定 ID。 */\n readonly resourceId: string;\n }>[];\n /** 每个静态 scope 的当前 lifecycle,按 scopeId 规范排序。 */\n readonly scopes: readonly AdmissionScopeLifecycle[];\n /** 可映射为 satisfied/unsatisfied 的 hypothetical settlements。 */\n readonly settledTasks: readonly AdmissionSettledTask[];\n}\n\n/** 一个静态 scope 的推导 lifecycle。 */\nexport interface AdmissionScopeLifecycle {\n /** scope 尚未激活、当前 active,或 terminal Task 已结算后的 closed 状态。 */\n readonly lifecycle: \"inactive\" | \"active\" | \"closed\";\n /** graph 中声明的稳定 scope ID。 */\n readonly scopeId: string;\n}\n\n/** 可公开映射为 binary outcome 的 Task settlement。 */\nexport interface AdmissionSettledTask {\n /** 本次 hypothetical settlement 是否满足 dependents 的前置关系。 */\n readonly outcome: AdmissionSettlementOutcome;\n /** 已结算 Task 的稳定 ID。 */\n readonly taskId: string;\n}\n\n/** 所有 pending Task 的 canonical selectable/non-selectable partition。 */\nexport interface AdmissionCatalog {\n /** 当前 pending 但不可 select 的 Tasks 及其 primary reason。 */\n readonly nonSelectableTasks: readonly AdmissionNonSelectableTask[];\n /** 当前可合法 select 的 pending Task IDs。 */\n readonly selectableTaskIds: readonly string[];\n}\n\n/** catalog 中一个 pending Task 的 primary non-selection reason。 */\nexport interface AdmissionNonSelectableTask {\n /** 该 Task 当前不可 select 的 canonical primary reason。 */\n readonly reason: AdmissionSelectionRejectionReason;\n /** 当前仍 pending 的稳定 Task ID。 */\n readonly taskId: string;\n}\n\n/** pending Task 因当前 admission legality 不可 select 的 closed reason。 */\nexport type AdmissionSelectionRejectionReason =\n | Readonly<{ readonly kind: \"depends-on-pending\"; readonly taskIds: readonly string[] }>\n | Readonly<{ readonly kind: \"mutex-held\"; readonly mutexIds: readonly string[] }>\n | Readonly<{\n readonly kind: \"root-capacity-reached\";\n readonly maxParallel: number;\n readonly running: number;\n }>\n | Readonly<{\n readonly kind: \"scope-capacity-reached\";\n readonly maxParallel: number;\n readonly running: number;\n readonly scopeId: string;\n }>\n | Readonly<{\n readonly kind: \"resource-capacity-insufficient\";\n readonly resources: readonly Readonly<{\n readonly available: number;\n readonly capacity: number;\n readonly inUse: number;\n readonly required: number;\n readonly resourceId: string;\n }>[];\n }>\n | Readonly<{ readonly kind: \"observes-pending\"; readonly taskIds: readonly string[] }>;\n\n/** validateSelection/select 共同使用的完整 selection validation failure surface。 */\nexport type AdmissionSelectionValidationRejectionReason =\n | AdmissionSelectionRejectionReason\n | Readonly<{ readonly kind: \"not-pending\"; readonly status: \"running\" | \"settled\" }>\n | Readonly<{ readonly kind: \"state-complete\" }>\n | Readonly<{ readonly kind: \"unknown-task\" }>;\n\n/** select 或 settle 公开 transition 的完整 rejection surface。 */\nexport type AdmissionRejectionReason =\n | AdmissionSelectionValidationRejectionReason\n | Readonly<{ readonly kind: \"invalid-settlement-outcome\" }>\n | Readonly<{ readonly kind: \"not-running\"; readonly status: \"pending\" | \"settled\" }>;\n\n/** 任意 taskId 的只读 selection validation result。 */\nexport type AdmissionSelectionValidation =\n | Readonly<{ readonly accepted: true }>\n | Readonly<{\n readonly accepted: false;\n readonly reason: AdmissionSelectionValidationRejectionReason;\n }>;\n\n/** accepted successor 或 closed rejection 的 immutable transition result。 */\nexport type AdmissionTransitionResult =\n | Readonly<{ readonly accepted: true; readonly state: AdmissionState }>\n | Readonly<{ readonly accepted: false; readonly reason: AdmissionRejectionReason }>;\n\n/**\n * 自定义准入 policy 每轮获得的不可变普通数据快照。\n *\n * 它只提供完整调度图及当前可观察的准入事实,不能启动、取消或结算 Task。\n */\nexport interface AdmissionPolicyContext {\n /** 已规范化的完整静态调度图;Task metadata 是拓扑和 priority 的唯一来源。 */\n readonly graph: SchedulerGraphSnapshot;\n /** 当前 real decision boundary 的同型假设状态;不能 reservation 或控制 Task。 */\n readonly admissionState: AdmissionState;\n /** 已满足 relation/mutex 条件的 pending Task 及其本轮 capacity 可准入性。 */\n readonly candidates: readonly Readonly<{\n readonly canAdmit: boolean;\n readonly taskId: string;\n }>[];\n /** 当前 root 与已激活 scope 合成后的 capacity 事实。 */\n readonly capacity: Readonly<{\n readonly effectiveMaxParallel: number;\n readonly maxParallel: number;\n readonly running: number;\n }>;\n /** 当前已激活 scope 的 canonical IDs。 */\n readonly activeScopeIds: readonly string[];\n /** 当前正在执行的 Task IDs。 */\n readonly runningTaskIds: readonly string[];\n /** 当前已结算的 Task IDs;不携带 Check result、data 或 message。 */\n readonly settledTaskIds: readonly string[];\n /** 调用前已 flush 的有界累计事实与 captured action-observation prefix。 */\n readonly measurement: AdmissionPolicyMeasurement;\n /** 本轮与生命周期有关的最小只读事实。 */\n readonly runtime: Readonly<{\n readonly abortRequested: boolean;\n readonly cancelled: boolean;\n }>;\n}\n\n/** custom prepared strategy 在 graph ready 后读取的最小只读事实。 */\nexport interface CustomAdmissionPreparationContext {\n /** 已规范化、递归冻结的完整静态调度图。 */\n readonly graph: SchedulerGraphSnapshot;\n}\n\n/** prepared custom strategy 为当前 Run 返回的同步选择与可选 terminal completion。 */\nexport interface PreparedCustomAdmissionStrategy {\n /** Scheduler 每轮同步调用;不得返回 Promise 或 thenable。 */\n readonly decide: (this: void, context: AdmissionPolicyContext) => AdmissionProposal;\n /** Scheduler 的 generic Hooks 完成后,才以 sealed terminal context 调用一次。 */\n readonly terminalEffect?: (\n this: void,\n context: SchedulerMeasurementContext\n ) => void | Promise<void>;\n}\n\n/** custom 的 closed authoring grammar。 */\nexport type CustomAdmissionStrategy =\n | Readonly<{\n readonly kind: \"simple\";\n readonly decide: (this: void, context: AdmissionPolicyContext) => AdmissionProposal;\n }>\n | Readonly<{\n readonly kind: \"prepared\";\n readonly prepare: (\n this: void,\n context: CustomAdmissionPreparationContext\n ) => PreparedCustomAdmissionStrategy | Promise<PreparedCustomAdmissionStrategy>;\n }>;\n\n/** Definition authoring 的 closed admission policy。 */\nexport type AdmissionPolicy =\n | Readonly<{ readonly kind: \"static\" }>\n | Readonly<{\n readonly kind: \"custom\";\n readonly strategy: CustomAdmissionStrategy;\n }>;\n\n/** 定义级的 Check 调度预算与 admission policy。 */\nexport type SchedulerMeasurementTimingUnavailableReason =\n | \"clock-threw\"\n | \"clock-non-finite\"\n | \"clock-backward\"\n | \"interval-invalid\"\n | \"integral-invalid\";\n\nexport type SchedulerMeasurementTiming =\n | Readonly<{ readonly availability: \"available\" }>\n | Readonly<{\n readonly availability: \"unavailable\";\n readonly reason: SchedulerMeasurementTimingUnavailableReason;\n }>;\n\n/** 所有公开 Scheduler context 共用的图 DTO;Task identity 一律为 `taskId`。 */\nexport interface SchedulerGraphSnapshot {\n /** 全部 named resource capacities,按 resourceId 规范排序。 */\n readonly resourceCapacities: readonly Readonly<{\n /** named resource 的稳定 ID。 */\n readonly resourceId: string;\n /** 本次 invocation 可供原子 claim 的总 units。 */\n readonly units: number;\n }>[];\n /** 全部静态 scopes 的 normalized lifecycle 边界。 */\n readonly scopes: readonly Readonly<{\n /** 选择其中任一列出的 Task 后会激活该 scope。 */\n readonly activationTaskIds: readonly string[];\n /** scope 的稳定 ID。 */\n readonly id: string;\n /** scope active 时允许的最大并行 Task 数。 */\n readonly maxParallel: number;\n /** 结算后关闭该 scope 的 terminal Task ID。 */\n readonly terminalTaskId: string;\n }>[];\n /** 全部 normalized Tasks 及静态 admission metadata。 */\n readonly tasks: readonly Readonly<{\n /** 同一 selection layer 中用于静态排序的 priority。 */\n readonly admissionPriority: number;\n /** 必须以 completed settlement 满足的直接 dependency Task IDs。 */\n readonly dependsOn: readonly string[];\n /** 与 running Tasks 不能同时持有的 mutex IDs。 */\n readonly mutex: readonly string[];\n /** 只要求先结算、但不要求 completed 的直接 observed Task IDs。 */\n readonly observes: readonly string[];\n /** admission 时必须一次性取得的 named resource claims。 */\n readonly resourceClaims: readonly Readonly<{\n /** 被 claim 的 named resource ID。 */\n readonly resourceId: string;\n /** 该 Task 运行期间占用的 units。 */\n readonly units: number;\n }>[];\n /** 所属静态 scope ID;不属于 scope 时为 null。 */\n readonly scopeId: string | null;\n /** Task 在全部 Scheduler DTO 中使用的稳定 ID。 */\n readonly taskId: string;\n }>[];\n}\n\n/** 一条已关闭 occupancy interval 对累计值的有界贡献。 */\nexport interface SchedulerMeasurementIntervalContribution {\n /** admission-viable 且当时可准入的 pending Task 数对 interval 的时间积分。 */\n readonly admissiblePendingTaskMs: number;\n /** 已接受 wait action 在 interval 内实际延续的毫秒数。 */\n readonly acceptedWaitMs: number;\n /** 因 root、scope 或 named resource capacity 不足而阻塞的 pending Task·ms。 */\n readonly capacityBlockedTaskMs: number;\n /** effectiveMaxParallel 对 interval 的 capacity-slot·ms 积分。 */\n readonly effectiveCapacitySlotMs: number;\n /** 因 mutex conflict 而阻塞的 pending Task·ms。 */\n readonly mutexBlockedTaskMs: number;\n /** root maxParallel 对 interval 的 capacity-slot·ms 积分。 */\n readonly rootCapacitySlotMs: number;\n /** running Task 数对 interval 的 Task·ms 积分。 */\n readonly taskSlotMs: number;\n}\n\n/** 已关闭 action-observation interval 的 timing 边界;不可用 timing 不伪造数值贡献。 */\nexport type SchedulerMeasurementActionObservationInterval =\n | Readonly<{\n readonly availability: \"available\";\n readonly contribution: SchedulerMeasurementIntervalContribution;\n }>\n | Readonly<{\n readonly availability: \"unavailable\";\n readonly reason: SchedulerMeasurementTimingUnavailableReason;\n }>;\n\n/** 一条 policy action 之后发生的离散 Scheduler effect。 */\nexport type SchedulerMeasurementEffect =\n | Readonly<{ readonly kind: \"admitted\"; readonly taskId: string }>\n | Readonly<{\n readonly kind: \"settled\";\n readonly settlementKind:\n | \"completed\"\n | \"prerequisite-unsatisfied\"\n | \"failed\"\n | \"blocked\"\n | \"cancelled-before-start\";\n readonly taskId: string;\n }>;\n\n/** 上一 accepted policy action 之后的已 flush state observation,不声明 causality 或 critical path。 */\nexport type SchedulerMeasurementActionObservation =\n | Readonly<{\n readonly effects: readonly SchedulerMeasurementEffect[];\n readonly interval: SchedulerMeasurementActionObservationInterval;\n readonly kind: \"select\";\n /** invocation 内的 accepted action 序号,从一开始。 */\n readonly sequence: number;\n readonly taskId: string;\n }>\n | Readonly<{\n readonly effects: readonly SchedulerMeasurementEffect[];\n readonly interval: SchedulerMeasurementActionObservationInterval;\n readonly kind: \"wait\";\n /** invocation 内的 accepted action 序号,从一开始。 */\n readonly sequence: number;\n readonly taskId: null;\n }>;\n\n/** custom policy 的有界 decision-boundary measurement reader。 */\nexport interface AdmissionPolicyMeasurement {\n /** 当前 decision boundary 的累计标量;完整逐 Task table 只属于终态 measurement。 */\n readonly cumulative: SchedulerDecisionMeasurementCumulative;\n /** 当前 invocation 已捕获且不可变的 action observation prefix 长度。 */\n readonly measurementCount: number;\n /** 只读取当前 context 冻结的 observation prefix;越界 index 返回 `undefined`。 */\n readonly measurementAt: (\n this: void,\n index: number\n ) => SchedulerMeasurementActionObservation | undefined;\n}\n\n/** policy 决策时的有界累计事实;刻意不含 terminal per-Task table。 */\ninterface SchedulerDecisionMeasurementCumulativeFacts {\n /** normalized declarative Definition 的匹配 fingerprint;不包含 controls 或 runtime facts。 */\n readonly declarativeFingerprint: string;\n /** 当前 boundary 前已累计的离散 Scheduler 计数。 */\n readonly discrete: Readonly<{\n /** Scheduler 已接受的 wait proposals 数。 */\n readonly acceptedWaitCount: number;\n /** 已实际 admission 的不同 Task 数。 */\n readonly admittedCount: number;\n /** 已观察到的最大同时 running Task 数。 */\n readonly maxRunning: number;\n }>;\n /** 可来自不同 boundary、不能相加的 admission queue 峰值。 */\n readonly peaks: SchedulerMeasurementPeakCounts;\n}\n\ninterface AvailableSchedulerDecisionMeasurementCumulative extends SchedulerDecisionMeasurementCumulativeFacts {\n /** available 表示本 branch 的累计 timingFacts 可读。 */\n readonly timing: Readonly<{ readonly availability: \"available\" }>;\n /** decision boundary 前已累计的 timing integrals。 */\n readonly timingFacts: Readonly<{\n /** 已接受 wait action 累计延续的毫秒数。 */\n readonly acceptedWaitMs: number;\n /** effective capacity slot 的累计毫秒积分。 */\n readonly effectiveCapacitySlotMs: number;\n /** root capacity slot 的累计毫秒积分。 */\n readonly rootCapacitySlotMs: number;\n /** running Task slot 的累计毫秒积分。 */\n readonly taskSlotMs: number;\n }>;\n}\n\ninterface UnavailableSchedulerDecisionMeasurementCumulative extends SchedulerDecisionMeasurementCumulativeFacts {\n readonly timing: Readonly<{\n readonly availability: \"unavailable\";\n readonly reason: SchedulerMeasurementTimingUnavailableReason;\n }>;\n readonly timingFacts?: never;\n}\n\n/** custom policy 在 decision boundary 读取的有界累计 measurement;不含终态逐 Task table。 */\nexport type SchedulerDecisionMeasurementCumulative =\n | AvailableSchedulerDecisionMeasurementCumulative\n | UnavailableSchedulerDecisionMeasurementCumulative;\n\nexport interface SchedulerMeasurementPeakCounts {\n /** 任一 boundary 上全部 admission-viable pending Tasks 的最大数量。 */\n readonly admissionViablePendingTaskCount: number;\n /** 任一 boundary 上可立即准入的 pending Tasks 最大数量。 */\n readonly admissiblePendingTaskCount: number;\n /** 任一 boundary 上 capacity-blocked pending Tasks 最大数量。 */\n readonly capacityBlockedTaskCount: number;\n /** 任一 boundary 上 mutex-blocked pending Tasks 最大数量。 */\n readonly mutexBlockedTaskCount: number;\n}\n\nexport interface SchedulerMeasurementAdmission {\n /** 该 Task 在 admission-viable pending 期间的互斥 delay 分类积分。 */\n readonly admissionDelay: Readonly<{\n /** Task 可准入但仍 pending 的累计毫秒数。 */\n readonly admissiblePendingMs: number;\n /** Task 因 capacity 不足仍 pending 的累计毫秒数。 */\n readonly capacityBlockedMs: number;\n /** Task 因 mutex conflict 仍 pending 的累计毫秒数。 */\n readonly mutexBlockedMs: number;\n }>;\n /** Scheduler monotonic-clock timestamp in milliseconds, or no admission occurred. */\n readonly admittedAtMonotonicMs: number | null;\n /** Scheduler monotonic-clock timestamp in milliseconds, or no settlement occurred. */\n readonly settledAtMonotonicMs: number | null;\n /** 被测 Task 的稳定 ID。 */\n readonly taskId: string;\n}\n\nexport interface SchedulerMeasurementTimingFacts {\n /** 已接受 wait action 累计延续的毫秒数。 */\n readonly acceptedWaitMs: number;\n /** 进入过 admission-viable pending 集合的逐 Task timing facts。 */\n readonly admissions: readonly SchedulerMeasurementAdmission[];\n /** effective capacity slot 的累计毫秒积分。 */\n readonly effectiveCapacitySlotMs: number;\n /** Terminal Scheduler monotonic-clock timestamp in milliseconds. */\n readonly endedAtMonotonicMs: number;\n /** root capacity slot 的累计毫秒积分。 */\n readonly rootCapacitySlotMs: number;\n /** Scheduler 同步 shell control operations 内累计的毫秒数。 */\n readonly schedulerControlPathMs: number;\n /** decision diagnostic observation work 内累计的毫秒数。 */\n readonly schedulerDecisionObservationMs: number;\n /** First Scheduler monotonic-clock timestamp in milliseconds. */\n readonly startedAtMonotonicMs: number;\n /** running Task slot 的累计毫秒积分。 */\n readonly taskSlotMs: number;\n}\n\ninterface SchedulerRawMeasurementFacts {\n /** normalized declarative Definition 的匹配 fingerprint;不包含 controls 或 runtime facts。 */\n readonly declarativeFingerprint: string;\n /** 即使 timing unavailable 也保留的离散终态事实。 */\n readonly discrete: Readonly<{\n /** Scheduler 已接受的 wait proposals 数。 */\n readonly acceptedWaitCount: number;\n /** 已实际 admission 的不同 Task 数。 */\n readonly admittedCount: number;\n /** 最后一次 admission 后当时仍 active 的完整 Task ID 集合。 */\n readonly completionTailActiveTaskIds: readonly string[];\n /** 最后结算的 Task ID;没有 settlement 时为 null。 */\n readonly lastSettledTaskId: string | null;\n /** 已观察到的最大同时 running Task 数。 */\n readonly maxRunning: number;\n }>;\n /** 可来自不同 boundary、不能相加的 admission queue 峰值。 */\n readonly peaks: SchedulerMeasurementPeakCounts;\n}\n\ninterface AvailableSchedulerRawMeasurement extends SchedulerRawMeasurementFacts {\n /** available 表示完整终态 timingFacts 可读。 */\n readonly timing: Readonly<{ readonly availability: \"available\" }>;\n /** 基于 Scheduler monotonic clock 形成的完整终态 timing facts。 */\n readonly timingFacts: SchedulerMeasurementTimingFacts;\n}\n\ninterface UnavailableSchedulerRawMeasurement extends SchedulerRawMeasurementFacts {\n readonly timing: Readonly<{\n readonly availability: \"unavailable\";\n readonly reason: SchedulerMeasurementTimingUnavailableReason;\n }>;\n readonly timingFacts?: never;\n}\n\n/** Scheduler-owned terminal 一阶事实;全部二级 summary 都由 Hook 投影。 */\nexport type SchedulerRawMeasurement =\n | AvailableSchedulerRawMeasurement\n | UnavailableSchedulerRawMeasurement;\n\n/**\n * 一次 Scheduler 终态 Hook 可读取的递归冻结上下文;不包含 Task 值、错误或可变 engine 对象。\n */\nexport interface SchedulerMeasurementContext {\n /** 本次 Scheduler 实际使用的 normalized frozen graph。 */\n readonly graph: SchedulerGraphSnapshot;\n /** 不含 Task value、Check result 或 error 的终态 execution 投影。 */\n readonly execution: Readonly<{\n /** 至少实际启动过一次的 Task IDs,按首次 admission 顺序。 */\n readonly admittedTaskIds: readonly string[];\n /** graph 中每个 Task 的终态 Scheduler settlement,按 canonical Task 顺序。 */\n readonly settledTasks: readonly Readonly<{\n /** Scheduler settlement kind;completed 不等同于 Check passed。 */\n readonly kind:\n | \"completed\"\n | \"prerequisite-unsatisfied\"\n | \"failed\"\n | \"blocked\"\n | \"cancelled-before-start\";\n /** 已结算 Task 的稳定 ID。 */\n readonly taskId: string;\n }>[];\n }>;\n /** Scheduler-owned 一阶计数与可选 timing facts。 */\n readonly rawMeasurement: SchedulerRawMeasurement;\n}\n\n/** 一次 terminal Scheduler measurement 的 caller-owned sync/async consumer。 */\nexport type SchedulerTerminalEffect =\n | ((this: void, context: SchedulerMeasurementContext) => void)\n | ((this: void, context: SchedulerMeasurementContext) => Promise<void>);\n\n/** 定义级的 Scheduler 预算、admission policy 与终态 measurement consumer。 */\nexport interface SchedulerPolicy {\n /** normalized static or custom admission policy。 */\n readonly admissionPolicy: AdmissionPolicy;\n /** 同时 running 的 root Check 上限。 */\n readonly maxParallel: number;\n /** terminal measurement 的 caller-owned consumers,按配置顺序调用。 */\n readonly terminalEffects: readonly SchedulerTerminalEffect[];\n /** 本次 Definition 中可由 Check 原子占用的 named resource 总 units。 */\n readonly resourceCapacities: Readonly<Record<string, number>>;\n}\n\nexport interface DeclarativeSchedulerPolicy {\n readonly admissionPolicy:\n | Readonly<{ readonly kind: \"static\" }>\n | Readonly<{\n readonly kind: \"custom\";\n readonly strategy: Readonly<{ readonly kind: \"simple\" | \"prepared\" }>;\n }>;\n readonly maxParallel: number;\n readonly resourceCapacities: Readonly<Record<string, number>>;\n}\n"]}
@@ -0,0 +1,57 @@
1
+ import { snapshotClosedPolicyRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { admissionSelectionPolicyFor } from "../task-scheduler/custom-admission-policy.mjs";
3
+ /** Builds the exact Run-local Scheduler handoff and optional terminal participant for custom strategy. */
4
+ export async function prepareCustomAdmissionStrategy(policy, graph) {
5
+ const strategy = policy.strategy;
6
+ if (strategy.kind === "simple") {
7
+ return preparedCustomAdmissionStrategy({ decide: strategy.decide });
8
+ }
9
+ const prepared = await prepareCustomStrategy(strategy.prepare, Object.freeze({ graph }));
10
+ return preparedCustomAdmissionStrategy(prepared);
11
+ }
12
+ async function prepareCustomStrategy(prepare, context) {
13
+ let prepared;
14
+ try {
15
+ prepared = await prepare(context);
16
+ }
17
+ catch {
18
+ throw new AdmissionStrategyPreparationFailure();
19
+ }
20
+ const record = snapshotClosedPolicyRecord(prepared, {
21
+ optional: ["terminalEffect"],
22
+ required: ["decide"]
23
+ });
24
+ if (record === undefined || !isPreparedCustomDecision(record.decide)) {
25
+ throw new AdmissionStrategyPreparationFailure();
26
+ }
27
+ if (record.terminalEffect !== undefined && !isPreparedCustomCompletion(record.terminalEffect)) {
28
+ throw new AdmissionStrategyPreparationFailure();
29
+ }
30
+ return Object.freeze({
31
+ decide: record.decide,
32
+ ...(record.terminalEffect === undefined ? {} : { terminalEffect: record.terminalEffect })
33
+ });
34
+ }
35
+ function isPreparedCustomDecision(value) {
36
+ return typeof value === "function";
37
+ }
38
+ function isPreparedCustomCompletion(value) {
39
+ return typeof value === "function";
40
+ }
41
+ function preparedCustomAdmissionStrategy(strategy) {
42
+ const completion = strategy.terminalEffect === undefined
43
+ ? Object.freeze({ kind: "none" })
44
+ : Object.freeze({
45
+ kind: "terminal-effect",
46
+ terminalEffect: strategy.terminalEffect
47
+ });
48
+ return Object.freeze({
49
+ admissionPolicy: admissionSelectionPolicyFor(strategy.decide),
50
+ completion,
51
+ requiresTerminalMeasurement: completion.kind === "terminal-effect"
52
+ });
53
+ }
54
+ /** Raised only when public prepared custom strategy setup cannot form its exact Run-local closure. */
55
+ export class AdmissionStrategyPreparationFailure extends Error {
56
+ }
57
+ //# sourceMappingURL=custom-strategy-preparation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-strategy-preparation.mjs","sourceRoot":"","sources":["../../../../src/project-run/admission-strategy-provider/custom-strategy-preparation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAG3F,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAA6D,EAC7D,KAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,+BAA+B,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACzF,OAAO,+BAA+B,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAG+E,EAC/E,OAA0C;IAE1C,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mCAAmC,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE;QAClD,QAAQ,EAAE,CAAC,gBAAgB,CAAC;QAC5B,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,mCAAmC,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,mCAAmC,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;KAC1F,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,+BAA+B,CACtC,QAA4E;IAE5E,MAAM,UAAU,GACd,QAAQ,CAAC,cAAc,KAAK,SAAS;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACZ,IAAI,EAAE,iBAA0B;YAChC,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC,CAAC,CAAC;IACT,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,2BAA2B,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7D,UAAU;QACV,2BAA2B,EAAE,UAAU,CAAC,IAAI,KAAK,iBAAiB;KACnE,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,MAAM,OAAO,mCAAoC,SAAQ,KAAK;CAAG","sourcesContent":["import type {\n AdmissionPolicy,\n CustomAdmissionPreparationContext,\n PreparedCustomAdmissionStrategy,\n SchedulerGraphSnapshot\n} from \"../../project-definition/project-definition.ts\";\nimport { snapshotClosedPolicyRecord } from \"../../data-boundary/closed-values.ts\";\nimport { admissionSelectionPolicyFor } from \"../task-scheduler/custom-admission-policy.ts\";\nimport type { PreparedAdmissionStrategy } from \"./prepared-admission-strategy.ts\";\n\n/** Builds the exact Run-local Scheduler handoff and optional terminal participant for custom strategy. */\nexport async function prepareCustomAdmissionStrategy(\n policy: Extract<AdmissionPolicy, { readonly kind: \"custom\" }>,\n graph: SchedulerGraphSnapshot\n): Promise<PreparedAdmissionStrategy> {\n const strategy = policy.strategy;\n if (strategy.kind === \"simple\") {\n return preparedCustomAdmissionStrategy({ decide: strategy.decide });\n }\n const prepared = await prepareCustomStrategy(strategy.prepare, Object.freeze({ graph }));\n return preparedCustomAdmissionStrategy(prepared);\n}\n\nasync function prepareCustomStrategy(\n prepare: (\n this: void,\n context: CustomAdmissionPreparationContext\n ) => PreparedCustomAdmissionStrategy | Promise<PreparedCustomAdmissionStrategy>,\n context: CustomAdmissionPreparationContext\n): Promise<PreparedCustomAdmissionStrategy> {\n let prepared: unknown;\n try {\n prepared = await prepare(context);\n } catch {\n throw new AdmissionStrategyPreparationFailure();\n }\n const record = snapshotClosedPolicyRecord(prepared, {\n optional: [\"terminalEffect\"],\n required: [\"decide\"]\n });\n if (record === undefined || !isPreparedCustomDecision(record.decide)) {\n throw new AdmissionStrategyPreparationFailure();\n }\n if (record.terminalEffect !== undefined && !isPreparedCustomCompletion(record.terminalEffect)) {\n throw new AdmissionStrategyPreparationFailure();\n }\n return Object.freeze({\n decide: record.decide,\n ...(record.terminalEffect === undefined ? {} : { terminalEffect: record.terminalEffect })\n });\n}\n\nfunction isPreparedCustomDecision(\n value: unknown\n): value is PreparedCustomAdmissionStrategy[\"decide\"] {\n return typeof value === \"function\";\n}\n\nfunction isPreparedCustomCompletion(\n value: unknown\n): value is NonNullable<PreparedCustomAdmissionStrategy[\"terminalEffect\"]> {\n return typeof value === \"function\";\n}\n\nfunction preparedCustomAdmissionStrategy(\n strategy: Pick<PreparedCustomAdmissionStrategy, \"decide\" | \"terminalEffect\">\n): PreparedAdmissionStrategy {\n const completion =\n strategy.terminalEffect === undefined\n ? Object.freeze({ kind: \"none\" as const })\n : Object.freeze({\n kind: \"terminal-effect\" as const,\n terminalEffect: strategy.terminalEffect\n });\n return Object.freeze({\n admissionPolicy: admissionSelectionPolicyFor(strategy.decide),\n completion,\n requiresTerminalMeasurement: completion.kind === \"terminal-effect\"\n });\n}\n\n/** Raised only when public prepared custom strategy setup cannot form its exact Run-local closure. */\nexport class AdmissionStrategyPreparationFailure extends Error {}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prepared-admission-strategy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-admission-strategy.mjs","sourceRoot":"","sources":["../../../../src/project-run/admission-strategy-provider/prepared-admission-strategy.ts"],"names":[],"mappings":"","sourcesContent":["import type { SchedulerMeasurementContext } from \"../../project-definition/project-definition.ts\";\nimport type { AdmissionSelectionPolicy } from \"../task-scheduler/admission-selection-policy.ts\";\n\nexport interface InternalAdmissionStrategyCompleteContext {\n readonly terminalMeasurement: SchedulerMeasurementContext;\n}\n\nexport type PreparedAdmissionStrategyCompletion =\n | Readonly<{ readonly kind: \"none\" }>\n | Readonly<{\n readonly kind: \"internal\";\n readonly complete: (context: InternalAdmissionStrategyCompleteContext) => Promise<void>;\n }>\n | Readonly<{\n readonly kind: \"terminal-effect\";\n readonly terminalEffect: (context: SchedulerMeasurementContext) => void | Promise<void>;\n }>;\n\n/** The invocation-scoped handoff from an admission provider to Scheduler and terminal delivery. */\nexport interface PreparedAdmissionStrategy {\n /** The complete frozen policy handoff consumed by resolved Check execution and Scheduler. */\n readonly admissionPolicy: AdmissionSelectionPolicy;\n /** Closed provider demand merged with output and policy measurement requirements by invocation. */\n readonly requiresTerminalMeasurement: boolean;\n /** Completion owner: no public lifecycle, contained private lifecycle, or public output participant. */\n readonly completion: PreparedAdmissionStrategyCompletion;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { staticAdmissionSelectionPolicy } from "../task-scheduler/admission-selection-policy.mjs";
2
+ import { prepareCustomAdmissionStrategy } from "./custom-strategy-preparation.mjs";
3
+ /** Resolves the closed Product policy union to one invocation-scoped prepared strategy. */
4
+ export function createAdmissionStrategyProvider(input) {
5
+ return Object.freeze({
6
+ prepare: async () => {
7
+ switch (input.admissionPolicy.kind) {
8
+ case "static":
9
+ return staticPreparedStrategy();
10
+ case "custom":
11
+ return prepareCustomAdmissionStrategy(input.admissionPolicy, input.graph);
12
+ }
13
+ }
14
+ });
15
+ }
16
+ function staticPreparedStrategy() {
17
+ return Object.freeze({
18
+ admissionPolicy: staticAdmissionSelectionPolicy,
19
+ completion: Object.freeze({ kind: "none" }),
20
+ requiresTerminalMeasurement: false
21
+ });
22
+ }
23
+ //# sourceMappingURL=provider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../../../src/project-run/admission-strategy-provider/provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAiBlF,2FAA2F;AAC3F,MAAM,UAAU,+BAA+B,CAC7C,KAAqC;IAErC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,QAAQ,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;gBACnC,KAAK,QAAQ;oBACX,OAAO,sBAAsB,EAAE,CAAC;gBAClC,KAAK,QAAQ;oBACX,OAAO,8BAA8B,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,8BAA8B;QAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC;QACpD,2BAA2B,EAAE,KAAK;KACnC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type {\n AdmissionPolicy,\n SchedulerGraphSnapshot\n} from \"../../project-definition/project-definition.ts\";\nimport { staticAdmissionSelectionPolicy } from \"../task-scheduler/admission-selection-policy.ts\";\nimport { prepareCustomAdmissionStrategy } from \"./custom-strategy-preparation.ts\";\nimport type { PreparedAdmissionStrategy } from \"./prepared-admission-strategy.ts\";\n\nexport interface PrivateAdmissionStrategyProvider {\n prepare: () => Promise<PreparedAdmissionStrategy>;\n}\n\n/** Product-private test seam; package `run` never accepts a provider factory. */\nexport type AdmissionStrategyProviderFactory = (\n input: AdmissionStrategyProviderInput\n) => PrivateAdmissionStrategyProvider;\n\nexport interface AdmissionStrategyProviderInput {\n readonly admissionPolicy: AdmissionPolicy;\n readonly graph: SchedulerGraphSnapshot;\n}\n\n/** Resolves the closed Product policy union to one invocation-scoped prepared strategy. */\nexport function createAdmissionStrategyProvider(\n input: AdmissionStrategyProviderInput\n): PrivateAdmissionStrategyProvider {\n return Object.freeze({\n prepare: async () => {\n switch (input.admissionPolicy.kind) {\n case \"static\":\n return staticPreparedStrategy();\n case \"custom\":\n return prepareCustomAdmissionStrategy(input.admissionPolicy, input.graph);\n }\n }\n });\n}\n\nfunction staticPreparedStrategy(): PreparedAdmissionStrategy {\n return Object.freeze({\n admissionPolicy: staticAdmissionSelectionPolicy,\n completion: Object.freeze({ kind: \"none\" as const }),\n requiresTerminalMeasurement: false\n });\n}\n"]}
@@ -1,66 +1,51 @@
1
- /** Validates that aggregation selects only normalized executable Check IDs. */
2
- export function validateCheckAggregationSelection(aggregation, checkIds) {
3
- if (aggregation === undefined)
4
- return Object.freeze({ ok: true, value: undefined });
5
- if (aggregation.checks === "all")
6
- return Object.freeze({ ok: true, value: aggregation });
7
- const knownCheckIds = new Set(checkIds);
8
- const selectedCheckIds = new Set();
9
- for (const checkId of aggregation.checks) {
10
- if (!knownCheckIds.has(checkId) || selectedCheckIds.has(checkId)) {
11
- return invalidControls("controls.checkAggregation.checks");
12
- }
13
- selectedCheckIds.add(checkId);
1
+ /** Identifies a callback failure so the invocation boundary can close outputs before rethrowing it. */
2
+ export class CheckAggregationFailure extends Error {
3
+ originalError;
4
+ constructor(originalError) {
5
+ super("Check aggregation failed", { cause: originalError });
6
+ this.originalError = originalError;
14
7
  }
15
- return Object.freeze({ ok: true, value: aggregation });
16
8
  }
17
- /** Derives one explicit consumer-selected aggregate from settled Check statuses only. */
18
- export function aggregateCheckOutcomes(snapshot, aggregation) {
19
- const statuses = selectedChecks(snapshot, aggregation.checks).map((check) => aggregateStatus(check, aggregation));
20
- if (statuses.includes("unavailable"))
21
- return "unavailable";
22
- return aggregateSelectedStatuses(statuses.filter((status) => status !== null && status !== "unavailable"), aggregation);
9
+ /** Builds the canonical ordered, read-only effective Check list and derives its invocation aggregate. */
10
+ export function aggregateEffectiveChecks(snapshot, effectiveCheckIds, aggregation) {
11
+ const checks = effectiveChecks(snapshot, effectiveCheckIds);
12
+ return aggregation === undefined
13
+ ? strictAggregate(checks)
14
+ : invokeAggregation(aggregation, checks);
23
15
  }
24
- function selectedChecks(snapshot, selection) {
25
- if (selection === "all")
26
- return snapshot.checks;
27
- return selection.map((checkId) => {
28
- const check = snapshot.checks.find((candidate) => candidate.checkId === checkId);
29
- if (check === undefined)
30
- throw new TypeError("Aggregation selection was not validated");
31
- return check;
32
- });
16
+ function effectiveChecks(snapshot, effectiveCheckIds) {
17
+ const effectiveCheckIdSet = new Set(effectiveCheckIds);
18
+ return Object.freeze(snapshot.checks.filter((check) => effectiveCheckIdSet.has(check.checkId)));
33
19
  }
34
- function aggregateStatus(check, aggregation) {
35
- switch (check.outcome.status) {
36
- case "passed":
37
- case "failed":
38
- return check.outcome.status;
39
- case "unavailable": {
40
- if (aggregation.unavailable === "propagate")
41
- return "unavailable";
42
- return aggregation.unavailable === "fail" ? "failed" : null;
43
- }
44
- case "not-applicable": {
45
- if (aggregation.notApplicable === "pass")
46
- return "passed";
47
- return aggregation.notApplicable === "fail" ? "failed" : null;
48
- }
20
+ function strictAggregate(checks) {
21
+ return checks.length > 0 && checks.every((check) => check.outcome.status === "passed")
22
+ ? "passed"
23
+ : "failed";
24
+ }
25
+ function invokeAggregation(aggregation, checks) {
26
+ let aggregate;
27
+ try {
28
+ aggregate = aggregation(checks);
29
+ }
30
+ catch (error) {
31
+ throw new CheckAggregationFailure(errorFromThrownValue(error));
49
32
  }
33
+ if (isCheckAggregate(aggregate))
34
+ return aggregate;
35
+ discardPromiseRejection(aggregate);
36
+ throw new CheckAggregationFailure(new TypeError("Check aggregation must synchronously return a CheckAggregate"));
37
+ }
38
+ function isCheckAggregate(value) {
39
+ return (value === "passed" ||
40
+ value === "failed" ||
41
+ value === "not-applicable" ||
42
+ value === "unavailable");
50
43
  }
51
- function aggregateSelectedStatuses(statuses, aggregation) {
52
- if (statuses.length === 0)
53
- return aggregation.empty;
54
- if (aggregation.mode === "all")
55
- return statuses.includes("failed") ? "failed" : "passed";
56
- return statuses.includes("passed") ? "passed" : "failed";
44
+ function discardPromiseRejection(value) {
45
+ if (value instanceof Promise)
46
+ void value.catch(() => undefined);
57
47
  }
58
- function invalidControls(path) {
59
- const error = Object.freeze({
60
- kind: "invalid-run-controls",
61
- path,
62
- reason: "invalid-value"
63
- });
64
- return Object.freeze({ ok: false, error });
48
+ function errorFromThrownValue(value) {
49
+ return value instanceof Error ? value : new Error("Check aggregation threw a non-Error value");
65
50
  }
66
51
  //# sourceMappingURL=aggregation.mjs.map