@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
@@ -0,0 +1,110 @@
1
+ import { AdmissionPolicyFault } from "./scheduler-admission-decision.mjs";
2
+ import { capacityFor } from "./scheduler-decision-inspection.mjs";
3
+ import { admissionStateForCore } from "./admission-core/core.mjs";
4
+ /** Adapts the public, trusted callback to the Scheduler's private pure policy seam. */
5
+ export function admissionSelectionPolicyFor(decide) {
6
+ return Object.freeze({
7
+ requiresMeasurement: true,
8
+ decide: (input) => invokeCustomPolicy(decide, input)
9
+ });
10
+ }
11
+ function invokeCustomPolicy(decide, input) {
12
+ let proposal;
13
+ try {
14
+ proposal = decide(admissionPolicyContext(input));
15
+ }
16
+ catch {
17
+ throw new AdmissionPolicyFault("callback-threw");
18
+ }
19
+ if (isThenable(proposal))
20
+ throw new AdmissionPolicyFault("thenable-proposal");
21
+ return validateProposal(proposal);
22
+ }
23
+ function admissionPolicyContext(input) {
24
+ if (input.measurement === undefined)
25
+ throw new Error("custom admission policy requires measurement");
26
+ return deepFreeze({
27
+ activeScopeIds: [...input.inspection.activeScopeIds],
28
+ admissionState: admissionStateForCore(input.admissionCore),
29
+ candidates: input.candidates.map((candidate) => ({
30
+ canAdmit: candidate.canAdmit,
31
+ taskId: candidate.task.id
32
+ })),
33
+ capacity: capacityFor(input.inspection),
34
+ measurement: input.measurement,
35
+ graph: input.graphSnapshot,
36
+ runningTaskIds: [...input.inspection.runningTaskIds],
37
+ runtime: {
38
+ abortRequested: input.inspection.isAbortRequested,
39
+ cancelled: input.inspection.isCancelled
40
+ },
41
+ settledTaskIds: input.inspection.settledTasks.map((task) => task.taskId)
42
+ });
43
+ }
44
+ function validateProposal(value) {
45
+ if (!isPlainRecord(value))
46
+ throw new AdmissionPolicyFault("malformed-proposal");
47
+ try {
48
+ return parseProposalRecord(value);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof AdmissionPolicyFault)
52
+ throw error;
53
+ throw new AdmissionPolicyFault("malformed-proposal");
54
+ }
55
+ }
56
+ function parseProposalRecord(value) {
57
+ switch (value.kind) {
58
+ case "select":
59
+ return parseSelectProposal(value);
60
+ case "wait":
61
+ return parseWaitProposal(value);
62
+ }
63
+ throw new AdmissionPolicyFault("malformed-proposal");
64
+ }
65
+ function parseSelectProposal(value) {
66
+ const keys = Reflect.ownKeys(value);
67
+ if (keys.length !== 2 ||
68
+ !keys.includes("kind") ||
69
+ !keys.includes("taskId") ||
70
+ typeof value.taskId !== "string") {
71
+ throw new AdmissionPolicyFault("malformed-proposal");
72
+ }
73
+ return Object.freeze({ kind: "select", taskId: value.taskId });
74
+ }
75
+ function parseWaitProposal(value) {
76
+ const keys = Reflect.ownKeys(value);
77
+ if (keys.length !== 1 || keys[0] !== "kind") {
78
+ throw new AdmissionPolicyFault("malformed-proposal");
79
+ }
80
+ return Object.freeze({ kind: "wait" });
81
+ }
82
+ function isPlainRecord(value) {
83
+ if (value === null || typeof value !== "object" || Array.isArray(value))
84
+ return false;
85
+ try {
86
+ const prototype = Reflect.getPrototypeOf(value);
87
+ return prototype === Object.prototype || prototype === null;
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ function isThenable(value) {
94
+ if (value === null || (typeof value !== "object" && typeof value !== "function"))
95
+ return false;
96
+ try {
97
+ return typeof Reflect.get(value, "then") === "function";
98
+ }
99
+ catch {
100
+ return true;
101
+ }
102
+ }
103
+ function deepFreeze(value) {
104
+ if (value === null || typeof value !== "object" || Object.isFrozen(value))
105
+ return value;
106
+ for (const item of Object.values(value))
107
+ deepFreeze(item);
108
+ return Object.freeze(value);
109
+ }
110
+ //# sourceMappingURL=custom-admission-policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-admission-policy.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/custom-admission-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AdmissionPolicyContext,\n AdmissionProposal\n} from \"../../project-definition/project-definition.ts\";\nimport type {\n AdmissionPolicyInput,\n AdmissionSelectionPolicy\n} from \"./admission-selection-policy.ts\";\nimport {\n AdmissionPolicyFault,\n type AdmissionPolicyFaultCategory\n} from \"./scheduler-admission-decision.ts\";\nimport { capacityFor } from \"./scheduler-decision-inspection.ts\";\nimport { admissionStateForCore } from \"./admission-core/core.ts\";\n\n/** Adapts the public, trusted callback to the Scheduler's private pure policy seam. */\nexport function admissionSelectionPolicyFor(\n decide: (this: void, context: AdmissionPolicyContext) => AdmissionProposal\n): AdmissionSelectionPolicy {\n return Object.freeze({\n requiresMeasurement: true,\n decide: (input: AdmissionPolicyInput) => invokeCustomPolicy(decide, input)\n });\n}\n\nfunction invokeCustomPolicy(\n decide: (this: void, context: AdmissionPolicyContext) => AdmissionProposal,\n input: AdmissionPolicyInput\n): AdmissionProposal {\n let proposal: unknown;\n try {\n proposal = decide(admissionPolicyContext(input));\n } catch {\n throw new AdmissionPolicyFault(\"callback-threw\");\n }\n if (isThenable(proposal)) throw new AdmissionPolicyFault(\"thenable-proposal\");\n return validateProposal(proposal);\n}\n\nfunction admissionPolicyContext(input: AdmissionPolicyInput): AdmissionPolicyContext {\n if (input.measurement === undefined)\n throw new Error(\"custom admission policy requires measurement\");\n return deepFreeze({\n activeScopeIds: [...input.inspection.activeScopeIds],\n admissionState: admissionStateForCore(input.admissionCore),\n candidates: input.candidates.map((candidate) => ({\n canAdmit: candidate.canAdmit,\n taskId: candidate.task.id\n })),\n capacity: capacityFor(input.inspection),\n measurement: input.measurement,\n graph: input.graphSnapshot,\n runningTaskIds: [...input.inspection.runningTaskIds],\n runtime: {\n abortRequested: input.inspection.isAbortRequested,\n cancelled: input.inspection.isCancelled\n },\n settledTaskIds: input.inspection.settledTasks.map((task) => task.taskId)\n });\n}\n\nfunction validateProposal(value: unknown): AdmissionProposal {\n if (!isPlainRecord(value)) throw new AdmissionPolicyFault(\"malformed-proposal\");\n try {\n return parseProposalRecord(value);\n } catch (error) {\n if (error instanceof AdmissionPolicyFault) throw error;\n throw new AdmissionPolicyFault(\"malformed-proposal\");\n }\n}\n\nfunction parseProposalRecord(value: Record<string, unknown>): AdmissionProposal {\n switch (value.kind) {\n case \"select\":\n return parseSelectProposal(value);\n case \"wait\":\n return parseWaitProposal(value);\n }\n throw new AdmissionPolicyFault(\"malformed-proposal\");\n}\n\nfunction parseSelectProposal(value: Record<string, unknown>): AdmissionProposal {\n const keys = Reflect.ownKeys(value);\n if (\n keys.length !== 2 ||\n !keys.includes(\"kind\") ||\n !keys.includes(\"taskId\") ||\n typeof value.taskId !== \"string\"\n ) {\n throw new AdmissionPolicyFault(\"malformed-proposal\");\n }\n return Object.freeze({ kind: \"select\", taskId: value.taskId });\n}\n\nfunction parseWaitProposal(value: Record<string, unknown>): AdmissionProposal {\n const keys = Reflect.ownKeys(value);\n if (keys.length !== 1 || keys[0] !== \"kind\") {\n throw new AdmissionPolicyFault(\"malformed-proposal\");\n }\n return Object.freeze({ kind: \"wait\" });\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n try {\n const prototype = Reflect.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n } catch {\n return false;\n }\n}\n\nfunction isThenable(value: unknown): boolean {\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) return false;\n try {\n return typeof Reflect.get(value, \"then\") === \"function\";\n } catch {\n return true;\n }\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n for (const item of Object.values(value)) deepFreeze(item);\n return Object.freeze(value);\n}\n\nexport type { AdmissionPolicyFaultCategory };\n"]}
@@ -1,4 +1,10 @@
1
+ import { staticAdmissionSelectionPolicy } from "./admission-selection-policy.mjs";
2
+ import { compilePreparedAdmissionGraph, createAdmissionCoreFromSchedulerSnapshot, createInitialAdmissionCoreState } from "./admission-core/core.mjs";
1
3
  export function createSchedulerState(graph, options) {
4
+ const admissionPolicy = options.admissionPolicy ?? staticAdmissionSelectionPolicy;
5
+ if (!Object.isFrozen(admissionPolicy) || typeof admissionPolicy.decide !== "function") {
6
+ throw new TypeError("task engine admission policy must be a frozen policy value");
7
+ }
2
8
  const scopesById = new Map();
3
9
  for (const scope of graph.scopes) {
4
10
  scopesById.set(scope.id, {
@@ -7,10 +13,16 @@ export function createSchedulerState(graph, options) {
7
13
  isActive: false
8
14
  });
9
15
  }
10
- return {
16
+ const compiledAdmissionGraph = compilePreparedAdmissionGraph(graph, options.maxParallel);
17
+ const state = {
18
+ admissionCore: createInitialAdmissionCoreState(compiledAdmissionGraph),
19
+ admissionPolicy,
11
20
  diagnosticLogger: options.diagnosticLogger,
12
21
  graph,
22
+ isPrerequisiteSatisfied: options.isPrerequisiteSatisfied,
13
23
  maxParallel: options.maxParallel,
24
+ onTaskBlocked: options.onTaskBlocked,
25
+ onAdmissionCoreEffect: options.onAdmissionCoreEffect,
14
26
  signal: options.signal,
15
27
  execute: options.execute,
16
28
  pending: [...graph.tasks],
@@ -18,9 +30,28 @@ export function createSchedulerState(graph, options) {
18
30
  runningMutexes: new Set(),
19
31
  settlementsByTaskId: new Map(),
20
32
  scopesById,
21
- reservationTaskId: undefined,
22
- isCancelled: false
33
+ isCancelled: false,
34
+ admissionPolicyFault: undefined
23
35
  };
36
+ recordPreAdmissionTaskResults(state, options.preAdmissionTaskResults ?? []);
37
+ state.admissionCore = createAdmissionCoreFromSchedulerSnapshot(compiledAdmissionGraph, snapshotSchedulerState(state));
38
+ return state;
39
+ }
40
+ function recordPreAdmissionTaskResults(state, preAdmissionTaskResults) {
41
+ for (const result of preAdmissionTaskResults) {
42
+ const pendingIndex = state.pending.findIndex((task) => task.id === result.taskId);
43
+ if (pendingIndex < 0) {
44
+ throw new TypeError(`pre-admission task result references unknown or duplicate task ${result.taskId}`);
45
+ }
46
+ const [task] = state.pending.splice(pendingIndex, 1);
47
+ if (task === undefined) {
48
+ throw new Error(`pre-admission task ${result.taskId} disappeared before settlement`);
49
+ }
50
+ const settlement = state.isPrerequisiteSatisfied?.(result.value) === false
51
+ ? { kind: "prerequisite-unsatisfied", value: result.value }
52
+ : { kind: "completed", value: result.value };
53
+ recordSettlement(state, task, Object.freeze(settlement));
54
+ }
24
55
  }
25
56
  /** Projects mutable execution state into the pure scheduler-decision input. */
26
57
  export function snapshotSchedulerState(state) {
@@ -33,7 +64,6 @@ export function snapshotSchedulerState(state) {
33
64
  isCancelled: state.isCancelled,
34
65
  maxParallel: state.maxParallel,
35
66
  pendingTaskIds: Object.freeze(state.pending.map((task) => task.id)),
36
- reservationTaskId: state.reservationTaskId,
37
67
  runningMutexes: Object.freeze([...state.runningMutexes]),
38
68
  runningTaskIds: Object.freeze([...state.runningById.keys()]),
39
69
  settledTasks: Object.freeze([...state.settlementsByTaskId].map(([taskId, settlement]) => Object.freeze({ kind: settlement.kind, taskId })))
@@ -44,7 +74,6 @@ export function scopeForTask(task, state) {
44
74
  }
45
75
  export function cancelPendingTasks(state) {
46
76
  state.isCancelled = true;
47
- state.reservationTaskId = undefined;
48
77
  while (state.pending.length > 0) {
49
78
  const task = state.pending.shift();
50
79
  if (task === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"execution-state.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/execution-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PlannedTask, PlannedTaskGraph, PlannedTaskScope, TaskGraph } from \"./graph.ts\";\nimport type { DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\nimport type { SchedulerSnapshot } from \"./scheduler-decision.ts\";\n\nexport type TaskSettlement<TResult> = Readonly<\n | { readonly kind: \"completed\"; readonly value: TResult }\n | { readonly kind: \"failed\"; readonly error: unknown }\n | { readonly kind: \"blocked\"; readonly dependencyIds: readonly string[] }\n | { readonly kind: \"cancelled-before-start\" }\n>;\n\nexport interface SettledTask<TResult> {\n readonly task: PlannedTask;\n readonly settlement: TaskSettlement<TResult>;\n}\n\nexport interface TaskExecutionContext {\n readonly signal: AbortSignal | undefined;\n}\n\nexport interface TaskGraphRun<TResult> {\n readonly cancelled: boolean;\n /** One entry per static graph Task, in static graph order. */\n readonly settlements: readonly SettledTask<TResult>[];\n}\n\nexport interface RunTaskGraphOptions<TResult> {\n readonly diagnosticLogger?: DiagnosticLogger;\n readonly graph: TaskGraph;\n readonly maxParallel: number;\n readonly signal?: AbortSignal;\n readonly execute: (\n task: PlannedTask,\n context: TaskExecutionContext\n ) => TResult | Promise<TResult>;\n}\n\nexport type RunningTaskCompletion<TResult> = Readonly<{\n readonly taskId: string;\n readonly settlement: TaskSettlement<TResult>;\n}>;\n\nexport interface RunningTask<TResult> {\n readonly task: PlannedTask;\n readonly completion: Promise<RunningTaskCompletion<TResult>>;\n}\n\nexport interface RuntimeScope {\n readonly scope: PlannedTaskScope;\n readonly activationTaskIds: ReadonlySet<string>;\n isActive: boolean;\n}\n\nexport interface SchedulerState<TResult> {\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly graph: PlannedTaskGraph;\n readonly maxParallel: number;\n readonly signal: AbortSignal | undefined;\n readonly execute: RunTaskGraphOptions<TResult>[\"execute\"];\n readonly pending: PlannedTask[];\n readonly runningById: Map<string, RunningTask<TResult>>;\n readonly runningMutexes: Set<string>;\n readonly settlementsByTaskId: Map<string, TaskSettlement<TResult>>;\n readonly scopesById: ReadonlyMap<string, RuntimeScope>;\n reservationTaskId: string | undefined;\n isCancelled: boolean;\n}\n\nexport function createSchedulerState<TResult>(\n graph: PlannedTaskGraph,\n options: RunTaskGraphOptions<TResult>\n): SchedulerState<TResult> {\n const scopesById = new Map<string, RuntimeScope>();\n for (const scope of graph.scopes) {\n scopesById.set(scope.id, {\n scope,\n activationTaskIds: new Set(scope.activationTaskIds),\n isActive: false\n });\n }\n return {\n diagnosticLogger: options.diagnosticLogger,\n graph,\n maxParallel: options.maxParallel,\n signal: options.signal,\n execute: options.execute,\n pending: [...graph.tasks],\n runningById: new Map(),\n runningMutexes: new Set(),\n settlementsByTaskId: new Map(),\n scopesById,\n reservationTaskId: undefined,\n isCancelled: false\n };\n}\n\n/** Projects mutable execution state into the pure scheduler-decision input. */\nexport function snapshotSchedulerState<TResult>(state: SchedulerState<TResult>): SchedulerSnapshot {\n return Object.freeze({\n activeScopeIds: Object.freeze(\n [...state.scopesById.values()]\n .filter((scope) => scope.isActive)\n .map((scope) => scope.scope.id)\n ),\n graph: state.graph,\n isAbortRequested: state.signal?.aborted === true,\n isCancelled: state.isCancelled,\n maxParallel: state.maxParallel,\n pendingTaskIds: Object.freeze(state.pending.map((task) => task.id)),\n reservationTaskId: state.reservationTaskId,\n runningMutexes: Object.freeze([...state.runningMutexes]),\n runningTaskIds: Object.freeze([...state.runningById.keys()]),\n settledTasks: Object.freeze(\n [...state.settlementsByTaskId].map(([taskId, settlement]) =>\n Object.freeze({ kind: settlement.kind, taskId })\n )\n )\n });\n}\n\nexport function scopeForTask<TResult>(\n task: PlannedTask,\n state: SchedulerState<TResult>\n): RuntimeScope | undefined {\n return task.scopeId === undefined ? undefined : state.scopesById.get(task.scopeId);\n}\n\nexport function cancelPendingTasks<TResult>(state: SchedulerState<TResult>): void {\n state.isCancelled = true;\n state.reservationTaskId = undefined;\n while (state.pending.length > 0) {\n const task = state.pending.shift();\n if (task === undefined) {\n throw new Error(\"task graph pending queue changed unexpectedly\");\n }\n recordSettlement(state, task, Object.freeze({ kind: \"cancelled-before-start\" }));\n }\n}\n\nexport function recordSettlement<TResult>(\n state: SchedulerState<TResult>,\n task: PlannedTask,\n settlement: TaskSettlement<TResult>\n): void {\n if (state.settlementsByTaskId.has(task.id)) {\n throw new Error(`task ${task.id} settled more than once`);\n }\n state.settlementsByTaskId.set(task.id, settlement);\n const scope = scopeForTask(task, state);\n if (scope?.scope.terminalTaskId === task.id) {\n scope.isActive = false;\n }\n}\n"]}
1
+ {"version":3,"file":"execution-state.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/execution-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n SchedulerMeasurementContext,\n SchedulerTerminalEffect\n} from \"../../project-definition/project-definition.ts\";\nimport type { PlannedTask, PlannedTaskGraph, PlannedTaskScope, TaskGraph } from \"./graph.ts\";\nimport {\n staticAdmissionSelectionPolicy,\n type AdmissionSelectionPolicy\n} from \"./admission-selection-policy.ts\";\nimport type { DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\nimport type { SchedulerSnapshot } from \"./scheduler-decision.ts\";\nimport type { AdmissionPolicyFaultCategory } from \"./scheduler-admission-decision.ts\";\nimport type { SchedulerPerformanceDiagnosticsInput } from \"./measurement/diagnostics.ts\";\nimport {\n compilePreparedAdmissionGraph,\n createAdmissionCoreFromSchedulerSnapshot,\n createInitialAdmissionCoreState,\n type AdmissionCoreEffect,\n type AdmissionCoreState\n} from \"./admission-core/core.ts\";\n\nexport type TaskSettlement<TResult> = Readonly<\n | { readonly kind: \"completed\"; readonly value: TResult }\n | { readonly kind: \"prerequisite-unsatisfied\"; readonly value: TResult }\n | { readonly kind: \"failed\"; readonly error: unknown }\n | { readonly kind: \"blocked\"; readonly dependencyIds: readonly string[] }\n | { readonly kind: \"cancelled-before-start\" }\n>;\n\nexport interface SettledTask<TResult> {\n readonly task: PlannedTask;\n readonly settlement: TaskSettlement<TResult>;\n}\n\nexport interface TaskExecutionContext {\n readonly signal: AbortSignal | undefined;\n}\n\nexport interface PreAdmissionTaskResult<TResult> {\n readonly taskId: string;\n readonly value: TResult;\n}\n\n/** Product-private effect hook used to prove that the real shell replays the shared core. */\nexport interface SchedulerAdmissionCoreEffect {\n readonly effect: AdmissionCoreEffect;\n readonly state: AdmissionCoreState;\n}\n\nexport interface TaskGraphRun<TResult> {\n readonly admissionPolicyFault: AdmissionPolicyFaultCategory | undefined;\n readonly cancelled: boolean;\n /** One entry per static graph Task, in static graph order. */\n readonly settlements: readonly SettledTask<TResult>[];\n /** Product-private terminal facts retained after terminal Hooks have been drained. */\n readonly terminalMeasurement?: SchedulerMeasurementContext;\n}\n\nexport interface RunTaskGraphOptions<TResult> {\n /** Product-private policy handoff; package consumers cannot author this through the public API. */\n readonly admissionPolicy?: AdmissionSelectionPolicy;\n readonly diagnosticLogger?: DiagnosticLogger;\n /** Explicit enabled-only handoff; no Scheduler behavior is inferred from a logger shape. */\n readonly performanceDiagnostics?: SchedulerPerformanceDiagnosticsInput;\n /** Runtime-only terminal consumers; their context is formed after Scheduler drain. */\n readonly terminalEffects?: readonly SchedulerTerminalEffect[];\n readonly onTerminalEffectFailure?: () => void;\n readonly onTerminalEffectsSettled?: () => void;\n /** Product-private test observer; no package consumer can supply this through `run`. */\n readonly onAdmissionCoreEffect?: (effect: SchedulerAdmissionCoreEffect) => void;\n readonly graph: TaskGraph;\n /** Product-private Task results formed without Scheduler admission in the current Run. */\n readonly preAdmissionTaskResults?: readonly PreAdmissionTaskResult<TResult>[];\n readonly maxParallel: number;\n readonly signal?: AbortSignal;\n readonly execute: (\n task: PlannedTask,\n context: TaskExecutionContext\n ) => TResult | Promise<TResult>;\n /** Maps a completed Task's opaque product value to prerequisite satisfaction. */\n readonly isPrerequisiteSatisfied?: (value: TResult) => boolean;\n /** Lets a product close a blocked Task before any terminal observer can be admitted. */\n readonly onTaskBlocked?: (task: PlannedTask, dependencyIds: readonly string[]) => void;\n}\n\nexport type RunningTaskCompletion<TResult> = Readonly<{\n readonly taskId: string;\n readonly settlement: TaskSettlement<TResult>;\n}>;\n\nexport interface RunningTask<TResult> {\n readonly task: PlannedTask;\n readonly completion: Promise<RunningTaskCompletion<TResult>>;\n}\n\nexport interface RuntimeScope {\n readonly scope: PlannedTaskScope;\n readonly activationTaskIds: ReadonlySet<string>;\n isActive: boolean;\n}\n\nexport interface SchedulerState<TResult> {\n /** The shared immutable legality/transition state; Task and Promise ownership remains below. */\n admissionCore: AdmissionCoreState;\n readonly admissionPolicy: AdmissionSelectionPolicy;\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly graph: PlannedTaskGraph;\n readonly isPrerequisiteSatisfied: RunTaskGraphOptions<TResult>[\"isPrerequisiteSatisfied\"];\n readonly maxParallel: number;\n readonly signal: AbortSignal | undefined;\n readonly execute: RunTaskGraphOptions<TResult>[\"execute\"];\n readonly onTaskBlocked: RunTaskGraphOptions<TResult>[\"onTaskBlocked\"];\n readonly onAdmissionCoreEffect: RunTaskGraphOptions<TResult>[\"onAdmissionCoreEffect\"];\n readonly pending: PlannedTask[];\n readonly runningById: Map<string, RunningTask<TResult>>;\n readonly runningMutexes: Set<string>;\n readonly settlementsByTaskId: Map<string, TaskSettlement<TResult>>;\n readonly scopesById: ReadonlyMap<string, RuntimeScope>;\n isCancelled: boolean;\n admissionPolicyFault: AdmissionPolicyFaultCategory | undefined;\n}\n\nexport function createSchedulerState<TResult>(\n graph: PlannedTaskGraph,\n options: RunTaskGraphOptions<TResult>\n): SchedulerState<TResult> {\n const admissionPolicy = options.admissionPolicy ?? staticAdmissionSelectionPolicy;\n if (!Object.isFrozen(admissionPolicy) || typeof admissionPolicy.decide !== \"function\") {\n throw new TypeError(\"task engine admission policy must be a frozen policy value\");\n }\n const scopesById = new Map<string, RuntimeScope>();\n for (const scope of graph.scopes) {\n scopesById.set(scope.id, {\n scope,\n activationTaskIds: new Set(scope.activationTaskIds),\n isActive: false\n });\n }\n const compiledAdmissionGraph = compilePreparedAdmissionGraph(graph, options.maxParallel);\n const state: SchedulerState<TResult> = {\n admissionCore: createInitialAdmissionCoreState(compiledAdmissionGraph),\n admissionPolicy,\n diagnosticLogger: options.diagnosticLogger,\n graph,\n isPrerequisiteSatisfied: options.isPrerequisiteSatisfied,\n maxParallel: options.maxParallel,\n onTaskBlocked: options.onTaskBlocked,\n onAdmissionCoreEffect: options.onAdmissionCoreEffect,\n signal: options.signal,\n execute: options.execute,\n pending: [...graph.tasks],\n runningById: new Map(),\n runningMutexes: new Set(),\n settlementsByTaskId: new Map(),\n scopesById,\n isCancelled: false,\n admissionPolicyFault: undefined\n };\n recordPreAdmissionTaskResults(state, options.preAdmissionTaskResults ?? []);\n state.admissionCore = createAdmissionCoreFromSchedulerSnapshot(\n compiledAdmissionGraph,\n snapshotSchedulerState(state)\n );\n return state;\n}\n\nfunction recordPreAdmissionTaskResults<TResult>(\n state: SchedulerState<TResult>,\n preAdmissionTaskResults: readonly PreAdmissionTaskResult<TResult>[]\n): void {\n for (const result of preAdmissionTaskResults) {\n const pendingIndex = state.pending.findIndex((task) => task.id === result.taskId);\n if (pendingIndex < 0) {\n throw new TypeError(\n `pre-admission task result references unknown or duplicate task ${result.taskId}`\n );\n }\n const [task] = state.pending.splice(pendingIndex, 1);\n if (task === undefined) {\n throw new Error(`pre-admission task ${result.taskId} disappeared before settlement`);\n }\n const settlement: TaskSettlement<TResult> =\n state.isPrerequisiteSatisfied?.(result.value) === false\n ? { kind: \"prerequisite-unsatisfied\", value: result.value }\n : { kind: \"completed\", value: result.value };\n recordSettlement(state, task, Object.freeze(settlement));\n }\n}\n\n/** Projects mutable execution state into the pure scheduler-decision input. */\nexport function snapshotSchedulerState<TResult>(state: SchedulerState<TResult>): SchedulerSnapshot {\n return Object.freeze({\n activeScopeIds: Object.freeze(\n [...state.scopesById.values()]\n .filter((scope) => scope.isActive)\n .map((scope) => scope.scope.id)\n ),\n graph: state.graph,\n isAbortRequested: state.signal?.aborted === true,\n isCancelled: state.isCancelled,\n maxParallel: state.maxParallel,\n pendingTaskIds: Object.freeze(state.pending.map((task) => task.id)),\n runningMutexes: Object.freeze([...state.runningMutexes]),\n runningTaskIds: Object.freeze([...state.runningById.keys()]),\n settledTasks: Object.freeze(\n [...state.settlementsByTaskId].map(([taskId, settlement]) =>\n Object.freeze({ kind: settlement.kind, taskId })\n )\n )\n });\n}\n\nexport function scopeForTask<TResult>(\n task: PlannedTask,\n state: SchedulerState<TResult>\n): RuntimeScope | undefined {\n return task.scopeId === undefined ? undefined : state.scopesById.get(task.scopeId);\n}\n\nexport function cancelPendingTasks<TResult>(state: SchedulerState<TResult>): void {\n state.isCancelled = true;\n while (state.pending.length > 0) {\n const task = state.pending.shift();\n if (task === undefined) {\n throw new Error(\"task graph pending queue changed unexpectedly\");\n }\n recordSettlement(state, task, Object.freeze({ kind: \"cancelled-before-start\" }));\n }\n}\n\nexport function recordSettlement<TResult>(\n state: SchedulerState<TResult>,\n task: PlannedTask,\n settlement: TaskSettlement<TResult>\n): void {\n if (state.settlementsByTaskId.has(task.id)) {\n throw new Error(`task ${task.id} settled more than once`);\n }\n state.settlementsByTaskId.set(task.id, settlement);\n const scope = scopeForTask(task, state);\n if (scope?.scope.terminalTaskId === task.id) {\n scope.isActive = false;\n }\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { schedulerInspectionForCore } from "./admission-core/core.mjs";
2
+ import { decisionContext } from "./scheduler-decision-inspection.mjs";
3
+ import { freezeDecision } from "./scheduler-decision-model.mjs";
4
+ import { observeSchedulerDecision, performanceState } from "./scheduler-observation.mjs";
5
+ import { applyForcedBlockedSettlement } from "./scheduler-task-lifecycle.mjs";
6
+ /**
7
+ * Adapts only canonical forced blocked effects to the real Scheduler shell.
8
+ * Direct admission, running settlement, and cancellation remain in the root shell.
9
+ */
10
+ export function replayCoreForcedBlocks(state, effects, effectStates, diagnostics, trigger) {
11
+ if (effects.length !== effectStates.length) {
12
+ throw new Error("shared admission core effect replay has no matching immutable post-state");
13
+ }
14
+ for (const [index, effect] of effects.entries()) {
15
+ if (effect.kind !== "settled" || effect.settlementKind !== "blocked") {
16
+ throw new Error("shared admission core forced-block replay received a non-blocked effect");
17
+ }
18
+ const effectState = effectStates[index];
19
+ if (effectState === undefined) {
20
+ throw new Error("shared admission core forced block has no immutable post-state");
21
+ }
22
+ diagnostics?.beforePendingSettlement([effect.taskId]);
23
+ state.admissionCore = effectState;
24
+ applyForcedBlockedSettlement(state, effect.taskId, effect.dependencyIds ?? []);
25
+ diagnostics?.captureState(performanceState(state));
26
+ diagnostics?.recordEffect(Object.freeze({ kind: "settled", settlementKind: "blocked", taskId: effect.taskId }));
27
+ if (diagnostics !== undefined || state.diagnosticLogger !== undefined) {
28
+ const inspection = schedulerInspectionForCore(state.admissionCore);
29
+ observeSchedulerDecision(state, freezeDecision({
30
+ ...decisionContext(Object.freeze({
31
+ ...inspection,
32
+ isAbortRequested: state.signal?.aborted === true,
33
+ isCancelled: state.isCancelled
34
+ }), state.admissionCore.compiled.graph.schedulerGraphSnapshot),
35
+ dependencyIds: effect.dependencyIds ?? [],
36
+ kind: "settle-blocked",
37
+ taskId: effect.taskId,
38
+ trigger
39
+ }), diagnostics);
40
+ }
41
+ if (state.onAdmissionCoreEffect !== undefined) {
42
+ state.onAdmissionCoreEffect(Object.freeze({ effect, state: state.admissionCore }));
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=forced-block-effect-replay.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forced-block-effect-replay.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/forced-block-effect-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAG3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAA8B,EAC9B,OAAuC,EACvC,YAA2C,EAC3C,WAAwD,EACxD,OAAyB;IAEzB,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,WAAW,EAAE,uBAAuB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC;QAClC,4BAA4B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAC/E,WAAW,EAAE,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,WAAW,EAAE,YAAY,CACvB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CACrF,CAAC;QACF,IAAI,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACnE,wBAAwB,CACtB,KAAK,EACL,cAAc,CAAC;gBACb,GAAG,eAAe,CAChB,MAAM,CAAC,MAAM,CAAC;oBACZ,GAAG,UAAU;oBACb,gBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;oBAChD,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,EACF,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAC1D;gBACD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;gBACzC,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO;aACR,CAAC,EACF,WAAW,CACZ,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC9C,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import {\n schedulerInspectionForCore,\n type AdmissionCoreEffect,\n type AdmissionCoreState\n} from \"./admission-core/core.ts\";\nimport { decisionContext } from \"./scheduler-decision-inspection.ts\";\nimport { freezeDecision } from \"./scheduler-decision-model.ts\";\nimport type { SchedulerTrigger } from \"./scheduler-decision.ts\";\nimport type { SchedulerState } from \"./execution-state.ts\";\nimport { observeSchedulerDecision, performanceState } from \"./scheduler-observation.ts\";\nimport type { SchedulerPerformanceDiagnostics } from \"./measurement/diagnostics.ts\";\nimport { applyForcedBlockedSettlement } from \"./scheduler-task-lifecycle.ts\";\n\n/**\n * Adapts only canonical forced blocked effects to the real Scheduler shell.\n * Direct admission, running settlement, and cancellation remain in the root shell.\n */\nexport function replayCoreForcedBlocks<TResult>(\n state: SchedulerState<TResult>,\n effects: readonly AdmissionCoreEffect[],\n effectStates: readonly AdmissionCoreState[],\n diagnostics: SchedulerPerformanceDiagnostics | undefined,\n trigger: SchedulerTrigger\n): void {\n if (effects.length !== effectStates.length) {\n throw new Error(\"shared admission core effect replay has no matching immutable post-state\");\n }\n for (const [index, effect] of effects.entries()) {\n if (effect.kind !== \"settled\" || effect.settlementKind !== \"blocked\") {\n throw new Error(\"shared admission core forced-block replay received a non-blocked effect\");\n }\n const effectState = effectStates[index];\n if (effectState === undefined) {\n throw new Error(\"shared admission core forced block has no immutable post-state\");\n }\n diagnostics?.beforePendingSettlement([effect.taskId]);\n state.admissionCore = effectState;\n applyForcedBlockedSettlement(state, effect.taskId, effect.dependencyIds ?? []);\n diagnostics?.captureState(performanceState(state));\n diagnostics?.recordEffect(\n Object.freeze({ kind: \"settled\", settlementKind: \"blocked\", taskId: effect.taskId })\n );\n if (diagnostics !== undefined || state.diagnosticLogger !== undefined) {\n const inspection = schedulerInspectionForCore(state.admissionCore);\n observeSchedulerDecision(\n state,\n freezeDecision({\n ...decisionContext(\n Object.freeze({\n ...inspection,\n isAbortRequested: state.signal?.aborted === true,\n isCancelled: state.isCancelled\n }),\n state.admissionCore.compiled.graph.schedulerGraphSnapshot\n ),\n dependencyIds: effect.dependencyIds ?? [],\n kind: \"settle-blocked\",\n taskId: effect.taskId,\n trigger\n }),\n diagnostics\n );\n }\n if (state.onAdmissionCoreEffect !== undefined) {\n state.onAdmissionCoreEffect(Object.freeze({ effect, state: state.admissionCore }));\n }\n }\n}\n"]}
@@ -1,19 +1,44 @@
1
- /** Validates dependency and scope relations after graph-shaped input is normalized. */
1
+ /** Validates direct relations and scope structure after graph-shaped input is normalized. */
2
2
  export function validatePreparedTaskGraph(input) {
3
- validateDependencies(input.tasks, input.taskById);
4
- validateDependencyCycles(input.tasks, input.taskById);
3
+ validateResourceClaims(input.resourceCapacities, input.tasks);
4
+ validateTaskRelations(input.tasks, input.taskById);
5
+ validateTaskRelationCycles(input.tasks, input.taskById);
5
6
  validateScopes(input);
6
7
  }
7
- function validateDependencies(tasks, taskById) {
8
+ function validateResourceClaims(capacities, tasks) {
9
+ const capacityByResourceId = new Map(capacities.map(({ resourceId, units }) => [resourceId, units]));
8
10
  for (const task of tasks) {
9
- for (const dependency of task.dependsOn) {
10
- if (!taskById.has(dependency)) {
11
- throw new Error(`task ${task.id} depends on unknown task ${dependency}`);
11
+ for (const claim of task.resourceClaims) {
12
+ const capacity = capacityByResourceId.get(claim.resourceId);
13
+ if (capacity === undefined) {
14
+ throw new Error(`task ${task.id} claims unknown resource ${claim.resourceId}`);
15
+ }
16
+ if (claim.units > capacity) {
17
+ throw new Error(`task ${task.id} claim exceeds resource capacity: ${claim.resourceId}`);
18
+ }
19
+ }
20
+ }
21
+ }
22
+ function validateTaskRelations(tasks, taskById) {
23
+ for (const task of tasks) {
24
+ validateRelatedTaskIds(task, "dependsOn", task.dependsOn, taskById);
25
+ validateRelatedTaskIds(task, "observes", task.observes, taskById);
26
+ for (const dependencyId of task.dependsOn) {
27
+ if (task.observes.includes(dependencyId)) {
28
+ throw new Error(`task ${task.id} cannot both depend on and observe task ${dependencyId}`);
12
29
  }
13
30
  }
14
31
  }
15
32
  }
16
- function validateDependencyCycles(tasks, taskById) {
33
+ function validateRelatedTaskIds(task, relation, relationTargetIds, taskById) {
34
+ const action = relation === "dependsOn" ? "depends on" : "observes";
35
+ for (const relatedTaskId of relationTargetIds) {
36
+ if (!taskById.has(relatedTaskId)) {
37
+ throw new Error(`task ${task.id} ${action} unknown task ${relatedTaskId}`);
38
+ }
39
+ }
40
+ }
41
+ function validateTaskRelationCycles(tasks, taskById) {
17
42
  const visiting = new Set();
18
43
  const visited = new Set();
19
44
  const visit = (task) => {
@@ -23,12 +48,12 @@ function validateDependencyCycles(tasks, taskById) {
23
48
  if (visited.has(task.id))
24
49
  return;
25
50
  visiting.add(task.id);
26
- for (const dependency of task.dependsOn) {
27
- const dependencyTask = taskById.get(dependency);
28
- if (dependencyTask === undefined) {
29
- throw new Error(`task ${task.id} depends on unknown task ${dependency}`);
51
+ for (const relatedTaskId of relatedTaskIds(task)) {
52
+ const relatedTask = taskById.get(relatedTaskId);
53
+ if (relatedTask === undefined) {
54
+ throw new Error(`task ${task.id} relates to unknown task ${relatedTaskId}`);
30
55
  }
31
- visit(dependencyTask);
56
+ visit(relatedTask);
32
57
  }
33
58
  visiting.delete(task.id);
34
59
  visited.add(task.id);
@@ -88,32 +113,35 @@ function validateScopeTerminalReachability(scope, tasks, taskById) {
88
113
  for (const task of tasks) {
89
114
  if (task.scopeId !== scope.id || task.id === scope.terminalTaskId)
90
115
  continue;
91
- if (!dependsOnTask({ requiredDependencyId: task.id, taskById, taskId: scope.terminalTaskId })) {
92
- throw new Error(`task scope ${scope.id} terminal task must depend on scoped task ${task.id}`);
116
+ if (!isRelatedToTask({ requiredRelatedTaskId: task.id, taskById, taskId: scope.terminalTaskId })) {
117
+ throw new Error(`task scope ${scope.id} terminal task must relate to scoped task ${task.id}`);
93
118
  }
94
119
  }
95
120
  }
96
- function dependsOnTask(query) {
97
- return traverseDependencies({
98
- pending: [...taskDependencies(query.taskById, query.taskId)],
121
+ function isRelatedToTask(query) {
122
+ return traverseTaskRelations({
123
+ pending: [...relatedTaskIdsFor(query.taskById, query.taskId)],
99
124
  query,
100
125
  visited: new Set()
101
126
  });
102
127
  }
103
- function traverseDependencies(traversal) {
128
+ function traverseTaskRelations(traversal) {
104
129
  while (traversal.pending.length > 0) {
105
- const dependencyId = traversal.pending.pop();
106
- if (dependencyId === undefined || traversal.visited.has(dependencyId))
130
+ const relatedTaskId = traversal.pending.pop();
131
+ if (relatedTaskId === undefined || traversal.visited.has(relatedTaskId))
107
132
  continue;
108
- if (dependencyId === traversal.query.requiredDependencyId)
133
+ if (relatedTaskId === traversal.query.requiredRelatedTaskId)
109
134
  return true;
110
- traversal.visited.add(dependencyId);
111
- traversal.pending.push(...taskDependencies(traversal.query.taskById, dependencyId));
135
+ traversal.visited.add(relatedTaskId);
136
+ traversal.pending.push(...relatedTaskIdsFor(traversal.query.taskById, relatedTaskId));
112
137
  }
113
138
  return false;
114
139
  }
115
- function taskDependencies(taskById, taskId) {
140
+ function relatedTaskIdsFor(taskById, taskId) {
116
141
  const task = taskById.get(taskId);
117
- return task === undefined ? [] : task.dependsOn;
142
+ return task === undefined ? [] : relatedTaskIds(task);
143
+ }
144
+ function relatedTaskIds(task) {
145
+ return [...task.dependsOn, ...task.observes];
118
146
  }
119
147
  //# sourceMappingURL=graph-validation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph-validation.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/graph-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PlannedTask, PlannedTaskScope } from \"./graph.ts\";\n\ninterface PreparedTaskGraphValidationInput {\n readonly rootMaxParallel: number | undefined;\n readonly scopeById: ReadonlyMap<string, PlannedTaskScope>;\n readonly scopes: readonly PlannedTaskScope[];\n readonly taskById: ReadonlyMap<string, PlannedTask>;\n readonly tasks: readonly PlannedTask[];\n}\n\ninterface DependencyPathQuery {\n readonly requiredDependencyId: string;\n readonly taskById: ReadonlyMap<string, PlannedTask>;\n readonly taskId: string;\n}\n\ninterface DependencyTraversal {\n readonly pending: string[];\n readonly query: DependencyPathQuery;\n readonly visited: Set<string>;\n}\n\n/** Validates dependency and scope relations after graph-shaped input is normalized. */\nexport function validatePreparedTaskGraph(input: PreparedTaskGraphValidationInput): void {\n validateDependencies(input.tasks, input.taskById);\n validateDependencyCycles(input.tasks, input.taskById);\n validateScopes(input);\n}\n\nfunction validateDependencies(\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n for (const task of tasks) {\n for (const dependency of task.dependsOn) {\n if (!taskById.has(dependency)) {\n throw new Error(`task ${task.id} depends on unknown task ${dependency}`);\n }\n }\n }\n}\n\nfunction validateDependencyCycles(\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const visiting = new Set<string>();\n const visited = new Set<string>();\n\n const visit = (task: PlannedTask): void => {\n if (visiting.has(task.id)) {\n throw new Error(`task dependency cycle includes ${task.id}`);\n }\n if (visited.has(task.id)) return;\n\n visiting.add(task.id);\n for (const dependency of task.dependsOn) {\n const dependencyTask = taskById.get(dependency);\n if (dependencyTask === undefined) {\n throw new Error(`task ${task.id} depends on unknown task ${dependency}`);\n }\n visit(dependencyTask);\n }\n visiting.delete(task.id);\n visited.add(task.id);\n };\n\n for (const task of tasks) {\n visit(task);\n }\n}\n\nfunction validateScopes(input: PreparedTaskGraphValidationInput): void {\n validateRootMaxParallel(input.rootMaxParallel);\n validateTaskScopeMembership(input.tasks, input.scopeById);\n for (const scope of input.scopes) {\n validateScopeCap(scope, input.rootMaxParallel);\n validateScopeTerminal(scope, input.taskById);\n validateScopeActivation(scope, input.taskById);\n validateScopeTerminalReachability(scope, input.tasks, input.taskById);\n }\n}\n\nfunction validateRootMaxParallel(rootMaxParallel: number | undefined): void {\n if (\n rootMaxParallel !== undefined &&\n (!Number.isSafeInteger(rootMaxParallel) || rootMaxParallel <= 0)\n ) {\n throw new TypeError(\"task engine maxParallel must be a positive safe integer\");\n }\n}\n\nfunction validateTaskScopeMembership(\n tasks: readonly PlannedTask[],\n scopeById: ReadonlyMap<string, PlannedTaskScope>\n): void {\n for (const task of tasks) {\n if (task.scopeId !== undefined && !scopeById.has(task.scopeId)) {\n throw new Error(`task ${task.id} references unknown scope ${task.scopeId}`);\n }\n }\n}\n\nfunction validateScopeCap(scope: PlannedTaskScope, rootMaxParallel: number | undefined): void {\n if (rootMaxParallel !== undefined && scope.maxParallel > rootMaxParallel) {\n throw new Error(`task scope ${scope.id} maxParallel exceeds task engine maxParallel`);\n }\n}\n\nfunction validateScopeTerminal(\n scope: PlannedTaskScope,\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const terminal = taskById.get(scope.terminalTaskId);\n if (terminal?.scopeId !== scope.id) {\n throw new Error(`task scope ${scope.id} terminal task must belong to the scope`);\n }\n}\n\nfunction validateScopeActivation(\n scope: PlannedTaskScope,\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const activationIds = new Set<string>();\n for (const taskId of scope.activationTaskIds) {\n if (activationIds.has(taskId)) {\n throw new Error(`task scope ${scope.id} repeats activation task ${taskId}`);\n }\n activationIds.add(taskId);\n const task = taskById.get(taskId);\n if (task?.scopeId !== scope.id) {\n throw new Error(`task scope ${scope.id} activation task must belong to the scope: ${taskId}`);\n }\n }\n}\n\nfunction validateScopeTerminalReachability(\n scope: PlannedTaskScope,\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n for (const task of tasks) {\n if (task.scopeId !== scope.id || task.id === scope.terminalTaskId) continue;\n if (!dependsOnTask({ requiredDependencyId: task.id, taskById, taskId: scope.terminalTaskId })) {\n throw new Error(`task scope ${scope.id} terminal task must depend on scoped task ${task.id}`);\n }\n }\n}\n\nfunction dependsOnTask(query: DependencyPathQuery): boolean {\n return traverseDependencies({\n pending: [...taskDependencies(query.taskById, query.taskId)],\n query,\n visited: new Set()\n });\n}\n\nfunction traverseDependencies(traversal: DependencyTraversal): boolean {\n while (traversal.pending.length > 0) {\n const dependencyId = traversal.pending.pop();\n if (dependencyId === undefined || traversal.visited.has(dependencyId)) continue;\n if (dependencyId === traversal.query.requiredDependencyId) return true;\n\n traversal.visited.add(dependencyId);\n traversal.pending.push(...taskDependencies(traversal.query.taskById, dependencyId));\n }\n return false;\n}\n\nfunction taskDependencies(\n taskById: ReadonlyMap<string, PlannedTask>,\n taskId: string\n): readonly string[] {\n const task = taskById.get(taskId);\n return task === undefined ? [] : task.dependsOn;\n}\n"]}
1
+ {"version":3,"file":"graph-validation.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/graph-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NamedResourceUnits, PlannedTask, PlannedTaskScope } from \"./graph.ts\";\n\ninterface PreparedTaskGraphValidationInput {\n readonly resourceCapacities: readonly NamedResourceUnits[];\n readonly rootMaxParallel: number | undefined;\n readonly scopeById: ReadonlyMap<string, PlannedTaskScope>;\n readonly scopes: readonly PlannedTaskScope[];\n readonly taskById: ReadonlyMap<string, PlannedTask>;\n readonly tasks: readonly PlannedTask[];\n}\n\ntype TaskRelationField = \"dependsOn\" | \"observes\";\n\ninterface TaskRelationPathQuery {\n readonly requiredRelatedTaskId: string;\n readonly taskById: ReadonlyMap<string, PlannedTask>;\n readonly taskId: string;\n}\n\ninterface TaskRelationTraversal {\n readonly pending: string[];\n readonly query: TaskRelationPathQuery;\n readonly visited: Set<string>;\n}\n\n/** Validates direct relations and scope structure after graph-shaped input is normalized. */\nexport function validatePreparedTaskGraph(input: PreparedTaskGraphValidationInput): void {\n validateResourceClaims(input.resourceCapacities, input.tasks);\n validateTaskRelations(input.tasks, input.taskById);\n validateTaskRelationCycles(input.tasks, input.taskById);\n validateScopes(input);\n}\n\nfunction validateResourceClaims(\n capacities: readonly NamedResourceUnits[],\n tasks: readonly PlannedTask[]\n): void {\n const capacityByResourceId = new Map(\n capacities.map(({ resourceId, units }) => [resourceId, units] as const)\n );\n for (const task of tasks) {\n for (const claim of task.resourceClaims) {\n const capacity = capacityByResourceId.get(claim.resourceId);\n if (capacity === undefined) {\n throw new Error(`task ${task.id} claims unknown resource ${claim.resourceId}`);\n }\n if (claim.units > capacity) {\n throw new Error(`task ${task.id} claim exceeds resource capacity: ${claim.resourceId}`);\n }\n }\n }\n}\n\nfunction validateTaskRelations(\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n for (const task of tasks) {\n validateRelatedTaskIds(task, \"dependsOn\", task.dependsOn, taskById);\n validateRelatedTaskIds(task, \"observes\", task.observes, taskById);\n for (const dependencyId of task.dependsOn) {\n if (task.observes.includes(dependencyId)) {\n throw new Error(`task ${task.id} cannot both depend on and observe task ${dependencyId}`);\n }\n }\n }\n}\n\nfunction validateRelatedTaskIds(\n task: PlannedTask,\n relation: TaskRelationField,\n relationTargetIds: readonly string[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const action = relation === \"dependsOn\" ? \"depends on\" : \"observes\";\n for (const relatedTaskId of relationTargetIds) {\n if (!taskById.has(relatedTaskId)) {\n throw new Error(`task ${task.id} ${action} unknown task ${relatedTaskId}`);\n }\n }\n}\n\nfunction validateTaskRelationCycles(\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const visiting = new Set<string>();\n const visited = new Set<string>();\n\n const visit = (task: PlannedTask): void => {\n if (visiting.has(task.id)) {\n throw new Error(`task dependency cycle includes ${task.id}`);\n }\n if (visited.has(task.id)) return;\n\n visiting.add(task.id);\n for (const relatedTaskId of relatedTaskIds(task)) {\n const relatedTask = taskById.get(relatedTaskId);\n if (relatedTask === undefined) {\n throw new Error(`task ${task.id} relates to unknown task ${relatedTaskId}`);\n }\n visit(relatedTask);\n }\n visiting.delete(task.id);\n visited.add(task.id);\n };\n\n for (const task of tasks) {\n visit(task);\n }\n}\n\nfunction validateScopes(input: PreparedTaskGraphValidationInput): void {\n validateRootMaxParallel(input.rootMaxParallel);\n validateTaskScopeMembership(input.tasks, input.scopeById);\n for (const scope of input.scopes) {\n validateScopeCap(scope, input.rootMaxParallel);\n validateScopeTerminal(scope, input.taskById);\n validateScopeActivation(scope, input.taskById);\n validateScopeTerminalReachability(scope, input.tasks, input.taskById);\n }\n}\n\nfunction validateRootMaxParallel(rootMaxParallel: number | undefined): void {\n if (\n rootMaxParallel !== undefined &&\n (!Number.isSafeInteger(rootMaxParallel) || rootMaxParallel <= 0)\n ) {\n throw new TypeError(\"task engine maxParallel must be a positive safe integer\");\n }\n}\n\nfunction validateTaskScopeMembership(\n tasks: readonly PlannedTask[],\n scopeById: ReadonlyMap<string, PlannedTaskScope>\n): void {\n for (const task of tasks) {\n if (task.scopeId !== undefined && !scopeById.has(task.scopeId)) {\n throw new Error(`task ${task.id} references unknown scope ${task.scopeId}`);\n }\n }\n}\n\nfunction validateScopeCap(scope: PlannedTaskScope, rootMaxParallel: number | undefined): void {\n if (rootMaxParallel !== undefined && scope.maxParallel > rootMaxParallel) {\n throw new Error(`task scope ${scope.id} maxParallel exceeds task engine maxParallel`);\n }\n}\n\nfunction validateScopeTerminal(\n scope: PlannedTaskScope,\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const terminal = taskById.get(scope.terminalTaskId);\n if (terminal?.scopeId !== scope.id) {\n throw new Error(`task scope ${scope.id} terminal task must belong to the scope`);\n }\n}\n\nfunction validateScopeActivation(\n scope: PlannedTaskScope,\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n const activationIds = new Set<string>();\n for (const taskId of scope.activationTaskIds) {\n if (activationIds.has(taskId)) {\n throw new Error(`task scope ${scope.id} repeats activation task ${taskId}`);\n }\n activationIds.add(taskId);\n const task = taskById.get(taskId);\n if (task?.scopeId !== scope.id) {\n throw new Error(`task scope ${scope.id} activation task must belong to the scope: ${taskId}`);\n }\n }\n}\n\nfunction validateScopeTerminalReachability(\n scope: PlannedTaskScope,\n tasks: readonly PlannedTask[],\n taskById: ReadonlyMap<string, PlannedTask>\n): void {\n for (const task of tasks) {\n if (task.scopeId !== scope.id || task.id === scope.terminalTaskId) continue;\n if (\n !isRelatedToTask({ requiredRelatedTaskId: task.id, taskById, taskId: scope.terminalTaskId })\n ) {\n throw new Error(`task scope ${scope.id} terminal task must relate to scoped task ${task.id}`);\n }\n }\n}\n\nfunction isRelatedToTask(query: TaskRelationPathQuery): boolean {\n return traverseTaskRelations({\n pending: [...relatedTaskIdsFor(query.taskById, query.taskId)],\n query,\n visited: new Set()\n });\n}\n\nfunction traverseTaskRelations(traversal: TaskRelationTraversal): boolean {\n while (traversal.pending.length > 0) {\n const relatedTaskId = traversal.pending.pop();\n if (relatedTaskId === undefined || traversal.visited.has(relatedTaskId)) continue;\n if (relatedTaskId === traversal.query.requiredRelatedTaskId) return true;\n\n traversal.visited.add(relatedTaskId);\n traversal.pending.push(...relatedTaskIdsFor(traversal.query.taskById, relatedTaskId));\n }\n return false;\n}\n\nfunction relatedTaskIdsFor(\n taskById: ReadonlyMap<string, PlannedTask>,\n taskId: string\n): readonly string[] {\n const task = taskById.get(taskId);\n return task === undefined ? [] : relatedTaskIds(task);\n}\n\nfunction relatedTaskIds(task: PlannedTask): readonly string[] {\n return [...task.dependsOn, ...task.observes];\n}\n"]}
@@ -1,6 +1,15 @@
1
1
  import { validatePreparedTaskGraph } from "./graph-validation.mjs";
2
- const TASK_GRAPH_KEYS = ["tasks", "scopes"];
3
- const TASK_NODE_KEYS = ["id", "dependsOn", "mutex", "scopeId"];
2
+ import { snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
3
+ const TASK_GRAPH_KEYS = ["resourceCapacities", "tasks", "scopes"];
4
+ const TASK_NODE_KEYS = [
5
+ "admissionPriority",
6
+ "id",
7
+ "dependsOn",
8
+ "mutex",
9
+ "observes",
10
+ "resourceClaims",
11
+ "scopeId"
12
+ ];
4
13
  const TASK_SCOPE_KEYS = ["id", "maxParallel", "activationTaskIds", "terminalTaskId"];
5
14
  /** Validates untrusted graph-shaped input without admitting it to scheduler execution. */
6
15
  export function validateTaskGraph(graph) {
@@ -8,16 +17,46 @@ export function validateTaskGraph(graph) {
8
17
  }
9
18
  export function prepareTaskGraph(graph, rootMaxParallel) {
10
19
  const data = record(graph, "task graph", TASK_GRAPH_KEYS);
20
+ const resourceCapacities = resourceMapping(data.resourceCapacities, "task graph resourceCapacities");
11
21
  const tasks = normalizeTasks(data.tasks);
12
22
  const scopes = normalizeScopes(data.scopes);
13
23
  const taskById = new Map(tasks.map((task) => [task.id, task]));
14
24
  const scopeById = new Map(scopes.map((scope) => [scope.id, scope]));
15
- validatePreparedTaskGraph({ rootMaxParallel, scopeById, scopes, taskById, tasks });
25
+ validatePreparedTaskGraph({
26
+ resourceCapacities,
27
+ rootMaxParallel,
28
+ scopeById,
29
+ scopes,
30
+ taskById,
31
+ tasks
32
+ });
16
33
  return Object.freeze({
34
+ resourceCapacities,
35
+ schedulerGraphSnapshot: schedulerGraphSnapshot(tasks, scopes, resourceCapacities),
17
36
  tasks: Object.freeze(tasks),
18
37
  scopes: Object.freeze(scopes)
19
38
  });
20
39
  }
40
+ function schedulerGraphSnapshot(tasks, scopes, resourceCapacities) {
41
+ return Object.freeze({
42
+ resourceCapacities,
43
+ scopes: Object.freeze(scopes.map((scope) => Object.freeze({
44
+ activationTaskIds: Object.freeze([...scope.activationTaskIds]),
45
+ id: scope.id,
46
+ maxParallel: scope.maxParallel,
47
+ terminalTaskId: scope.terminalTaskId
48
+ }))),
49
+ tasks: Object.freeze(tasks.map((task) => Object.freeze({
50
+ admissionPriority: task.admissionPriority,
51
+ dependsOn: Object.freeze([...task.dependsOn]),
52
+ mutex: Object.freeze([...task.mutex]),
53
+ observes: Object.freeze([...task.observes]),
54
+ resourceClaims: task.resourceClaims,
55
+ scopeId: task.scopeId ?? null,
56
+ taskId: task.id
57
+ })))
58
+ });
59
+ }
21
60
  function normalizeTasks(value) {
22
61
  if (!Array.isArray(value)) {
23
62
  throw new TypeError("task graph tasks must be an array");
@@ -31,11 +70,15 @@ function normalizeTasks(value) {
31
70
  throw new TypeError(`duplicate task id: ${id}`);
32
71
  }
33
72
  ids.add(id);
73
+ const admissionPriority = admissionPriorityOrDefault(data.admissionPriority, id);
34
74
  const scopeId = optionalNonEmptyString(data.scopeId, `task ${id}.scopeId`);
35
75
  tasks.push(Object.freeze({
76
+ admissionPriority,
36
77
  id,
37
78
  dependsOn: Object.freeze(stringList(data.dependsOn, `task ${id}.dependsOn`)),
38
79
  mutex: Object.freeze(stringList(data.mutex, `task ${id}.mutex`)),
80
+ observes: Object.freeze(stringList(data.observes, `task ${id}.observes`)),
81
+ resourceClaims: resourceMapping(data.resourceClaims, `task ${id}.resourceClaims`),
39
82
  scopeId
40
83
  }));
41
84
  }
@@ -107,10 +150,43 @@ function requiredStringList(value, fieldName) {
107
150
  }
108
151
  return stringList(value, fieldName);
109
152
  }
153
+ function resourceMapping(value, fieldName) {
154
+ if (value === undefined)
155
+ return Object.freeze([]);
156
+ const data = snapshotClosedRecord(value);
157
+ if (data === undefined)
158
+ throw new TypeError(`${fieldName} must be a closed object`);
159
+ const entries = [];
160
+ for (const resourceId of Object.keys(data).sort(compareText)) {
161
+ if (resourceId.trim().length === 0) {
162
+ throw new TypeError(`${fieldName} resource ids must be non-empty strings`);
163
+ }
164
+ entries.push(Object.freeze({
165
+ resourceId,
166
+ units: positiveSafeInteger(data[resourceId], `${fieldName}.${resourceId}`)
167
+ }));
168
+ }
169
+ return Object.freeze(entries);
170
+ }
110
171
  function positiveSafeInteger(value, fieldName) {
111
172
  if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) {
112
173
  throw new TypeError(`${fieldName} must be a positive safe integer`);
113
174
  }
114
175
  return value;
115
176
  }
177
+ function admissionPriorityOrDefault(value, taskId) {
178
+ if (value === undefined)
179
+ return 0;
180
+ if (typeof value !== "number" || !Number.isSafeInteger(value)) {
181
+ throw new TypeError(`task ${taskId}.admissionPriority must be a safe integer`);
182
+ }
183
+ return value;
184
+ }
185
+ function compareText(left, right) {
186
+ if (left < right)
187
+ return -1;
188
+ if (left > right)
189
+ return 1;
190
+ return 0;
191
+ }
116
192
  //# sourceMappingURL=graph.mjs.map