@zxyycom/vibe-check 0.0.1 → 0.0.2

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 (950) hide show
  1. package/README.md +47 -74
  2. package/dist/esm/cache/cache-json-by-key.mjs +189 -0
  3. package/dist/esm/cache/cache-json-by-key.mjs.map +1 -0
  4. package/dist/esm/check/check.mjs.map +1 -1
  5. package/dist/esm/check/finding-presentation.mjs +40 -0
  6. package/dist/esm/check/finding-presentation.mjs.map +1 -0
  7. package/dist/esm/check/inherited-collection.mjs +1 -1
  8. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  9. package/dist/esm/check-settlement/fact-validation.mjs +17 -23
  10. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
  11. package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
  12. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
  13. package/dist/esm/check-settlement/reason-shape.mjs +12 -0
  14. package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
  15. package/dist/esm/check-settlement/record-store.mjs +14 -17
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/check-settlement/session.mjs +8 -2
  18. package/dist/esm/check-settlement/session.mjs.map +1 -1
  19. package/dist/esm/data-boundary/closed-values.mjs +16 -0
  20. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  21. package/dist/esm/data-boundary/value-shapes.mjs +9 -0
  22. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
  23. package/dist/esm/index.mjs +9 -2
  24. package/dist/esm/index.mjs.map +1 -1
  25. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs +56 -0
  26. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  27. package/dist/esm/learned-critical-path/duration-model/prediction.mjs +122 -0
  28. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  29. package/dist/esm/learned-critical-path/duration-model/preparation.mjs +41 -0
  30. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  31. package/dist/esm/learned-critical-path/duration-model/recording.mjs +109 -0
  32. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +1 -0
  33. package/dist/esm/learned-critical-path/duration-model/storage.mjs +187 -0
  34. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +1 -0
  35. package/dist/esm/learned-critical-path/selection-layers.mjs +28 -0
  36. package/dist/esm/learned-critical-path/selection-layers.mjs.map +1 -0
  37. package/dist/esm/learned-critical-path/static-decision.mjs +55 -0
  38. package/dist/esm/learned-critical-path/static-decision.mjs.map +1 -0
  39. package/dist/esm/learned-critical-path/strategy.mjs +179 -0
  40. package/dist/esm/learned-critical-path/strategy.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/atomic-publication.mjs +1 -15
  42. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  43. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
  44. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
  45. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
  46. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
  47. package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
  48. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
  50. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +1 -1
  54. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  55. package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -18
  56. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  57. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
  58. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
  59. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
  60. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  62. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  63. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
  64. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
  65. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
  66. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
  67. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
  68. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
  69. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
  70. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
  71. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
  72. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
  73. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  74. package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
  75. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  76. package/dist/esm/package-checks/file-metrics/execution.mjs +10 -17
  77. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  78. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
  79. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
  80. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
  81. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
  82. package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
  83. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
  84. package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
  85. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  86. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  87. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  88. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
  89. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
  90. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +2 -2
  91. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  92. package/dist/esm/package-checks/function-metrics/analysis.mjs +56 -15
  93. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  94. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
  95. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
  96. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
  97. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
  98. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
  99. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
  100. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +24 -0
  101. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
  102. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
  103. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
  104. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
  105. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
  106. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
  107. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
  108. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +217 -0
  109. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
  110. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
  111. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
  112. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
  113. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
  114. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
  115. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
  116. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
  117. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
  118. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
  119. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
  120. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
  121. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
  122. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
  123. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
  124. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
  125. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
  126. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
  127. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
  128. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
  129. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
  130. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
  131. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
  132. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
  133. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
  134. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +100 -0
  135. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
  136. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
  137. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
  138. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +260 -0
  139. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
  140. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
  141. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
  142. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
  143. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
  144. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +402 -0
  145. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
  146. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +214 -0
  147. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
  148. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
  149. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
  150. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
  151. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
  152. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
  153. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
  154. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
  155. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
  156. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
  157. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
  158. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
  159. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
  160. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
  161. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
  162. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +79 -0
  163. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
  164. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +606 -0
  165. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
  166. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
  167. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
  168. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +23 -0
  169. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
  170. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
  171. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
  172. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +542 -0
  173. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
  174. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
  175. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
  176. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +62 -0
  177. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
  178. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
  179. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
  180. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
  181. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
  182. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
  183. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
  184. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
  185. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
  186. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +108 -0
  187. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
  188. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
  189. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
  190. package/dist/esm/package-checks/function-metrics/constructor.mjs +2 -2
  191. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  192. package/dist/esm/package-checks/function-metrics/execution.mjs +51 -33
  193. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  194. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
  195. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
  196. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
  197. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
  198. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
  199. package/dist/esm/package-checks/function-metrics/measurement.mjs +161 -26
  200. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  201. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
  202. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
  203. package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
  204. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
  205. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  206. package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
  207. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  208. package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
  209. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
  210. package/dist/esm/package-checks/{file-metrics/scc → host-environment}/csv.mjs +1 -0
  211. package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
  212. package/dist/esm/package-checks/host-environment/git.mjs +1 -1
  213. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  214. package/dist/esm/package-checks/host-environment/process.mjs +5 -0
  215. package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
  216. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
  217. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
  218. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
  219. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  220. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
  221. package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
  222. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
  223. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
  224. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +9 -3
  225. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  226. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
  227. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  228. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
  229. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
  230. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
  231. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
  232. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
  233. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
  234. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
  235. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
  236. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +26 -4
  237. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  238. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +24 -11
  239. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  240. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  241. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +185 -0
  242. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
  244. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
  246. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
  247. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
  248. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
  250. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
  251. package/dist/esm/package-checks/project-files/collection.mjs +1 -1
  252. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  253. package/dist/esm/package-checks/project-files/configuration.mjs +2 -10
  254. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  255. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +1 -1
  256. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  257. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +1 -1
  258. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  259. package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
  260. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
  261. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +1 -1
  262. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  263. package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
  264. package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
  265. package/dist/esm/package-checks/secret-detection/default-check.mjs +39 -0
  266. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
  267. package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
  268. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
  269. package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
  270. package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
  271. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
  272. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
  273. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +153 -0
  274. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
  275. package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
  276. package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
  277. package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
  278. package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
  279. package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
  280. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
  281. package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
  282. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
  283. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +85 -0
  284. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +12 -172
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  287. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +171 -0
  288. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
  290. package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
  291. package/dist/esm/project-definition/check-tree/materialization.mjs +9 -1
  292. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  293. package/dist/esm/project-definition/check-tree/resolution.mjs +45 -13
  294. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  295. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
  296. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
  297. package/dist/esm/project-definition/declarative-snapshot.mjs +73 -0
  298. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
  299. package/dist/esm/project-definition/output-defaults.mjs +18 -1
  300. package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
  301. package/dist/esm/project-definition/output-validation.mjs +15 -15
  302. package/dist/esm/project-definition/output-validation.mjs.map +1 -1
  303. package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
  304. package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
  305. package/dist/esm/project-definition/project-definition-validation.mjs +100 -16
  306. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  307. package/dist/esm/project-definition/project-definition.mjs +52 -47
  308. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  309. package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
  310. package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
  311. package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
  312. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
  313. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +54 -0
  314. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
  315. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
  316. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
  317. package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
  318. package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
  319. package/dist/esm/project-run/aggregation.mjs +7 -5
  320. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  321. package/dist/esm/project-run/check-execution/callback.mjs +35 -8
  322. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  323. package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
  324. package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
  325. package/dist/esm/project-run/check-execution/dependencies.mjs +21 -3
  326. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  327. package/dist/esm/project-run/check-execution/execution-finalization.mjs +54 -13
  328. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  329. package/dist/esm/project-run/check-execution/execution-settlement.mjs +13 -9
  330. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  331. package/dist/esm/project-run/check-execution/flag-controls.mjs +87 -0
  332. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
  333. package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
  334. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
  335. package/dist/esm/project-run/check-execution/messages.mjs +5 -0
  336. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
  337. package/dist/esm/project-run/check-execution/plan.mjs +9 -5
  338. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
  339. package/dist/esm/project-run/check-execution/preflight.mjs +18 -32
  340. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -1
  341. package/dist/esm/project-run/check-execution/resolved-checks.mjs +100 -58
  342. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  343. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
  344. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
  345. package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +16 -38
  346. package/dist/esm/project-run/completion/completion.mjs.map +1 -0
  347. package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
  348. package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
  349. package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
  350. package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
  351. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  352. package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
  353. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
  354. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
  355. package/dist/esm/project-run/controls/validation.mjs +75 -11
  356. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  357. package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
  358. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
  359. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
  360. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
  361. package/dist/esm/project-run/invocation/candidate.mjs +61 -0
  362. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
  363. package/dist/esm/project-run/invocation/creation.mjs +79 -0
  364. package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
  365. package/dist/esm/project-run/invocation/paths.mjs +77 -0
  366. package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
  367. package/dist/esm/project-run/invocation/progress.mjs +30 -0
  368. package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
  369. package/dist/esm/project-run/{invocation.mjs → invocation/run.mjs} +78 -92
  370. package/dist/esm/project-run/invocation/run.mjs.map +1 -0
  371. package/dist/esm/project-run/invocation/scheduler.mjs +57 -0
  372. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
  373. package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
  374. package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
  375. package/dist/esm/project-run/outputs/status.mjs +105 -0
  376. package/dist/esm/project-run/outputs/status.mjs.map +1 -0
  377. package/dist/esm/project-run/progress-rendering/presentation.mjs +112 -18
  378. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  379. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +108 -19
  380. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  381. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +30 -4
  382. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  383. package/dist/esm/project-run/progress-rendering/renderer.mjs +5 -2
  384. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  385. package/dist/esm/project-run/project-context.mjs +1 -1
  386. package/dist/esm/project-run/project-context.mjs.map +1 -1
  387. package/dist/esm/project-run/result.mjs +2 -0
  388. package/dist/esm/project-run/result.mjs.map +1 -1
  389. package/dist/esm/project-run/run.mjs +1 -1
  390. package/dist/esm/project-run/run.mjs.map +1 -1
  391. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +166 -0
  392. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
  393. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
  394. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
  395. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
  396. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
  397. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
  398. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
  399. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
  400. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
  401. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +198 -0
  402. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
  403. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +151 -0
  404. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
  405. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
  406. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
  407. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
  408. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
  409. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
  410. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
  411. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
  412. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
  413. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs +46 -0
  414. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +1 -0
  415. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
  416. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
  417. package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
  418. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  419. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
  420. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
  421. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
  422. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
  423. package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
  424. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
  425. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +207 -0
  426. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
  427. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
  428. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
  429. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
  430. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
  431. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
  432. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
  433. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +158 -0
  434. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
  435. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
  436. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
  437. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
  438. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
  439. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
  440. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
  441. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
  442. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
  443. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
  444. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
  445. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +89 -0
  446. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
  447. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
  448. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
  449. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
  450. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
  451. package/dist/esm/project-run/task-scheduler/scheduler.mjs +171 -114
  452. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  453. package/docs/api-mechanics.md +64 -137
  454. package/docs/changelog.md +157 -0
  455. package/docs/checks/duplicate-detection.md +111 -59
  456. package/docs/checks/file-metrics.md +46 -43
  457. package/docs/checks/function-metrics.md +100 -163
  458. package/docs/checks/json-schema-validation.md +43 -36
  459. package/docs/checks/json-validation.md +38 -25
  460. package/docs/checks/maintenance-reminders.md +41 -29
  461. package/docs/checks/markdown-link-validation.md +82 -54
  462. package/docs/checks/secret-detection.md +129 -0
  463. package/docs/examples/artifacts/mixed-outcomes/definition.ts +5 -5
  464. package/docs/guides/cache-results.md +63 -0
  465. package/docs/guides/callbacks.md +34 -0
  466. package/docs/guides/check-dependencies.md +121 -0
  467. package/docs/guides/collecting-project-files.md +59 -0
  468. package/docs/guides/extending-check-lifecycle.md +112 -0
  469. package/docs/guides/finding-waivers.md +45 -0
  470. package/docs/guides/learned-scheduling.md +83 -0
  471. package/docs/guides/presenting-findings.md +54 -0
  472. package/docs/guides/run-outputs.md +145 -0
  473. package/docs/guides/scheduling.md +208 -0
  474. package/docs/guides/simulating-admission.md +55 -0
  475. package/docs/output.md +11 -20
  476. package/licenses/Lizard-1.24.0-MIT.txt +30 -0
  477. package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
  478. package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
  479. package/licenses/analyzer-translations-NOTICE.md +24 -0
  480. package/licenses/lizard-1.24.0-provenance.json +957 -0
  481. package/package.json +18 -6
  482. package/src/cache/cache-json-by-key.ts +304 -0
  483. package/src/check/check.ts +67 -17
  484. package/src/check/finding-presentation.ts +67 -0
  485. package/src/check/inherited-collection.ts +1 -1
  486. package/src/check-settlement/fact-validation.ts +29 -39
  487. package/src/check-settlement/outcome-normalization.ts +17 -35
  488. package/src/check-settlement/reason-shape.ts +20 -0
  489. package/src/check-settlement/record-store.ts +18 -15
  490. package/src/check-settlement/session.ts +12 -3
  491. package/src/data-boundary/closed-values.ts +29 -0
  492. package/src/data-boundary/value-shapes.ts +12 -0
  493. package/src/index.ts +70 -2
  494. package/src/learned-critical-path/duration-model/bounded-history.ts +108 -0
  495. package/src/learned-critical-path/duration-model/prediction.ts +181 -0
  496. package/src/learned-critical-path/duration-model/preparation.ts +77 -0
  497. package/src/learned-critical-path/duration-model/recording.ts +208 -0
  498. package/src/learned-critical-path/duration-model/storage.ts +252 -0
  499. package/src/learned-critical-path/selection-layers.ts +72 -0
  500. package/src/learned-critical-path/static-decision.ts +105 -0
  501. package/src/learned-critical-path/strategy.ts +299 -0
  502. package/src/machine-output/v4/atomic-publication.ts +1 -16
  503. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
  504. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
  505. package/src/package-checks/code-quality-findings/policy.ts +23 -0
  506. package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
  507. package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
  508. package/src/package-checks/duplicate-detection/default-check.ts +1 -1
  509. package/src/package-checks/duplicate-detection/execution.ts +82 -22
  510. package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
  511. package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
  512. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  513. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
  514. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
  515. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
  516. package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
  517. package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
  518. package/src/package-checks/duplicate-detection/options.ts +21 -1
  519. package/src/package-checks/duplicate-detection/records.ts +65 -12
  520. package/src/package-checks/file-metrics/execution.ts +16 -17
  521. package/src/package-checks/file-metrics/finding-messages.ts +29 -0
  522. package/src/package-checks/file-metrics/options-resolution.ts +19 -52
  523. package/src/package-checks/file-metrics/options-validation.ts +23 -32
  524. package/src/package-checks/file-metrics/records.ts +11 -23
  525. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  526. package/src/package-checks/file-metrics/scc/parser.ts +4 -4
  527. package/src/package-checks/file-metrics/scc/scanner.ts +2 -2
  528. package/src/package-checks/function-metrics/analysis.ts +76 -21
  529. package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
  530. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
  531. package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
  532. package/src/package-checks/function-metrics/analyzer/extension-output.ts +261 -0
  533. package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
  534. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +27 -0
  535. package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
  536. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
  537. package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
  538. package/src/package-checks/function-metrics/analyzer/pipeline.ts +311 -0
  539. package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
  540. package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
  541. package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
  542. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
  543. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
  544. package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
  545. package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
  546. package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
  547. package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
  548. package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
  549. package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
  550. package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
  551. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +107 -0
  552. package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
  553. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +246 -0
  554. package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
  555. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +306 -0
  556. package/src/package-checks/function-metrics/analyzer/readers/python.ts +431 -0
  557. package/src/package-checks/function-metrics/analyzer/readers/r.ts +234 -0
  558. package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
  559. package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
  560. package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
  561. package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
  562. package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
  563. package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
  564. package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
  565. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +90 -0
  566. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +593 -0
  567. package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
  568. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +35 -0
  569. package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
  570. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +682 -0
  571. package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
  572. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +75 -0
  573. package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
  574. package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
  575. package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
  576. package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
  577. package/src/package-checks/function-metrics/analyzer-worker-port.ts +150 -0
  578. package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
  579. package/src/package-checks/function-metrics/constructor.ts +2 -2
  580. package/src/package-checks/function-metrics/execution.ts +94 -39
  581. package/src/package-checks/function-metrics/finding-messages.ts +95 -0
  582. package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
  583. package/src/package-checks/function-metrics/measurement-model.ts +15 -1
  584. package/src/package-checks/function-metrics/measurement.ts +221 -36
  585. package/src/package-checks/function-metrics/options-resolution.ts +39 -75
  586. package/src/package-checks/function-metrics/options-validation.ts +30 -39
  587. package/src/package-checks/function-metrics/options.ts +27 -11
  588. package/src/package-checks/function-metrics/records.ts +73 -7
  589. package/src/package-checks/function-metrics/target-files.ts +10 -70
  590. package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
  591. package/src/package-checks/host-environment/git.ts +2 -2
  592. package/src/package-checks/host-environment/process.ts +10 -0
  593. package/src/package-checks/json-schema-validation/final-data.ts +8 -0
  594. package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
  595. package/src/package-checks/json-schema-validation/options.ts +23 -0
  596. package/src/package-checks/json-validation/final-data.ts +5 -0
  597. package/src/package-checks/json-validation/options-validation.ts +4 -18
  598. package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
  599. package/src/package-checks/markdown-link-validation/default-check.ts +9 -3
  600. package/src/package-checks/markdown-link-validation/execution.ts +51 -57
  601. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
  602. package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
  603. package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
  604. package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
  605. package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
  606. package/src/package-checks/markdown-link-validation/options-resolution.ts +31 -3
  607. package/src/package-checks/markdown-link-validation/options-validation.ts +27 -19
  608. package/src/package-checks/markdown-link-validation/options.ts +15 -0
  609. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +246 -0
  610. package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
  611. package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
  612. package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
  613. package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
  614. package/src/package-checks/project-files/collection.ts +1 -1
  615. package/src/package-checks/project-files/configuration.ts +3 -14
  616. package/src/package-checks/project-files/gitlink-revision.ts +1 -1
  617. package/src/package-checks/project-files/gitlink-worktree.ts +1 -1
  618. package/src/package-checks/project-files/public-collection.ts +92 -0
  619. package/src/package-checks/project-files/revision-worktree-files.ts +1 -1
  620. package/src/package-checks/secret-detection/classification.ts +30 -0
  621. package/src/package-checks/secret-detection/default-check.ts +50 -0
  622. package/src/package-checks/secret-detection/execution.ts +247 -0
  623. package/src/package-checks/secret-detection/final-data.ts +57 -0
  624. package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
  625. package/src/package-checks/secret-detection/input-preparation.ts +233 -0
  626. package/src/package-checks/secret-detection/options-resolution.ts +65 -0
  627. package/src/package-checks/secret-detection/options-validation.ts +27 -0
  628. package/src/package-checks/secret-detection/options.ts +36 -0
  629. package/src/package-checks/secret-detection/records.ts +77 -0
  630. package/src/package-checks/secret-detection/secretlint/adapter.ts +123 -0
  631. package/src/project-definition/check-tree/authoring.ts +29 -230
  632. package/src/project-definition/check-tree/check-fields-authoring.ts +227 -0
  633. package/src/project-definition/check-tree/collection-authoring.ts +13 -0
  634. package/src/project-definition/check-tree/materialization.ts +9 -1
  635. package/src/project-definition/check-tree/resolution.ts +80 -22
  636. package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
  637. package/src/project-definition/declarative-snapshot.ts +87 -0
  638. package/src/project-definition/output-defaults.ts +32 -1
  639. package/src/project-definition/output-validation.ts +15 -15
  640. package/src/project-definition/progress-rendering-output.ts +121 -0
  641. package/src/project-definition/project-definition-validation.ts +117 -18
  642. package/src/project-definition/project-definition.ts +198 -61
  643. package/src/project-definition/resource-unit-mapping.ts +25 -0
  644. package/src/project-definition/scheduler-policy.ts +553 -0
  645. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +80 -0
  646. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
  647. package/src/project-run/admission-strategy-provider/provider.ts +45 -0
  648. package/src/project-run/aggregation.ts +10 -5
  649. package/src/project-run/check-execution/callback.ts +50 -8
  650. package/src/project-run/check-execution/console-capture.ts +262 -0
  651. package/src/project-run/check-execution/dependencies.ts +43 -6
  652. package/src/project-run/check-execution/execution-finalization.ts +99 -25
  653. package/src/project-run/check-execution/execution-settlement.ts +19 -11
  654. package/src/project-run/check-execution/flag-controls.ts +132 -0
  655. package/src/project-run/check-execution/lifecycle.ts +21 -0
  656. package/src/project-run/check-execution/messages.ts +8 -0
  657. package/src/project-run/check-execution/plan.ts +12 -8
  658. package/src/project-run/check-execution/preflight.ts +23 -43
  659. package/src/project-run/check-execution/resolved-checks.ts +165 -126
  660. package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
  661. package/src/project-run/{completion.ts → completion/completion.ts} +17 -57
  662. package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
  663. package/src/project-run/completion/result-resolver.ts +60 -0
  664. package/src/project-run/controls/contract.ts +25 -2
  665. package/src/project-run/controls/outputs-override-validation.ts +83 -60
  666. package/src/project-run/controls/validation-result.ts +17 -6
  667. package/src/project-run/controls/validation.ts +107 -12
  668. package/src/project-run/diagnostic-logging/logger.ts +132 -207
  669. package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
  670. package/src/project-run/invocation/candidate.ts +86 -0
  671. package/src/project-run/invocation/creation.ts +116 -0
  672. package/src/project-run/invocation/paths.ts +154 -0
  673. package/src/project-run/invocation/progress.ts +38 -0
  674. package/src/project-run/{invocation.ts → invocation/run.ts} +125 -120
  675. package/src/project-run/invocation/scheduler.ts +75 -0
  676. package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
  677. package/src/project-run/outputs/status.ts +161 -0
  678. package/src/project-run/progress-rendering/presentation.ts +118 -26
  679. package/src/project-run/progress-rendering/renderer-formatting.ts +166 -19
  680. package/src/project-run/progress-rendering/renderer-lifecycle.ts +38 -3
  681. package/src/project-run/progress-rendering/renderer.ts +13 -2
  682. package/src/project-run/project-context.ts +3 -2
  683. package/src/project-run/result.ts +49 -3
  684. package/src/project-run/run.ts +7 -6
  685. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +316 -0
  686. package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
  687. package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
  688. package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
  689. package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
  690. package/src/project-run/task-scheduler/admission-core/selection-query.ts +295 -0
  691. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +252 -0
  692. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +236 -0
  693. package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
  694. package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
  695. package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
  696. package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
  697. package/src/project-run/task-scheduler/critical-path-ranking.ts +76 -0
  698. package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
  699. package/src/project-run/task-scheduler/execution-state.ts +97 -6
  700. package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
  701. package/src/project-run/task-scheduler/graph-validation.ts +77 -31
  702. package/src/project-run/task-scheduler/graph.ts +111 -3
  703. package/src/project-run/task-scheduler/measurement/diagnostics.ts +261 -0
  704. package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
  705. package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
  706. package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
  707. package/src/project-run/task-scheduler/measurement/timing.ts +190 -0
  708. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
  709. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
  710. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
  711. package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
  712. package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
  713. package/src/project-run/task-scheduler/scheduler-observation.ts +124 -0
  714. package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
  715. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +95 -0
  716. package/src/project-run/task-scheduler/scheduler.ts +216 -171
  717. package/types/cache/cache-json-by-key.d.ts +53 -0
  718. package/types/check/check.d.ts +62 -17
  719. package/types/check/finding-presentation.d.ts +25 -0
  720. package/types/check/inherited-collection.d.ts +1 -1
  721. package/types/check-settlement/reason-shape.d.ts +5 -0
  722. package/types/check-settlement/record-store.d.ts +2 -2
  723. package/types/check-settlement/session.d.ts +3 -1
  724. package/types/data-boundary/closed-values.d.ts +8 -0
  725. package/types/data-boundary/value-shapes.d.ts +3 -0
  726. package/types/index.d.ts +22 -7
  727. package/types/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
  728. package/types/learned-critical-path/duration-model/prediction.d.ts +32 -0
  729. package/types/learned-critical-path/duration-model/preparation.d.ts +28 -0
  730. package/types/learned-critical-path/duration-model/recording.d.ts +28 -0
  731. package/types/learned-critical-path/duration-model/storage.d.ts +12 -0
  732. package/types/learned-critical-path/selection-layers.d.ts +14 -0
  733. package/types/learned-critical-path/static-decision.d.ts +3 -0
  734. package/types/learned-critical-path/strategy.d.ts +35 -0
  735. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
  736. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
  737. package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
  738. package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
  739. package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
  740. package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
  741. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
  742. package/types/package-checks/duplicate-detection/options.d.ts +18 -1
  743. package/types/package-checks/duplicate-detection/records.d.ts +20 -3
  744. package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
  745. package/types/package-checks/file-metrics/records.d.ts +5 -10
  746. package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
  747. package/types/package-checks/function-metrics/analysis.d.ts +1 -1
  748. package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
  749. package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
  750. package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
  751. package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
  752. package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
  753. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
  754. package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
  755. package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
  756. package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
  757. package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
  758. package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
  759. package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
  760. package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
  761. package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
  762. package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
  763. package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
  764. package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
  765. package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
  766. package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
  767. package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
  768. package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
  769. package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
  770. package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
  771. package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
  772. package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
  773. package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
  774. package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
  775. package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
  776. package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
  777. package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
  778. package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
  779. package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
  780. package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
  781. package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
  782. package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
  783. package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
  784. package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
  785. package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
  786. package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
  787. package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
  788. package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
  789. package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
  790. package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
  791. package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
  792. package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
  793. package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
  794. package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
  795. package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
  796. package/types/package-checks/function-metrics/constructor.d.ts +1 -1
  797. package/types/package-checks/function-metrics/execution.d.ts +5 -2
  798. package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
  799. package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
  800. package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
  801. package/types/package-checks/function-metrics/measurement.d.ts +22 -7
  802. package/types/package-checks/function-metrics/options.d.ts +23 -10
  803. package/types/package-checks/function-metrics/records.d.ts +24 -5
  804. package/types/package-checks/function-metrics/target-files.d.ts +4 -3
  805. package/types/package-checks/host-environment/csv.d.ts +2 -0
  806. package/types/package-checks/host-environment/git.d.ts +1 -1
  807. package/types/package-checks/host-environment/process.d.ts +5 -0
  808. package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
  809. package/types/package-checks/json-schema-validation/options.d.ts +31 -3
  810. package/types/package-checks/json-validation/final-data.d.ts +5 -0
  811. package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
  812. package/types/package-checks/markdown-link-validation/default-check.d.ts +9 -3
  813. package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
  814. package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
  815. package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
  816. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
  817. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
  818. package/types/package-checks/markdown-link-validation/options.d.ts +15 -0
  819. package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
  820. package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
  821. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
  822. package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
  823. package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
  824. package/types/package-checks/project-files/public-collection.d.ts +16 -0
  825. package/types/package-checks/secret-detection/classification.d.ts +12 -0
  826. package/types/package-checks/secret-detection/default-check.d.ts +11 -0
  827. package/types/package-checks/secret-detection/execution.d.ts +14 -0
  828. package/types/package-checks/secret-detection/final-data.d.ts +15 -0
  829. package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
  830. package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
  831. package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
  832. package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
  833. package/types/package-checks/secret-detection/options.d.ts +32 -0
  834. package/types/package-checks/secret-detection/records.d.ts +35 -0
  835. package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
  836. package/types/project-definition/check-tree/authoring.d.ts +11 -14
  837. package/types/project-definition/check-tree/check-fields-authoring.d.ts +25 -0
  838. package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
  839. package/types/project-definition/check-tree/resolution.d.ts +8 -3
  840. package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
  841. package/types/project-definition/declarative-snapshot.d.ts +7 -0
  842. package/types/project-definition/output-defaults.d.ts +7 -0
  843. package/types/project-definition/output-validation.d.ts +2 -1
  844. package/types/project-definition/progress-rendering-output.d.ts +41 -0
  845. package/types/project-definition/project-definition.d.ts +61 -16
  846. package/types/project-definition/resource-unit-mapping.d.ts +4 -0
  847. package/types/project-definition/scheduler-policy.d.ts +497 -0
  848. package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
  849. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
  850. package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
  851. package/types/project-run/aggregation.d.ts +1 -1
  852. package/types/project-run/check-execution/callback.d.ts +5 -1
  853. package/types/project-run/check-execution/console-capture.d.ts +18 -0
  854. package/types/project-run/check-execution/dependencies.d.ts +1 -1
  855. package/types/project-run/check-execution/execution-finalization.d.ts +17 -7
  856. package/types/project-run/check-execution/execution-settlement.d.ts +5 -2
  857. package/types/project-run/check-execution/flag-controls.d.ts +27 -0
  858. package/types/project-run/check-execution/lifecycle.d.ts +20 -0
  859. package/types/project-run/check-execution/messages.d.ts +2 -0
  860. package/types/project-run/check-execution/plan.d.ts +2 -3
  861. package/types/project-run/check-execution/preflight.d.ts +6 -5
  862. package/types/project-run/check-execution/resolved-checks.d.ts +32 -38
  863. package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
  864. package/types/project-run/{completion.d.ts → completion/completion.d.ts} +4 -4
  865. package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
  866. package/types/project-run/completion/result-resolver.d.ts +4 -0
  867. package/types/project-run/controls/contract.d.ts +25 -2
  868. package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
  869. package/types/project-run/controls/validation-result.d.ts +12 -4
  870. package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
  871. package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
  872. package/types/project-run/invocation/candidate.d.ts +12 -0
  873. package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
  874. package/types/project-run/invocation/paths.d.ts +40 -0
  875. package/types/project-run/invocation/progress.d.ts +11 -0
  876. package/types/project-run/invocation/run.d.ts +43 -0
  877. package/types/project-run/invocation/scheduler.d.ts +16 -0
  878. package/types/project-run/outputs/configuration.d.ts +3 -0
  879. package/types/project-run/outputs/status.d.ts +48 -0
  880. package/types/project-run/progress-rendering/presentation.d.ts +9 -5
  881. package/types/project-run/progress-rendering/renderer-formatting.d.ts +8 -0
  882. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +6 -1
  883. package/types/project-run/progress-rendering/renderer.d.ts +7 -1
  884. package/types/project-run/project-context.d.ts +2 -1
  885. package/types/project-run/result.d.ts +37 -3
  886. package/types/project-run/run.d.ts +6 -5
  887. package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
  888. package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
  889. package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
  890. package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
  891. package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
  892. package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
  893. package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
  894. package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
  895. package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
  896. package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
  897. package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
  898. package/types/project-run/task-scheduler/critical-path-ranking.d.ts +19 -0
  899. package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
  900. package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
  901. package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
  902. package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
  903. package/types/project-run/task-scheduler/graph.d.ts +15 -0
  904. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
  905. package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
  906. package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
  907. package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
  908. package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
  909. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
  910. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
  911. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
  912. package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
  913. package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
  914. package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
  915. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
  916. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
  917. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
  918. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
  919. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +0 -17
  920. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
  921. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
  922. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
  923. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
  924. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
  925. package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
  926. package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
  927. package/dist/esm/project-run/completion.mjs.map +0 -1
  928. package/dist/esm/project-run/invocation-creation.mjs +0 -111
  929. package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
  930. package/dist/esm/project-run/invocation.mjs.map +0 -1
  931. package/dist/esm/project-run/machine-publication.mjs.map +0 -1
  932. package/dist/esm/project-run/output-configuration.mjs.map +0 -1
  933. package/dist/esm/project-run/output-status.mjs +0 -43
  934. package/dist/esm/project-run/output-status.mjs.map +0 -1
  935. package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
  936. package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
  937. package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
  938. package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
  939. package/src/package-checks/host-environment/process/command.ts +0 -21
  940. package/src/project-run/invocation-creation.ts +0 -160
  941. package/src/project-run/output-status.ts +0 -69
  942. package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
  943. package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
  944. package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
  945. package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
  946. package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
  947. package/types/package-checks/host-environment/process/command.d.ts +0 -7
  948. package/types/project-run/invocation.d.ts +0 -34
  949. package/types/project-run/output-configuration.d.ts +0 -3
  950. package/types/project-run/output-status.d.ts +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.mjs","sourceRoot":"","sources":["../../../../../src/project-run/task-scheduler/admission-core/selection.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompiledAdmissionGraph } from \"./compiled-graph.ts\";\nimport {\n ABSENT,\n PENDING,\n withoutForcedTask,\n forcedTaskSlotFor,\n type AdmissionSelectionIndex,\n type CoreTaskStatus\n} from \"./selection-index.ts\";\nimport { isScopeInactiveForCore } from \"./selection-query.ts\";\nimport { selectionIndexForSeed } from \"./selection-seed.ts\";\nimport { transitionIndexedSelection } from \"./selection-transition.ts\";\nimport type { SchedulerSettlementKind, SchedulerSnapshot } from \"../scheduler-decision-model.ts\";\n\n/** Private immutable core passed among Scheduler decision, policy and effect owners. */\nexport interface AdmissionCoreState {\n readonly compiled: CompiledAdmissionGraph;\n /** Selection representation remains private to this lifecycle module family. */\n readonly selection: AdmissionSelectionIndex;\n}\n\n/** Starts from the canonical all-pending selection seed. */\nexport function createInitialAdmissionCoreState(\n compiled: CompiledAdmissionGraph\n): AdmissionCoreState {\n return freezeCoreState(\n compiled,\n selectionIndexForSeed(\n compiled,\n compiled.graph.tasks.map(() => PENDING),\n undefined,\n undefined\n )\n );\n}\n\n/** Seeds from a shell snapshot without exposing a mutable shell view. */\nexport function createAdmissionCoreFromSchedulerSnapshot(\n compiled: CompiledAdmissionGraph,\n snapshot: SchedulerSnapshot\n): AdmissionCoreState {\n const statuses = statusesForSchedulerSnapshot(compiled, snapshot);\n return freezeCoreState(\n compiled,\n selectionIndexForSeed(compiled, statuses, snapshot.activeScopeIds, snapshot.runningMutexes)\n );\n}\n\n/** Produces an immutable successor for a validated pending-to-running admission. */\nexport function admitTaskForCore(state: AdmissionCoreState, taskSlot: number): AdmissionCoreState {\n const scopeSlot = state.compiled.taskScopeSlots[taskSlot];\n const activatedScopeSlot =\n scopeSlot !== undefined &&\n isScopeInactiveForCore(state, scopeSlot) &&\n state.compiled.taskActivatesScope[taskSlot] === true\n ? scopeSlot\n : undefined;\n return transitionState(state, taskSlot, Object.freeze({ kind: \"running\" }), activatedScopeSlot);\n}\n\n/** Produces an immutable successor for one already-validated settlement event. */\nexport function settleTaskForCore(\n state: AdmissionCoreState,\n taskSlot: number,\n settlementKind: SchedulerSettlementKind\n): AdmissionCoreState {\n return transitionState(\n state,\n taskSlot,\n Object.freeze({ kind: \"settled\", settlementKind }),\n undefined\n );\n}\n\n/** Pops the forced max-heap before recording its canonical blocked settlement. */\nexport function settleForcedTaskForCore(\n state: AdmissionCoreState,\n taskSlot: number\n): AdmissionCoreState {\n return settleTaskForCore(\n freezeCoreState(state.compiled, withoutForcedTask(state.selection)),\n taskSlot,\n \"blocked\"\n );\n}\n\nexport function nextForcedTaskForCore(state: AdmissionCoreState): number | undefined {\n return forcedTaskSlotFor(state.selection);\n}\n\nfunction statusesForSchedulerSnapshot(\n compiled: CompiledAdmissionGraph,\n snapshot: SchedulerSnapshot\n): CoreTaskStatus[] {\n const statuses = compiled.graph.tasks.map(() => PENDING);\n const presentTaskIds = new Set([\n ...snapshot.pendingTaskIds,\n ...snapshot.runningTaskIds,\n ...snapshot.settledTasks.map((task) => task.taskId)\n ]);\n for (const [slot, task] of compiled.graph.tasks.entries()) {\n if (!presentTaskIds.has(task.id)) statuses[slot] = ABSENT;\n }\n for (const taskId of snapshot.runningTaskIds) {\n const slot = compiled.taskSlotsById.get(taskId);\n if (slot !== undefined) statuses[slot] = Object.freeze({ kind: \"running\" });\n }\n for (const settled of snapshot.settledTasks) {\n const slot = compiled.taskSlotsById.get(settled.taskId);\n if (slot !== undefined) {\n statuses[slot] = Object.freeze({ kind: \"settled\", settlementKind: settled.kind });\n }\n }\n return statuses;\n}\n\nfunction transitionState(\n state: AdmissionCoreState,\n taskSlot: number,\n status: CoreTaskStatus,\n activatedScopeSlot: number | undefined\n): AdmissionCoreState {\n return freezeCoreState(\n state.compiled,\n transitionIndexedSelection(\n state.compiled,\n state.selection,\n taskSlot,\n status,\n activatedScopeSlot\n )\n );\n}\n\nfunction freezeCoreState(\n compiled: CompiledAdmissionGraph,\n selection: AdmissionSelectionIndex\n): AdmissionCoreState {\n return Object.freeze({ compiled, selection });\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /** Returns the declared scope for one Task without inferring membership from activation state. */
2
+ export function scopeForTask(graph, task) {
3
+ return task.scopeId === undefined
4
+ ? undefined
5
+ : graph.scopes.find((scope) => scope.id === task.scopeId);
6
+ }
7
+ /** Returns the inactive constrained scope that this Task would activate. */
8
+ export function tighteningScopeForTask(graph, inspection, task) {
9
+ const scope = scopeForTask(graph, task);
10
+ if (scope === undefined ||
11
+ !scope.activationTaskIds.includes(task.id) ||
12
+ inspection.activeScopeIds.includes(scope.id) ||
13
+ scope.maxParallel >= inspection.maxParallel) {
14
+ return undefined;
15
+ }
16
+ return scope;
17
+ }
18
+ /** Reports whether a Task continues an active scope that constrains root parallelism. */
19
+ export function isConstrainedScopeContinuation(graph, inspection, task) {
20
+ const scope = scopeForTask(graph, task);
21
+ return (scope !== undefined &&
22
+ inspection.activeScopeIds.includes(scope.id) &&
23
+ scope.maxParallel < inspection.maxParallel);
24
+ }
25
+ //# sourceMappingURL=admission-scope-layers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission-scope-layers.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/admission-scope-layers.ts"],"names":[],"mappings":"AAGA,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAC1B,KAAuB,EACvB,IAAiB;IAEjB,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;QAC/B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CACpC,KAAuB,EACvB,UAA+B,EAC/B,IAAiB;IAEjB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,IACE,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,EAC3C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,8BAA8B,CAC5C,KAAuB,EACvB,UAA+B,EAC/B,IAAiB;IAEjB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAC3C,CAAC;AACJ,CAAC","sourcesContent":["import type { SchedulerInspection } from \"./scheduler-decision-inspection.ts\";\nimport type { PlannedTask, PlannedTaskGraph, PlannedTaskScope } from \"./graph.ts\";\n\n/** Returns the declared scope for one Task without inferring membership from activation state. */\nexport function scopeForTask(\n graph: PlannedTaskGraph,\n task: PlannedTask\n): PlannedTaskScope | undefined {\n return task.scopeId === undefined\n ? undefined\n : graph.scopes.find((scope) => scope.id === task.scopeId);\n}\n\n/** Returns the inactive constrained scope that this Task would activate. */\nexport function tighteningScopeForTask(\n graph: PlannedTaskGraph,\n inspection: SchedulerInspection,\n task: PlannedTask\n): PlannedTaskScope | undefined {\n const scope = scopeForTask(graph, task);\n if (\n scope === undefined ||\n !scope.activationTaskIds.includes(task.id) ||\n inspection.activeScopeIds.includes(scope.id) ||\n scope.maxParallel >= inspection.maxParallel\n ) {\n return undefined;\n }\n return scope;\n}\n\n/** Reports whether a Task continues an active scope that constrains root parallelism. */\nexport function isConstrainedScopeContinuation(\n graph: PlannedTaskGraph,\n inspection: SchedulerInspection,\n task: PlannedTask\n): boolean {\n const scope = scopeForTask(graph, task);\n return (\n scope !== undefined &&\n inspection.activeScopeIds.includes(scope.id) &&\n scope.maxParallel < inspection.maxParallel\n );\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import { isConstrainedScopeContinuation, scopeForTask, tighteningScopeForTask } from "./admission-scope-layers.mjs";
2
+ export const staticAdmissionSelectionPolicy = Object.freeze({
3
+ decide: decideStaticAdmission
4
+ });
5
+ function decideStaticAdmission(input) {
6
+ const tightening = selectTighteningCandidate(input);
7
+ if (tightening !== undefined)
8
+ return proposalFor(tightening);
9
+ const continuation = selectConstrainedContinuation(input);
10
+ if (continuation !== undefined)
11
+ return proposalFor(continuation);
12
+ return proposalFor(selectOrdinaryReadyCandidate(input.candidates));
13
+ }
14
+ function proposalFor(candidate) {
15
+ return candidate.canAdmit
16
+ ? Object.freeze({ kind: "select", taskId: candidate.task.id })
17
+ : Object.freeze({ kind: "wait" });
18
+ }
19
+ function selectTighteningCandidate(input) {
20
+ return input.candidates
21
+ .filter((candidate) => tighteningScopeForTask(input.graph, input.inspection, candidate.task) !== undefined)
22
+ .sort((left, right) => compareConstrainedCandidates(input, left, right))[0];
23
+ }
24
+ function selectConstrainedContinuation(input) {
25
+ return input.candidates
26
+ .filter((candidate) => isConstrainedScopeContinuation(input.graph, input.inspection, candidate.task))
27
+ .sort((left, right) => compareConstrainedCandidates(input, left, right))[0];
28
+ }
29
+ function selectOrdinaryReadyCandidate(candidates) {
30
+ const admissible = candidates.filter(({ canAdmit }) => canAdmit);
31
+ const selectable = admissible.length === 0 ? candidates : admissible;
32
+ const [first, ...remaining] = selectable;
33
+ if (first === undefined)
34
+ throw new Error("static scheduler selection requires a candidate");
35
+ return remaining.reduce((selected, candidate) => candidate.task.admissionPriority > selected.task.admissionPriority ? candidate : selected, first);
36
+ }
37
+ function compareConstrainedCandidates(input, left, right) {
38
+ const leftScope = scopeForTask(input.graph, left.task);
39
+ const rightScope = scopeForTask(input.graph, right.task);
40
+ if (leftScope === undefined || rightScope === undefined) {
41
+ throw new Error("constrained task is missing a scope");
42
+ }
43
+ return (leftScope.maxParallel - rightScope.maxParallel ||
44
+ right.task.admissionPriority - left.task.admissionPriority ||
45
+ compareText(leftScope.id, rightScope.id) ||
46
+ compareText(left.task.id, right.task.id));
47
+ }
48
+ function compareText(left, right) {
49
+ if (left < right)
50
+ return -1;
51
+ if (left > right)
52
+ return 1;
53
+ return 0;
54
+ }
55
+ //# sourceMappingURL=admission-selection-policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission-selection-policy.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/admission-selection-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PlannedTask, PlannedTaskGraph } from \"./graph.ts\";\nimport type { AdmissionCoreState } from \"./admission-core/core.ts\";\nimport {\n isConstrainedScopeContinuation,\n scopeForTask,\n tighteningScopeForTask\n} from \"./admission-scope-layers.ts\";\nimport type { SchedulerInspection } from \"./scheduler-decision-inspection.ts\";\nimport type {\n AdmissionPolicyContext,\n SchedulerGraphSnapshot\n} from \"../../project-definition/project-definition.ts\";\n\nexport interface AdmissionCandidate {\n readonly canAdmit: boolean;\n readonly task: PlannedTask;\n}\n\nexport interface AdmissionPolicyInput {\n /** Shared immutable core at this decision boundary; only custom context projects its public handle. */\n readonly admissionCore: AdmissionCoreState;\n /** Scheduler-owned decision-boundary measurement, present only for custom policy. */\n readonly measurement?: AdmissionPolicyContext[\"measurement\"];\n readonly candidates: readonly AdmissionCandidate[];\n readonly graph: PlannedTaskGraph;\n readonly graphSnapshot: SchedulerGraphSnapshot;\n readonly inspection: SchedulerInspection;\n}\n\nexport type AdmissionPolicyDecision =\n | Readonly<{ readonly kind: \"select\"; readonly taskId: string }>\n | Readonly<{ readonly kind: \"wait\" }>;\n\n/** A Product-private pure admission policy; it receives no executor or mutable scheduler state. */\nexport interface AdmissionSelectionPolicy {\n /** Only custom policies require Scheduler sampling before every callback. */\n readonly requiresMeasurement?: true;\n readonly decide: (input: AdmissionPolicyInput) => AdmissionPolicyDecision;\n}\n\nexport const staticAdmissionSelectionPolicy: AdmissionSelectionPolicy = Object.freeze({\n decide: decideStaticAdmission\n});\n\nfunction decideStaticAdmission(input: AdmissionPolicyInput): AdmissionPolicyDecision {\n const tightening = selectTighteningCandidate(input);\n if (tightening !== undefined) return proposalFor(tightening);\n\n const continuation = selectConstrainedContinuation(input);\n if (continuation !== undefined) return proposalFor(continuation);\n\n return proposalFor(selectOrdinaryReadyCandidate(input.candidates));\n}\n\nfunction proposalFor(candidate: AdmissionCandidate): AdmissionPolicyDecision {\n return candidate.canAdmit\n ? Object.freeze({ kind: \"select\", taskId: candidate.task.id })\n : Object.freeze({ kind: \"wait\" });\n}\n\nfunction selectTighteningCandidate(input: AdmissionPolicyInput): AdmissionCandidate | undefined {\n return input.candidates\n .filter(\n (candidate) =>\n tighteningScopeForTask(input.graph, input.inspection, candidate.task) !== undefined\n )\n .sort((left, right) => compareConstrainedCandidates(input, left, right))[0];\n}\n\nfunction selectConstrainedContinuation(\n input: AdmissionPolicyInput\n): AdmissionCandidate | undefined {\n return input.candidates\n .filter((candidate) =>\n isConstrainedScopeContinuation(input.graph, input.inspection, candidate.task)\n )\n .sort((left, right) => compareConstrainedCandidates(input, left, right))[0];\n}\n\nfunction selectOrdinaryReadyCandidate(\n candidates: readonly AdmissionCandidate[]\n): AdmissionCandidate {\n const admissible = candidates.filter(({ canAdmit }) => canAdmit);\n const selectable = admissible.length === 0 ? candidates : admissible;\n const [first, ...remaining] = selectable;\n if (first === undefined) throw new Error(\"static scheduler selection requires a candidate\");\n return remaining.reduce(\n (selected, candidate) =>\n candidate.task.admissionPriority > selected.task.admissionPriority ? candidate : selected,\n first\n );\n}\n\nfunction compareConstrainedCandidates(\n input: AdmissionPolicyInput,\n left: AdmissionCandidate,\n right: AdmissionCandidate\n): number {\n const leftScope = scopeForTask(input.graph, left.task);\n const rightScope = scopeForTask(input.graph, right.task);\n if (leftScope === undefined || rightScope === undefined) {\n throw new Error(\"constrained task is missing a scope\");\n }\n return (\n leftScope.maxParallel - rightScope.maxParallel ||\n right.task.admissionPriority - left.task.admissionPriority ||\n compareText(leftScope.id, rightScope.id) ||\n compareText(left.task.id, right.task.id)\n );\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
@@ -0,0 +1,46 @@
1
+ /** Computes directed dependsOn + observes downstream scores once before Scheduler admission. */
2
+ export function createSchedulerCriticalPathSnapshot(graph, prediction) {
3
+ const downstreamByTaskId = new Map();
4
+ for (const task of graph.tasks)
5
+ downstreamByTaskId.set(task.taskId, new Set());
6
+ for (const task of graph.tasks) {
7
+ for (const upstreamTaskId of [...task.dependsOn, ...task.observes]) {
8
+ const downstream = downstreamByTaskId.get(upstreamTaskId);
9
+ if (downstream === undefined) {
10
+ throw new TypeError(`critical path graph has unknown task ${upstreamTaskId}`);
11
+ }
12
+ downstream.add(task.taskId);
13
+ }
14
+ }
15
+ const scoreByTaskId = new Map();
16
+ const visitingTaskIds = new Set();
17
+ const scoreFor = (taskId) => {
18
+ const existing = scoreByTaskId.get(taskId);
19
+ if (existing !== undefined)
20
+ return existing;
21
+ if (visitingTaskIds.has(taskId))
22
+ throw new TypeError("critical path graph must be acyclic");
23
+ const taskPrediction = prediction.predictions.find((entry) => entry.taskId === taskId);
24
+ if (taskPrediction === undefined)
25
+ throw new TypeError(`critical path prediction missing task ${taskId}`);
26
+ visitingTaskIds.add(taskId);
27
+ let greatestDownstreamScore = 0;
28
+ for (const downstreamTaskId of downstreamByTaskId.get(taskId) ?? []) {
29
+ greatestDownstreamScore = Math.max(greatestDownstreamScore, scoreFor(downstreamTaskId));
30
+ }
31
+ visitingTaskIds.delete(taskId);
32
+ const score = saturatingSum(taskPrediction.estimatedDurationMs, greatestDownstreamScore);
33
+ scoreByTaskId.set(taskId, score);
34
+ return score;
35
+ };
36
+ return Object.freeze({
37
+ scores: Object.freeze(graph.tasks.map((task) => Object.freeze({ criticalPathScore: scoreFor(task.taskId), taskId: task.taskId })))
38
+ });
39
+ }
40
+ export function criticalPathScoreForTask(snapshot, taskId) {
41
+ return snapshot.scores.find((score) => score.taskId === taskId)?.criticalPathScore;
42
+ }
43
+ function saturatingSum(left, right) {
44
+ return left > Number.MAX_SAFE_INTEGER - right ? Number.MAX_SAFE_INTEGER : left + right;
45
+ }
46
+ //# sourceMappingURL=critical-path-ranking.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"critical-path-ranking.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/critical-path-ranking.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SchedulerGraphSnapshot } from \"../../project-definition/project-definition.ts\";\n\n/** The pure ranking algorithm only needs immutable estimated durations keyed by Task ID. */\nexport interface SchedulerCriticalPathPredictionSnapshot {\n readonly predictions: readonly Readonly<{\n readonly estimatedDurationMs: number;\n readonly taskId: string;\n }>[];\n}\n\nexport interface SchedulerCriticalPathScore {\n readonly criticalPathScore: number;\n readonly taskId: string;\n}\n\n/** A graph-derived immutable score table; it retains no dependency or authored-input payload. */\nexport interface SchedulerCriticalPathSnapshot {\n readonly scores: readonly SchedulerCriticalPathScore[];\n}\n\n/** Computes directed dependsOn + observes downstream scores once before Scheduler admission. */\nexport function createSchedulerCriticalPathSnapshot(\n graph: SchedulerGraphSnapshot,\n prediction: SchedulerCriticalPathPredictionSnapshot\n): SchedulerCriticalPathSnapshot {\n const downstreamByTaskId = new Map<string, Set<string>>();\n for (const task of graph.tasks) downstreamByTaskId.set(task.taskId, new Set<string>());\n for (const task of graph.tasks) {\n for (const upstreamTaskId of [...task.dependsOn, ...task.observes]) {\n const downstream = downstreamByTaskId.get(upstreamTaskId);\n if (downstream === undefined) {\n throw new TypeError(`critical path graph has unknown task ${upstreamTaskId}`);\n }\n downstream.add(task.taskId);\n }\n }\n\n const scoreByTaskId = new Map<string, number>();\n const visitingTaskIds = new Set<string>();\n const scoreFor = (taskId: string): number => {\n const existing = scoreByTaskId.get(taskId);\n if (existing !== undefined) return existing;\n if (visitingTaskIds.has(taskId)) throw new TypeError(\"critical path graph must be acyclic\");\n const taskPrediction = prediction.predictions.find((entry) => entry.taskId === taskId);\n if (taskPrediction === undefined)\n throw new TypeError(`critical path prediction missing task ${taskId}`);\n visitingTaskIds.add(taskId);\n let greatestDownstreamScore = 0;\n for (const downstreamTaskId of downstreamByTaskId.get(taskId) ?? []) {\n greatestDownstreamScore = Math.max(greatestDownstreamScore, scoreFor(downstreamTaskId));\n }\n visitingTaskIds.delete(taskId);\n const score = saturatingSum(taskPrediction.estimatedDurationMs, greatestDownstreamScore);\n scoreByTaskId.set(taskId, score);\n return score;\n };\n\n return Object.freeze({\n scores: Object.freeze(\n graph.tasks.map((task) =>\n Object.freeze({ criticalPathScore: scoreFor(task.taskId), taskId: task.taskId })\n )\n )\n });\n}\n\nexport function criticalPathScoreForTask(\n snapshot: SchedulerCriticalPathSnapshot,\n taskId: string\n): number | undefined {\n return snapshot.scores.find((score) => score.taskId === taskId)?.criticalPathScore;\n}\n\nfunction saturatingSum(left: number, right: number): number {\n return left > Number.MAX_SAFE_INTEGER - right ? Number.MAX_SAFE_INTEGER : left + right;\n}\n"]}
@@ -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 SchedulerMeasurementHook\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 measurementHooks?: readonly SchedulerMeasurementHook[];\n readonly onMeasurementHookFailure?: () => void;\n readonly onMeasurementHooksSettled?: () => 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