@zxyycom/vibe-check 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/README.md +36 -5
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +1 -1
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  15. package/dist/esm/check-settlement/record-store.mjs +1 -1
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  18. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  19. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  20. package/dist/esm/data-boundary/closed-values.mjs +28 -4
  21. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  22. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  23. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  24. package/dist/esm/data-boundary/project-path.mjs +19 -0
  25. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  26. package/dist/esm/index.mjs +12 -5
  27. package/dist/esm/index.mjs.map +1 -1
  28. package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
  29. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  30. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  31. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  32. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
  33. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
  34. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  35. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  36. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  37. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  38. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  39. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  40. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  41. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  42. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  43. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  44. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
  45. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  46. package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
  47. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  48. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
  50. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  54. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  55. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  56. package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
  57. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  58. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
  59. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
  60. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  61. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  62. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  63. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  64. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  65. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  66. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  67. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  68. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
  69. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  70. package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
  71. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  72. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
  73. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
  74. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
  75. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
  76. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
  77. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
  78. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
  79. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
  80. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
  81. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
  82. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
  83. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
  84. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
  85. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
  86. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
  87. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
  88. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
  89. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
  90. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
  91. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
  92. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
  93. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
  94. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
  95. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
  96. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
  97. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
  98. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
  99. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
  100. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
  101. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
  102. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
  103. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
  104. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
  105. package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
  106. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  107. package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
  108. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  109. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
  110. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
  111. package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
  112. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  113. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  114. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  115. package/dist/esm/package-checks/host-environment/git.mjs +11 -0
  116. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  117. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  118. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  119. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  120. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  121. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  122. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  123. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  124. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  125. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  126. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  127. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  128. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  129. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  130. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  131. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  132. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  133. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  134. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  135. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  136. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  137. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  138. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  139. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  140. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
  141. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  142. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
  143. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  144. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
  145. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
  146. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  147. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  148. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
  149. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  150. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
  151. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  152. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  153. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
  154. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
  155. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  156. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  157. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  158. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  159. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  160. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  161. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  162. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  163. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  164. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  165. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  166. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  167. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  168. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  169. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  170. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  171. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  172. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  173. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  174. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  175. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  176. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  177. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  178. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  179. package/dist/esm/package-checks/project-files/collection.mjs +23 -19
  180. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  181. package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
  182. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  183. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
  184. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  185. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
  186. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  187. package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
  188. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
  189. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  190. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  191. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
  192. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  193. package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
  194. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
  195. package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
  196. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
  197. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
  198. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
  199. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
  200. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
  201. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
  202. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
  203. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  204. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  205. package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
  206. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  207. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  208. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  209. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  210. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  211. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  212. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
  213. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  214. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
  215. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  216. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  217. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
  218. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  219. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
  220. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  221. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  222. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
  223. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  224. package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
  225. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  226. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
  227. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
  228. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  229. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  230. package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
  231. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  232. package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
  233. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  234. package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
  235. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
  236. package/dist/esm/project-definition/project-changes.mjs +70 -0
  237. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  238. package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
  239. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  240. package/dist/esm/project-definition/project-definition.mjs +22 -15
  241. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  242. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
  243. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
  244. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
  245. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
  246. package/dist/esm/project-run/aggregation.mjs +42 -59
  247. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  248. package/dist/esm/project-run/changes/git.mjs +161 -0
  249. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  250. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  251. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  252. package/dist/esm/project-run/check-execution/callback.mjs +3 -2
  253. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  254. package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
  255. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  256. package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
  257. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  258. package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
  259. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  260. package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
  261. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
  262. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
  263. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  264. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  265. package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
  266. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  267. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  268. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  269. package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
  270. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  271. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  272. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  273. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  274. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  275. package/dist/esm/project-run/completion/completion.mjs +18 -1
  276. package/dist/esm/project-run/completion/completion.mjs.map +1 -1
  277. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  278. package/dist/esm/project-run/controls/validation.mjs +7 -54
  279. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  280. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  281. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  282. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
  283. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
  284. package/dist/esm/project-run/invocation/candidate.mjs +17 -13
  285. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
  286. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  287. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  288. package/dist/esm/project-run/invocation/creation.mjs +7 -3
  289. package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
  290. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  291. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  292. package/dist/esm/project-run/invocation/run.mjs +13 -112
  293. package/dist/esm/project-run/invocation/run.mjs.map +1 -1
  294. package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
  295. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
  296. package/dist/esm/project-run/outputs/status.mjs +12 -12
  297. package/dist/esm/project-run/outputs/status.mjs.map +1 -1
  298. package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
  299. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  300. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
  301. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  302. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
  303. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  304. package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
  305. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  306. package/dist/esm/project-run/project-context.mjs +2 -1
  307. package/dist/esm/project-run/project-context.mjs.map +1 -1
  308. package/dist/esm/project-run/result.mjs +2 -2
  309. package/dist/esm/project-run/result.mjs.map +1 -1
  310. package/dist/esm/project-run/run.mjs.map +1 -1
  311. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  312. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  313. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
  314. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
  315. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
  316. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
  317. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
  318. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
  319. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
  320. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
  321. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  322. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
  323. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
  324. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
  325. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
  326. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
  327. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
  328. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
  329. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
  330. package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
  331. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  332. package/docs/api-mechanics.md +147 -28
  333. package/docs/changelog.md +145 -2
  334. package/docs/checks/duplicate-detection.md +22 -3
  335. package/docs/checks/file-metrics.md +25 -6
  336. package/docs/checks/function-metrics.md +21 -2
  337. package/docs/checks/json-schema-validation.md +25 -4
  338. package/docs/checks/json-validation.md +24 -5
  339. package/docs/checks/maintenance-reminders.md +30 -6
  340. package/docs/checks/markdown-link-validation.md +24 -4
  341. package/docs/checks/markdown-lint.md +167 -0
  342. package/docs/checks/secret-detection.md +31 -7
  343. package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
  344. package/docs/guides/building-project-gate.md +706 -0
  345. package/docs/guides/callbacks.md +81 -22
  346. package/docs/guides/check-dependencies.md +41 -10
  347. package/docs/guides/collecting-project-files.md +7 -7
  348. package/docs/guides/command-check.md +155 -0
  349. package/docs/guides/data-boundaries.md +140 -0
  350. package/docs/guides/extending-check-lifecycle.md +77 -25
  351. package/docs/guides/finding-waivers.md +43 -1
  352. package/docs/guides/learned-scheduling.md +1 -1
  353. package/docs/guides/run-outputs.md +35 -9
  354. package/docs/guides/scheduling.md +15 -15
  355. package/docs/output.md +6 -5
  356. package/package.json +2 -1
  357. package/src/check/check.ts +332 -92
  358. package/src/check/flag-enablement.ts +76 -0
  359. package/src/check/handoff-provider-identity.ts +34 -0
  360. package/src/check/inherited-collection.ts +1 -1
  361. package/src/check/project-changes.ts +14 -0
  362. package/src/check/project-context.ts +11 -0
  363. package/src/check-settlement/facts.ts +1 -1
  364. package/src/check-settlement/record-store.ts +1 -1
  365. package/src/data-boundary/canonical-data.ts +36 -9
  366. package/src/data-boundary/canonical-json.ts +18 -1
  367. package/src/data-boundary/closed-values.ts +26 -6
  368. package/src/data-boundary/config-glob.ts +17 -0
  369. package/src/data-boundary/project-path.ts +21 -0
  370. package/src/index.ts +72 -11
  371. package/src/machine-output/v4/atomic-publication.ts +3 -1
  372. package/src/package-checks/check-authoring.ts +136 -0
  373. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
  374. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
  375. package/src/package-checks/command-check/command-check.ts +152 -0
  376. package/src/package-checks/command-check/contract.ts +168 -0
  377. package/src/package-checks/command-check/execution.ts +211 -0
  378. package/src/package-checks/command-check/options.ts +331 -0
  379. package/src/package-checks/command-check/transcript.ts +35 -0
  380. package/src/package-checks/duplicate-detection/default-check.ts +37 -6
  381. package/src/package-checks/duplicate-detection/execution.ts +2 -4
  382. package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
  383. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  384. package/src/package-checks/duplicate-detection/options.ts +6 -3
  385. package/src/package-checks/duplicate-detection/records.ts +1 -1
  386. package/src/package-checks/file-metrics/constructor.ts +29 -6
  387. package/src/package-checks/file-metrics/execution.ts +2 -4
  388. package/src/package-checks/file-metrics/finding-messages.ts +1 -1
  389. package/src/package-checks/file-metrics/options.ts +6 -3
  390. package/src/package-checks/file-metrics/records.ts +1 -1
  391. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  392. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  393. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  394. package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
  395. package/src/package-checks/function-metrics/analysis.ts +7 -2
  396. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
  397. package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
  398. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
  399. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
  400. package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
  401. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
  402. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
  403. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
  404. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
  405. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
  406. package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
  407. package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
  408. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
  409. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
  410. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
  411. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
  412. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
  413. package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
  414. package/src/package-checks/function-metrics/constructor.ts +30 -7
  415. package/src/package-checks/function-metrics/execution.ts +2 -4
  416. package/src/package-checks/function-metrics/finding-messages.ts +2 -2
  417. package/src/package-checks/function-metrics/measurement.ts +3 -1
  418. package/src/package-checks/function-metrics/options.ts +6 -3
  419. package/src/package-checks/function-metrics/records.ts +1 -1
  420. package/src/package-checks/host-environment/git.ts +11 -0
  421. package/src/package-checks/host-environment/path.ts +1 -20
  422. package/src/package-checks/host-environment/process/contract.ts +17 -9
  423. package/src/package-checks/host-environment/process/result.ts +48 -20
  424. package/src/package-checks/host-environment/process/runner.ts +8 -4
  425. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  426. package/src/package-checks/json-schema-validation/options.ts +4 -1
  427. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  428. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  429. package/src/package-checks/json-validation/default-check.ts +27 -6
  430. package/src/package-checks/json-validation/options.ts +4 -1
  431. package/src/package-checks/local-cache-options.ts +40 -0
  432. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  433. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  434. package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
  435. package/src/package-checks/markdown-link-validation/execution.ts +1 -1
  436. package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
  437. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  438. package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
  439. package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
  440. package/src/package-checks/markdown-link-validation/options.ts +6 -7
  441. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
  442. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  443. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  444. package/src/package-checks/markdown-lint/execution.ts +266 -0
  445. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  446. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  447. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  448. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  449. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  450. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  451. package/src/package-checks/markdown-lint/options.ts +82 -0
  452. package/src/package-checks/markdown-lint/records.ts +132 -0
  453. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  454. package/src/package-checks/project-files/collection.ts +38 -22
  455. package/src/package-checks/project-files/config-glob.ts +1 -17
  456. package/src/package-checks/project-files/configuration.ts +1 -1
  457. package/src/package-checks/project-files/gitlink-revision.ts +4 -6
  458. package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
  459. package/src/package-checks/project-files/public-collection.ts +1 -1
  460. package/src/package-checks/project-files/revision-paths.ts +3 -3
  461. package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
  462. package/src/package-checks/secret-detection/default-check.ts +29 -6
  463. package/src/package-checks/secret-detection/execution.ts +2 -2
  464. package/src/package-checks/secret-detection/input-preparation.ts +64 -7
  465. package/src/package-checks/secret-detection/options.ts +5 -2
  466. package/src/package-checks/secret-detection/records.ts +1 -1
  467. package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
  468. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  469. package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
  470. package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
  471. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  472. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
  473. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
  474. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
  475. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
  476. package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
  477. package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
  478. package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
  479. package/src/project-definition/check-tree/authoring.ts +15 -8
  480. package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
  481. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  482. package/src/project-definition/check-tree/materialization.ts +12 -8
  483. package/src/project-definition/check-tree/resolution.ts +13 -15
  484. package/src/project-definition/declarative-snapshot.ts +9 -2
  485. package/src/project-definition/project-changes.ts +112 -0
  486. package/src/project-definition/project-definition-validation.ts +58 -10
  487. package/src/project-definition/project-definition.ts +41 -68
  488. package/src/project-definition/scheduler-policy.ts +6 -3
  489. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
  490. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
  491. package/src/project-run/aggregation.ts +51 -74
  492. package/src/project-run/changes/git.ts +206 -0
  493. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  494. package/src/project-run/check-execution/callback.ts +3 -2
  495. package/src/project-run/check-execution/dependencies.ts +120 -6
  496. package/src/project-run/check-execution/execution-finalization.ts +6 -4
  497. package/src/project-run/check-execution/execution-settlement.ts +88 -29
  498. package/src/project-run/check-execution/flag-controls.ts +22 -8
  499. package/src/project-run/check-execution/lifecycle.ts +14 -6
  500. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  501. package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
  502. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  503. package/src/project-run/check-execution/resolved-checks.ts +40 -219
  504. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  505. package/src/project-run/check-execution/terminal-result.ts +108 -29
  506. package/src/project-run/completion/completion.ts +17 -3
  507. package/src/project-run/controls/contract.ts +6 -16
  508. package/src/project-run/controls/validation.ts +7 -60
  509. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  510. package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
  511. package/src/project-run/invocation/candidate.ts +28 -15
  512. package/src/project-run/invocation/candidates.ts +56 -0
  513. package/src/project-run/invocation/creation.ts +7 -3
  514. package/src/project-run/invocation/execution.ts +136 -0
  515. package/src/project-run/invocation/run.ts +15 -179
  516. package/src/project-run/invocation/scheduler.ts +13 -6
  517. package/src/project-run/outputs/status.ts +15 -15
  518. package/src/project-run/progress-rendering/presentation.ts +35 -13
  519. package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
  520. package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
  521. package/src/project-run/progress-rendering/renderer.ts +10 -4
  522. package/src/project-run/project-context.ts +8 -4
  523. package/src/project-run/result.ts +5 -5
  524. package/src/project-run/run.ts +1 -1
  525. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  526. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
  527. package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
  528. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
  529. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
  530. package/src/project-run/task-scheduler/execution-state.ts +4 -4
  531. package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
  532. package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
  533. package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
  534. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
  535. package/src/project-run/task-scheduler/scheduler.ts +23 -6
  536. package/types/check/check.d.ts +178 -67
  537. package/types/check/flag-enablement.d.ts +42 -0
  538. package/types/check/handoff-provider-identity.d.ts +12 -0
  539. package/types/check/project-changes.d.ts +13 -0
  540. package/types/check/project-context.d.ts +10 -0
  541. package/types/check-settlement/facts.d.ts +1 -1
  542. package/types/data-boundary/canonical-data.d.ts +28 -5
  543. package/types/data-boundary/canonical-json.d.ts +18 -1
  544. package/types/data-boundary/closed-values.d.ts +17 -1
  545. package/types/data-boundary/config-glob.d.ts +5 -0
  546. package/types/data-boundary/project-path.d.ts +4 -0
  547. package/types/index.d.ts +27 -11
  548. package/types/package-checks/check-authoring.d.ts +45 -0
  549. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
  550. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
  551. package/types/package-checks/command-check/command-check.d.ts +48 -0
  552. package/types/package-checks/command-check/contract.d.ts +108 -0
  553. package/types/package-checks/command-check/execution.d.ts +7 -0
  554. package/types/package-checks/command-check/options.d.ts +11 -0
  555. package/types/package-checks/command-check/transcript.d.ts +8 -0
  556. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  557. package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
  558. package/types/package-checks/duplicate-detection/options.d.ts +4 -3
  559. package/types/package-checks/duplicate-detection/records.d.ts +1 -1
  560. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  561. package/types/package-checks/file-metrics/options.d.ts +4 -3
  562. package/types/package-checks/file-metrics/records.d.ts +1 -1
  563. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  564. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  565. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
  566. package/types/package-checks/function-metrics/constructor.d.ts +5 -2
  567. package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
  568. package/types/package-checks/function-metrics/options.d.ts +4 -3
  569. package/types/package-checks/function-metrics/records.d.ts +1 -1
  570. package/types/package-checks/host-environment/git.d.ts +2 -0
  571. package/types/package-checks/host-environment/path.d.ts +1 -3
  572. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  573. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  574. package/types/package-checks/json-schema-validation/options.d.ts +2 -1
  575. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  576. package/types/package-checks/json-validation/options.d.ts +2 -1
  577. package/types/package-checks/local-cache-options.d.ts +9 -0
  578. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  579. package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
  580. package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
  581. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  582. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  583. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  584. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  585. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  586. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  587. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  588. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  589. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  590. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  591. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  592. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  593. package/types/package-checks/secret-detection/default-check.d.ts +4 -1
  594. package/types/package-checks/secret-detection/options.d.ts +3 -2
  595. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  596. package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
  597. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  598. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
  599. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
  600. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
  601. package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
  602. package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
  603. package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
  604. package/types/project-definition/check-tree/authoring.d.ts +5 -3
  605. package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
  606. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  607. package/types/project-definition/check-tree/resolution.d.ts +6 -4
  608. package/types/project-definition/declarative-snapshot.d.ts +4 -1
  609. package/types/project-definition/project-changes.d.ts +30 -0
  610. package/types/project-definition/project-definition.d.ts +15 -30
  611. package/types/project-definition/scheduler-policy.d.ts +3 -3
  612. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
  613. package/types/project-run/aggregation.d.ts +8 -6
  614. package/types/project-run/changes/git.d.ts +14 -0
  615. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  616. package/types/project-run/check-execution/dependencies.d.ts +3 -0
  617. package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
  618. package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
  619. package/types/project-run/check-execution/flag-controls.d.ts +1 -1
  620. package/types/project-run/check-execution/lifecycle.d.ts +9 -5
  621. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  622. package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
  623. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  624. package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
  625. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  626. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  627. package/types/project-run/completion/completion.d.ts +3 -1
  628. package/types/project-run/controls/contract.d.ts +6 -16
  629. package/types/project-run/invocation/candidates.d.ts +8 -0
  630. package/types/project-run/invocation/execution.d.ts +5 -0
  631. package/types/project-run/invocation/run.d.ts +2 -2
  632. package/types/project-run/outputs/status.d.ts +4 -4
  633. package/types/project-run/progress-rendering/presentation.d.ts +4 -3
  634. package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
  635. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
  636. package/types/project-run/progress-rendering/renderer.d.ts +4 -2
  637. package/types/project-run/project-context.d.ts +3 -3
  638. package/types/project-run/result.d.ts +3 -3
  639. package/types/project-run/run.d.ts +1 -1
  640. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  641. package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
  642. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
  643. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
  644. package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
  645. package/dist/esm/check/finding-presentation.mjs.map +0 -1
  646. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  647. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
  648. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
  649. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
  650. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
  651. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
  652. package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
  653. package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
  654. package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
  655. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  656. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  657. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  658. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
  659. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  660. /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
  661. /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
  662. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
  663. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
  664. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
  665. /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
  666. /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
  667. /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
  668. /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
  669. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
  670. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
@@ -0,0 +1,71 @@
1
+ /** Executes and settles a Check after its task-local preparation has admitted it. */
2
+ import { artifactDirectoryForCheck } from "../invocation/paths.mjs";
3
+ import { diagnosticTags, summarizeDiagnosticValue } from "../diagnostic-logging/logger.mjs";
4
+ import { executeCheckCallback } from "./callback.mjs";
5
+ import { createCheckDependencies } from "./dependencies.mjs";
6
+ import { checkIdentity } from "./execution-finalization.mjs";
7
+ import { recordSettledCheck, settleCallback } from "./execution-settlement.mjs";
8
+ export async function executeReadyCheck(input) {
9
+ const check = input.prepare.check;
10
+ const checkId = check.definition.checkId;
11
+ const scope = input.session.openCheckScope(checkId);
12
+ const identity = checkIdentity(check);
13
+ input.diagnosticLogger?.observe({
14
+ event: "check.started",
15
+ tags: diagnosticTags(`CHECK:${checkId}`, "EXECUTION", "STARTED"),
16
+ details: {
17
+ dependencies: check.dependsOn,
18
+ displayName: check.definition.displayName,
19
+ options: summarizeDiagnosticValue(check.options)
20
+ }
21
+ });
22
+ input.lifecycle?.started(Object.freeze({
23
+ checkId: identity.checkId,
24
+ displayName: identity.displayName,
25
+ omitQuietPassedRow: identity.omitQuietPassedRow
26
+ }));
27
+ const startedAt = input.clock.now();
28
+ const callback = await executeCheckCallback({
29
+ artifactDirectory: input.paths === undefined ? null : artifactDirectoryForCheck(input.paths, checkId),
30
+ check,
31
+ dependencies: createCheckDependencies({
32
+ checkId,
33
+ directDependsOnCheckIds: check.dependsOn,
34
+ diagnosticLogger: input.diagnosticLogger,
35
+ directRelationCheckIds: directRelationCheckIds(check),
36
+ handoffsByCheckId: input.handoffsByCheckId,
37
+ session: input.session
38
+ }),
39
+ ...(input.diagnosticLogger === undefined ? {} : { diagnosticLogger: input.diagnosticLogger }),
40
+ invocationId: input.invocationId,
41
+ project: input.project,
42
+ scope,
43
+ signal: input.signal
44
+ });
45
+ const settled = settleCallback({
46
+ callback,
47
+ checkId,
48
+ diagnosticLogger: input.diagnosticLogger,
49
+ handoff: check.handoff,
50
+ preparationMessages: check.preparationMessages,
51
+ scope,
52
+ state: input
53
+ });
54
+ recordSettledCheck({
55
+ check: identity,
56
+ durationMs: durationSince(startedAt, input.clock),
57
+ messages: settled.messages,
58
+ outcome: settled.outcome,
59
+ phase: "execution",
60
+ state: input
61
+ });
62
+ return settled.outcome.status === "passed";
63
+ }
64
+ function directRelationCheckIds(check) {
65
+ return Object.freeze([...new Set([...check.dependsOn, ...check.observes])].sort());
66
+ }
67
+ function durationSince(startedAt, clock) {
68
+ const elapsed = clock.now() - startedAt;
69
+ return Number.isFinite(elapsed) && elapsed >= 0 ? elapsed : 0;
70
+ }
71
+ //# sourceMappingURL=ready-check-execution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ready-check-execution.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/ready-check-execution.ts"],"names":[],"mappings":"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","sourcesContent":["/** Executes and settles a Check after its task-local preparation has admitted it. */\n\nimport type { CheckProjectContext } from \"../../check/check.ts\";\nimport type { NormalizedCheck } from \"../../project-definition/project-definition.ts\";\nimport { artifactDirectoryForCheck, type ResolvedInvocationPaths } from \"../invocation/paths.ts\";\nimport { diagnosticTags, summarizeDiagnosticValue } from \"../diagnostic-logging/logger.ts\";\nimport { executeCheckCallback } from \"./callback.ts\";\nimport { createCheckDependencies } from \"./dependencies.ts\";\nimport { checkIdentity } from \"./execution-finalization.ts\";\nimport {\n recordSettledCheck,\n settleCallback,\n type CheckExecutionState\n} from \"./execution-settlement.ts\";\nimport type { ReadyCheckPreparationResolution } from \"./preparation.ts\";\n\nexport type ReadyCheckExecutionInput = CheckExecutionState &\n Readonly<{\n readonly check: NormalizedCheck;\n readonly clock: Readonly<{ now(): number }>;\n readonly invocationId: string;\n readonly paths: ResolvedInvocationPaths | undefined;\n readonly prepare: ReadyCheckPreparationResolution;\n readonly project: CheckProjectContext;\n readonly signal: AbortSignal;\n }>;\n\nexport async function executeReadyCheck(input: ReadyCheckExecutionInput): Promise<boolean> {\n const check = input.prepare.check;\n const checkId = check.definition.checkId;\n const scope = input.session.openCheckScope(checkId);\n const identity = checkIdentity(check);\n input.diagnosticLogger?.observe({\n event: \"check.started\",\n tags: diagnosticTags(`CHECK:${checkId}`, \"EXECUTION\", \"STARTED\"),\n details: {\n dependencies: check.dependsOn,\n displayName: check.definition.displayName,\n options: summarizeDiagnosticValue(check.options)\n }\n });\n input.lifecycle?.started(\n Object.freeze({\n checkId: identity.checkId,\n displayName: identity.displayName,\n omitQuietPassedRow: identity.omitQuietPassedRow\n })\n );\n const startedAt = input.clock.now();\n const callback = await executeCheckCallback({\n artifactDirectory:\n input.paths === undefined ? null : artifactDirectoryForCheck(input.paths, checkId),\n check,\n dependencies: createCheckDependencies({\n checkId,\n directDependsOnCheckIds: check.dependsOn,\n diagnosticLogger: input.diagnosticLogger,\n directRelationCheckIds: directRelationCheckIds(check),\n handoffsByCheckId: input.handoffsByCheckId,\n session: input.session\n }),\n ...(input.diagnosticLogger === undefined ? {} : { diagnosticLogger: input.diagnosticLogger }),\n invocationId: input.invocationId,\n project: input.project,\n scope,\n signal: input.signal\n });\n const settled = settleCallback({\n callback,\n checkId,\n diagnosticLogger: input.diagnosticLogger,\n handoff: check.handoff,\n preparationMessages: check.preparationMessages,\n scope,\n state: input\n });\n recordSettledCheck({\n check: identity,\n durationMs: durationSince(startedAt, input.clock),\n messages: settled.messages,\n outcome: settled.outcome,\n phase: \"execution\",\n state: input\n });\n return settled.outcome.status === \"passed\";\n}\n\nfunction directRelationCheckIds(\n check: Pick<NormalizedCheck, \"dependsOn\" | \"observes\">\n): readonly string[] {\n return Object.freeze([...new Set([...check.dependsOn, ...check.observes])].sort());\n}\n\nfunction durationSince(startedAt: number, clock: Readonly<{ now(): number }>): number {\n const elapsed = clock.now() - startedAt;\n return Number.isFinite(elapsed) && elapsed >= 0 ? elapsed : 0;\n}\n"]}
@@ -1,22 +1,12 @@
1
1
  import { createCoreCheckSession } from "../../check-settlement/session.mjs";
2
- import { diagnosticTags, summarizeDiagnosticValue } from "../diagnostic-logging/logger.mjs";
3
2
  import { prepareTaskGraph } from "../task-scheduler/graph.mjs";
4
- import { runTaskGraph } from "../task-scheduler/scheduler.mjs";
5
- import { executeCheckCallback } from "./callback.mjs";
6
- import { artifactDirectoryForCheck } from "../invocation/paths.mjs";
7
3
  import { runWithCheckConsoleRouter } from "./console-capture.mjs";
8
- import { createCheckDependencies } from "./dependencies.mjs";
9
- import { CheckExecutionInvariantFailure, recordSettledCheck, settleCallback } from "./execution-settlement.mjs";
10
- import { checkIdentity, closeResolvedChecks, settleBlockedDependent, trustedFailure } from "./execution-finalization.mjs";
4
+ import { recordSettledCheck } from "./execution-settlement.mjs";
5
+ import { checkIdentity, closeResolvedChecks } from "./execution-finalization.mjs";
11
6
  import { planStaticCheckGraph } from "./plan.mjs";
12
7
  import { selectEffectiveCheckIds, resolveFlagControlSettlements } from "./flag-controls.mjs";
13
- import { prepareCheck } from "./preflight.mjs";
14
- const INERT_SIGNAL = new AbortController().signal;
8
+ import { runScheduledChecks } from "./scheduled-check-run.mjs";
15
9
  const NO_CHECK_MESSAGES = Object.freeze([]);
16
- const DIRECT_EXECUTION_INVOCATION_ID = "invocation/v1:direct-check-execution";
17
- const SYSTEM_MONOTONIC_CLOCK = Object.freeze({
18
- now: () => performance.now()
19
- });
20
10
  /**
21
11
  * Runs the already normalized executable Check collection through one generic
22
12
  * Task per Check. Graph validation happens before Core scopes or callbacks.
@@ -30,74 +20,39 @@ async function executePreparedResolvedChecks(input, effectiveCheckIds) {
30
20
  const state = createExecutionState({
31
21
  checks: input.checks,
32
22
  diagnosticLogger: input.diagnosticLogger,
33
- lifecycle: input.lifecycle
23
+ lifecycle: input.checkLifecycle
34
24
  });
35
- const flagControlSettlements = resolveFlagControlSettlements({
36
- checks: input.checks,
37
- diagnosticLogger: input.diagnosticLogger,
38
- effectiveCheckIds,
39
- signal: input.signal
40
- });
41
- for (const settlement of flagControlSettlements) {
42
- settleFlagControlOutcome(state, settlement);
43
- }
44
- input.lifecycle?.flagControlCompleted();
45
- const checksByCheckId = new Map(input.checks.map((check) => [check.definition.checkId, check]));
46
- let graphRun;
47
25
  try {
48
- graphRun = await runTaskGraph({
49
- graph: planStaticCheckGraph(input.checks, input.resourceCapacities),
50
- admissionPolicy: input.admissionPolicy,
51
- maxParallel: input.maxParallel,
52
- diagnosticLogger: input.schedulerDiagnosticLogger ?? input.diagnosticLogger,
53
- performanceDiagnostics: input.schedulerPerformanceDiagnostics,
54
- measurementHooks: input.schedulerMeasurementHooks,
55
- onMeasurementHookFailure: input.onSchedulerMeasurementHookFailure,
56
- onMeasurementHooksSettled: input.onSchedulerMeasurementHooksSettled,
57
- preAdmissionTaskResults: Object.freeze(flagControlSettlements.map((settlement) => Object.freeze({
58
- taskId: settlement.check.definition.checkId,
59
- value: false
60
- }))),
61
- signal: input.signal,
62
- isPrerequisiteSatisfied: (satisfied) => satisfied,
63
- onTaskBlocked: (task, dependencyIds) => {
64
- const check = checksByCheckId.get(task.id);
65
- if (check === undefined) {
66
- throw new CheckExecutionInvariantFailure("Blocked Task has no normalized Check");
67
- }
68
- settleBlockedDependent({ check, dependencyIds, state });
69
- },
70
- execute: (task, context) => {
71
- const check = checksByCheckId.get(task.id);
72
- if (check === undefined) {
73
- throw new CheckExecutionInvariantFailure("Task graph has no normalized Check");
74
- }
75
- return executeAdmittedCheck({
76
- ...state,
77
- check,
78
- clock: input.clock ?? SYSTEM_MONOTONIC_CLOCK,
79
- onAdmittedCheck: input.onAdmittedCheck,
80
- invocationId: input.invocationId ?? DIRECT_EXECUTION_INVOCATION_ID,
81
- paths: input.paths,
82
- project: input.project,
83
- signal: context.signal ?? INERT_SIGNAL
84
- });
85
- }
26
+ const flagControlSettlements = resolveFlagControlSettlements({
27
+ checks: input.checks,
28
+ ...(input.diagnosticLogger === undefined ? {} : { diagnosticLogger: input.diagnosticLogger }),
29
+ effectiveCheckIds,
30
+ signal: input.signal
31
+ });
32
+ for (const settlement of flagControlSettlements) {
33
+ settleFlagControlOutcome(state, settlement);
34
+ }
35
+ input.invocationLifecycle?.selectionSettled();
36
+ const graphRun = await runScheduledChecks({
37
+ execution: input,
38
+ flagControlSettlements,
39
+ state
40
+ });
41
+ return closeResolvedChecks({
42
+ allChecks: input.checks,
43
+ effectiveCheckIds,
44
+ graphRun,
45
+ state
86
46
  });
87
47
  }
88
- catch (error) {
89
- throw trustedFailure(error);
48
+ finally {
49
+ state.handoffsByCheckId.clear();
90
50
  }
91
- return closeResolvedChecks({
92
- allChecks: input.checks,
93
- effectiveCheckIds,
94
- graphRun,
95
- state
96
- });
97
51
  }
98
52
  function createExecutionState(input) {
99
53
  return {
100
54
  diagnosticLogger: input.diagnosticLogger,
55
+ handoffsByCheckId: new Map(),
101
56
  settledFactsByCheckId: new Map(),
102
57
  lifecycle: input.lifecycle,
103
58
  session: createCoreCheckSession(input.checks.map(({ definition }) => Object.freeze({ definition })))
@@ -115,96 +70,4 @@ function settleFlagControlOutcome(state, settlement) {
115
70
  state
116
71
  });
117
72
  }
118
- function settleBlockedPreflight(state, preflight) {
119
- const scope = state.session.openCheckScope(preflight.check.definition.checkId);
120
- const outcome = scope.settleProduct(preflight.outcome);
121
- recordSettledCheck({
122
- check: checkIdentity(preflight.check),
123
- durationMs: null,
124
- messages: preflight.check.preflightMessages,
125
- outcome,
126
- phase: "preflight",
127
- state
128
- });
129
- }
130
- async function executeAdmittedCheck(input) {
131
- observeAdmittedCheck(input);
132
- const preflight = await prepareCheck({
133
- check: input.check,
134
- diagnosticLogger: input.diagnosticLogger,
135
- signal: input.signal
136
- });
137
- if (preflight.kind === "blocked") {
138
- settleBlockedPreflight(input, preflight);
139
- return false;
140
- }
141
- return executeReadyCheck({ ...input, preflight });
142
- }
143
- /** Diagnostic observation belongs to the invocation; it cannot revise admitted Task facts. */
144
- function observeAdmittedCheck(input) {
145
- try {
146
- input.onAdmittedCheck?.(input.check);
147
- }
148
- catch {
149
- // Learned diagnostic output is best-effort and has no execution consequence.
150
- }
151
- }
152
- async function executeReadyCheck(input) {
153
- const check = input.preflight.check;
154
- const checkId = check.definition.checkId;
155
- const scope = input.session.openCheckScope(checkId);
156
- const identity = checkIdentity(check);
157
- input.diagnosticLogger?.observe({
158
- event: "check.started",
159
- tags: diagnosticTags(`CHECK:${checkId}`, "EXECUTION", "STARTED"),
160
- details: {
161
- dependencies: check.dependsOn,
162
- displayName: check.definition.displayName,
163
- options: summarizeDiagnosticValue(check.options)
164
- }
165
- });
166
- emitStarted(input.lifecycle, identity);
167
- const startedAt = input.clock.now();
168
- const callback = await executeCheckCallback({
169
- artifactDirectory: input.paths === undefined ? null : artifactDirectoryForCheck(input.paths, checkId),
170
- check,
171
- dependencies: createCheckDependencies({
172
- checkId,
173
- diagnosticLogger: input.diagnosticLogger,
174
- directRelationCheckIds: directRelationCheckIds(check),
175
- session: input.session
176
- }),
177
- diagnosticLogger: input.diagnosticLogger,
178
- invocationId: input.invocationId,
179
- project: input.project,
180
- scope,
181
- signal: input.signal
182
- });
183
- const settled = settleCallback({
184
- callback,
185
- checkId,
186
- diagnosticLogger: input.diagnosticLogger,
187
- preflightMessages: check.preflightMessages,
188
- scope
189
- });
190
- recordSettledCheck({
191
- check: identity,
192
- durationMs: durationSince(startedAt, input.clock),
193
- messages: settled.messages,
194
- outcome: settled.outcome,
195
- phase: "execution",
196
- state: input
197
- });
198
- return settled.outcome.status === "passed";
199
- }
200
- function directRelationCheckIds(check) {
201
- return Object.freeze([...new Set([...check.dependsOn, ...check.observes])].sort());
202
- }
203
- function emitStarted(lifecycle, check) {
204
- lifecycle?.started(Object.freeze({ checkId: check.checkId, displayName: check.displayName }));
205
- }
206
- function durationSince(startedAt, clock) {
207
- const elapsed = clock.now() - startedAt;
208
- return Number.isFinite(elapsed) && elapsed >= 0 ? elapsed : 0;
209
- }
210
73
  //# sourceMappingURL=resolved-checks.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolved-checks.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/resolved-checks.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckMessage, CheckProjectContext } from \"../../check/check.ts\";\nimport type {\n NormalizedCheck,\n SchedulerMeasurementHook\n} from \"../../project-definition/project-definition.ts\";\nimport type { ResourceUnitMapping } from \"../../project-definition/resource-unit-mapping.ts\";\nimport { createCoreCheckSession } from \"../../check-settlement/session.ts\";\nimport {\n diagnosticTags,\n summarizeDiagnosticValue,\n type DiagnosticLogger\n} from \"../diagnostic-logging/logger.ts\";\nimport { prepareTaskGraph } from \"../task-scheduler/graph.ts\";\nimport type { AdmissionSelectionPolicy } from \"../task-scheduler/admission-selection-policy.ts\";\nimport { runTaskGraph } from \"../task-scheduler/scheduler.ts\";\nimport type { SchedulerPerformanceDiagnosticsInput } from \"../task-scheduler/measurement/diagnostics.ts\";\nimport { executeCheckCallback } from \"./callback.ts\";\nimport { artifactDirectoryForCheck, type ResolvedInvocationPaths } from \"../invocation/paths.ts\";\nimport { runWithCheckConsoleRouter } from \"./console-capture.ts\";\nimport { createCheckDependencies } from \"./dependencies.ts\";\nimport {\n CheckExecutionInvariantFailure,\n recordSettledCheck,\n settleCallback,\n type CheckExecutionState,\n type CheckIdentity,\n type SettledCheckFacts\n} from \"./execution-settlement.ts\";\nimport {\n checkIdentity,\n closeResolvedChecks,\n settleBlockedDependent,\n trustedFailure\n} from \"./execution-finalization.ts\";\nimport type { CheckExecutionLifecycle } from \"./lifecycle.ts\";\nimport { planStaticCheckGraph } from \"./plan.ts\";\nimport {\n selectEffectiveCheckIds,\n resolveFlagControlSettlements,\n type FlagControlSettlement\n} from \"./flag-controls.ts\";\nimport {\n prepareCheck,\n type CheckPreflightResolution,\n type ReadyCheckPreflightResolution\n} from \"./preflight.ts\";\nimport type { ResolvedCheckExecution } from \"./resolved-execution-result.ts\";\n\nconst INERT_SIGNAL = new AbortController().signal;\nconst NO_CHECK_MESSAGES: readonly CheckMessage[] = Object.freeze([]);\nconst DIRECT_EXECUTION_INVOCATION_ID = \"invocation/v1:direct-check-execution\";\nconst SYSTEM_MONOTONIC_CLOCK: CheckExecutionClock = Object.freeze({\n now: () => performance.now()\n});\n\n/** Package-private monotonic clock seam for execution accounting. */\nexport type CheckExecutionClock = Readonly<{ now(): number }>;\n\ninterface ExecuteCheckInput extends CheckExecutionState {\n readonly check: NormalizedCheck;\n readonly clock: CheckExecutionClock;\n readonly onAdmittedCheck: ((check: NormalizedCheck) => void) | undefined;\n readonly invocationId: string;\n readonly paths: ResolvedInvocationPaths | undefined;\n readonly project: CheckProjectContext;\n readonly signal: AbortSignal;\n}\n\ntype ResolvedCheckExecutionInput = Readonly<{\n /** Complete prepared private policy handoff; public policy dispatch stays outside execution. */\n readonly admissionPolicy?: AdmissionSelectionPolicy;\n readonly checks: readonly NormalizedCheck[];\n readonly maxParallel: number;\n readonly resourceCapacities?: ResourceUnitMapping;\n /** Product invocation identity;private direct-execution tests 使用稳定 fallback。 */\n readonly invocationId?: string;\n /** 冻结的 invocation paths;仅 private direct-execution tests 可以省略。 */\n readonly paths?: ResolvedInvocationPaths;\n readonly project: CheckProjectContext;\n readonly signal: AbortSignal | undefined;\n readonly clock?: CheckExecutionClock;\n /** Core-owner Check lifecycle channel. */\n readonly diagnosticLogger?: DiagnosticLogger;\n /** Scheduler-owner decision and summary channel. */\n readonly schedulerDiagnosticLogger?: DiagnosticLogger;\n /** Explicit enabled-only diagnostics handoff from the invocation output owner. */\n readonly schedulerPerformanceDiagnostics?: SchedulerPerformanceDiagnosticsInput;\n readonly schedulerMeasurementHooks?: readonly SchedulerMeasurementHook[];\n readonly onSchedulerMeasurementHookFailure?: () => void;\n readonly onSchedulerMeasurementHooksSettled?: () => void;\n readonly lifecycle?: CheckExecutionLifecycle;\n /** Provider-owned bounded learned admission diagnostics, delivered by invocation. */\n readonly onAdmittedCheck?: (check: NormalizedCheck) => void;\n}>;\n\n/**\n * Runs the already normalized executable Check collection through one generic\n * Task per Check. Graph validation happens before Core scopes or callbacks.\n */\nexport async function executeResolvedChecks(\n input: ResolvedCheckExecutionInput\n): Promise<ResolvedCheckExecution> {\n prepareTaskGraph(planStaticCheckGraph(input.checks, input.resourceCapacities), input.maxParallel);\n const effectiveCheckIds = selectEffectiveCheckIds(input.checks, input.project.flags);\n return runWithCheckConsoleRouter(() => executePreparedResolvedChecks(input, effectiveCheckIds));\n}\n\nasync function executePreparedResolvedChecks(\n input: ResolvedCheckExecutionInput,\n effectiveCheckIds: readonly string[]\n): Promise<ResolvedCheckExecution> {\n const state = createExecutionState({\n checks: input.checks,\n diagnosticLogger: input.diagnosticLogger,\n lifecycle: input.lifecycle\n });\n const flagControlSettlements = resolveFlagControlSettlements({\n checks: input.checks,\n diagnosticLogger: input.diagnosticLogger,\n effectiveCheckIds,\n signal: input.signal\n });\n for (const settlement of flagControlSettlements) {\n settleFlagControlOutcome(state, settlement);\n }\n input.lifecycle?.flagControlCompleted();\n const checksByCheckId = new Map(\n input.checks.map((check) => [check.definition.checkId, check] as const)\n );\n let graphRun: Awaited<ReturnType<typeof runTaskGraph<boolean>>>;\n try {\n graphRun = await runTaskGraph<boolean>({\n graph: planStaticCheckGraph(input.checks, input.resourceCapacities),\n admissionPolicy: input.admissionPolicy,\n maxParallel: input.maxParallel,\n diagnosticLogger: input.schedulerDiagnosticLogger ?? input.diagnosticLogger,\n performanceDiagnostics: input.schedulerPerformanceDiagnostics,\n measurementHooks: input.schedulerMeasurementHooks,\n onMeasurementHookFailure: input.onSchedulerMeasurementHookFailure,\n onMeasurementHooksSettled: input.onSchedulerMeasurementHooksSettled,\n preAdmissionTaskResults: Object.freeze(\n flagControlSettlements.map((settlement) =>\n Object.freeze({\n taskId: settlement.check.definition.checkId,\n value: false\n })\n )\n ),\n signal: input.signal,\n isPrerequisiteSatisfied: (satisfied) => satisfied,\n onTaskBlocked: (task, dependencyIds) => {\n const check = checksByCheckId.get(task.id);\n if (check === undefined) {\n throw new CheckExecutionInvariantFailure(\"Blocked Task has no normalized Check\");\n }\n settleBlockedDependent({ check, dependencyIds, state });\n },\n execute: (task, context) => {\n const check = checksByCheckId.get(task.id);\n if (check === undefined) {\n throw new CheckExecutionInvariantFailure(\"Task graph has no normalized Check\");\n }\n return executeAdmittedCheck({\n ...state,\n check,\n clock: input.clock ?? SYSTEM_MONOTONIC_CLOCK,\n onAdmittedCheck: input.onAdmittedCheck,\n invocationId: input.invocationId ?? DIRECT_EXECUTION_INVOCATION_ID,\n paths: input.paths,\n project: input.project,\n signal: context.signal ?? INERT_SIGNAL\n });\n }\n });\n } catch (error) {\n throw trustedFailure(error);\n }\n\n return closeResolvedChecks({\n allChecks: input.checks,\n effectiveCheckIds,\n graphRun,\n state\n });\n}\n\nfunction createExecutionState(\n input: Readonly<{\n readonly checks: readonly NormalizedCheck[];\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly lifecycle: CheckExecutionLifecycle | undefined;\n }>\n): CheckExecutionState {\n return {\n diagnosticLogger: input.diagnosticLogger,\n settledFactsByCheckId: new Map<string, SettledCheckFacts>(),\n lifecycle: input.lifecycle,\n session: createCoreCheckSession(\n input.checks.map(({ definition }) => Object.freeze({ definition }))\n )\n };\n}\n\nfunction settleFlagControlOutcome(\n state: CheckExecutionState,\n settlement: FlagControlSettlement\n): void {\n const scope = state.session.openCheckScope(settlement.check.definition.checkId);\n const outcome = scope.settleProduct(settlement.outcome);\n recordSettledCheck({\n check: checkIdentity(settlement.check),\n durationMs: null,\n messages: NO_CHECK_MESSAGES,\n outcome,\n phase: \"control\",\n state\n });\n}\n\nfunction settleBlockedPreflight(\n state: CheckExecutionState,\n preflight: Extract<CheckPreflightResolution, { readonly kind: \"blocked\" }>\n): void {\n const scope = state.session.openCheckScope(preflight.check.definition.checkId);\n const outcome = scope.settleProduct(preflight.outcome);\n recordSettledCheck({\n check: checkIdentity(preflight.check),\n durationMs: null,\n messages: preflight.check.preflightMessages,\n outcome,\n phase: \"preflight\",\n state\n });\n}\n\nasync function executeAdmittedCheck(input: ExecuteCheckInput): Promise<boolean> {\n observeAdmittedCheck(input);\n const preflight = await prepareCheck({\n check: input.check,\n diagnosticLogger: input.diagnosticLogger,\n signal: input.signal\n });\n if (preflight.kind === \"blocked\") {\n settleBlockedPreflight(input, preflight);\n return false;\n }\n return executeReadyCheck({ ...input, preflight });\n}\n\n/** Diagnostic observation belongs to the invocation; it cannot revise admitted Task facts. */\nfunction observeAdmittedCheck(input: ExecuteCheckInput): void {\n try {\n input.onAdmittedCheck?.(input.check);\n } catch {\n // Learned diagnostic output is best-effort and has no execution consequence.\n }\n}\n\nasync function executeReadyCheck(\n input: ExecuteCheckInput & Readonly<{ readonly preflight: ReadyCheckPreflightResolution }>\n): Promise<boolean> {\n const check = input.preflight.check;\n const checkId = check.definition.checkId;\n const scope = input.session.openCheckScope(checkId);\n const identity = checkIdentity(check);\n input.diagnosticLogger?.observe({\n event: \"check.started\",\n tags: diagnosticTags(`CHECK:${checkId}`, \"EXECUTION\", \"STARTED\"),\n details: {\n dependencies: check.dependsOn,\n displayName: check.definition.displayName,\n options: summarizeDiagnosticValue(check.options)\n }\n });\n emitStarted(input.lifecycle, identity);\n const startedAt = input.clock.now();\n const callback = await executeCheckCallback({\n artifactDirectory:\n input.paths === undefined ? null : artifactDirectoryForCheck(input.paths, checkId),\n check,\n dependencies: createCheckDependencies({\n checkId,\n diagnosticLogger: input.diagnosticLogger,\n directRelationCheckIds: directRelationCheckIds(check),\n session: input.session\n }),\n diagnosticLogger: input.diagnosticLogger,\n invocationId: input.invocationId,\n project: input.project,\n scope,\n signal: input.signal\n });\n const settled = settleCallback({\n callback,\n checkId,\n diagnosticLogger: input.diagnosticLogger,\n preflightMessages: check.preflightMessages,\n scope\n });\n recordSettledCheck({\n check: identity,\n durationMs: durationSince(startedAt, input.clock),\n messages: settled.messages,\n outcome: settled.outcome,\n phase: \"execution\",\n state: input\n });\n return settled.outcome.status === \"passed\";\n}\n\nfunction directRelationCheckIds(\n check: Pick<NormalizedCheck, \"dependsOn\" | \"observes\">\n): readonly string[] {\n return Object.freeze([...new Set([...check.dependsOn, ...check.observes])].sort());\n}\n\nfunction emitStarted(lifecycle: CheckExecutionLifecycle | undefined, check: CheckIdentity): void {\n lifecycle?.started(Object.freeze({ checkId: check.checkId, displayName: check.displayName }));\n}\n\nfunction durationSince(startedAt: number, clock: CheckExecutionClock): number {\n const elapsed = clock.now() - startedAt;\n return Number.isFinite(elapsed) && elapsed >= 0 ? elapsed : 0;\n}\n"]}
1
+ {"version":3,"file":"resolved-checks.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/resolved-checks.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAGnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAE9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI9D,MAAM,iBAAiB,GAA4B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAiCrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAkC;IAElC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAClG,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrF,OAAO,yBAAyB,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,KAAkC,EAClC,iBAAoC;IAEpC,MAAM,KAAK,GAAG,oBAAoB,CAAC;QACjC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,SAAS,EAAE,KAAK,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;YAC3D,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC7F,iBAAiB;YACjB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,KAAK,MAAM,UAAU,IAAI,sBAAsB,EAAE,CAAC;YAChD,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;YACxC,SAAS,EAAE,KAAK;YAChB,sBAAsB;YACtB,KAAK;SACN,CAAC,CAAC;QAEH,OAAO,mBAAmB,CAAC;YACzB,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,iBAAiB;YACjB,QAAQ;YACR,KAAK;SACN,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAIE;IAEF,OAAO;QACL,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB,EAAE,IAAI,GAAG,EAAE;QAC5B,qBAAqB,EAAE,IAAI,GAAG,EAA6B;QAC3D,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,sBAAsB,CAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CACpE;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA0B,EAC1B,UAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxD,kBAAkB,CAAC;QACjB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;QACtC,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO;QACP,KAAK,EAAE,SAAS;QAChB,KAAK;KACN,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { CheckMessage, CheckProjectContext } from \"../../check/check.ts\";\nimport type {\n NormalizedCheck,\n SchedulerTerminalEffect\n} from \"../../project-definition/project-definition.ts\";\nimport type { ResourceUnitMapping } from \"../../project-definition/resource-unit-mapping.ts\";\nimport { createCoreCheckSession } from \"../../check-settlement/session.ts\";\nimport type { DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\nimport type { AdmissionSelectionPolicy } from \"../task-scheduler/admission-selection-policy.ts\";\nimport { prepareTaskGraph } from \"../task-scheduler/graph.ts\";\nimport type { SchedulerPerformanceDiagnosticsInput } from \"../task-scheduler/measurement/diagnostics.ts\";\nimport type { ResolvedInvocationPaths } from \"../invocation/paths.ts\";\nimport { runWithCheckConsoleRouter } from \"./console-capture.ts\";\nimport {\n recordSettledCheck,\n type CheckExecutionState,\n type SettledCheckFacts\n} from \"./execution-settlement.ts\";\nimport { checkIdentity, closeResolvedChecks } from \"./execution-finalization.ts\";\nimport type { CheckExecutionLifecycle, InvocationLifecycle } from \"./lifecycle.ts\";\nimport { planStaticCheckGraph } from \"./plan.ts\";\nimport {\n selectEffectiveCheckIds,\n resolveFlagControlSettlements,\n type FlagControlSettlement\n} from \"./flag-controls.ts\";\nimport { runScheduledChecks } from \"./scheduled-check-run.ts\";\nimport type { CheckExecutionClock } from \"./admitted-check-execution.ts\";\nimport type { ResolvedCheckExecution } from \"./resolved-execution-result.ts\";\n\nconst NO_CHECK_MESSAGES: readonly CheckMessage[] = Object.freeze([]);\n\n/** Package-private monotonic clock seam for execution accounting. */\nexport type { CheckExecutionClock } from \"./admitted-check-execution.ts\";\n\nexport type ResolvedCheckExecutionInput = Readonly<{\n /** Complete prepared private policy handoff; public policy dispatch stays outside execution. */\n readonly admissionPolicy?: AdmissionSelectionPolicy;\n readonly checks: readonly NormalizedCheck[];\n readonly maxParallel: number;\n readonly resourceCapacities?: ResourceUnitMapping;\n /** Product invocation identity;private direct-execution tests 使用稳定 fallback。 */\n readonly invocationId?: string;\n /** 冻结的 invocation paths;仅 private direct-execution tests 可以省略。 */\n readonly paths?: ResolvedInvocationPaths;\n readonly project: CheckProjectContext;\n readonly signal: AbortSignal | undefined;\n readonly clock?: CheckExecutionClock;\n /** Core-owner Check lifecycle channel. */\n readonly diagnosticLogger?: DiagnosticLogger;\n /** Scheduler-owner decision and summary channel. */\n readonly schedulerDiagnosticLogger?: DiagnosticLogger;\n /** Explicit enabled-only diagnostics handoff from the invocation output owner. */\n readonly schedulerPerformanceDiagnostics?: SchedulerPerformanceDiagnosticsInput;\n readonly schedulerTerminalEffects?: readonly SchedulerTerminalEffect[];\n readonly onSchedulerTerminalEffectFailure?: () => void;\n readonly onSchedulerTerminalEffectsSettled?: () => void;\n readonly checkLifecycle?: CheckExecutionLifecycle;\n readonly invocationLifecycle?: InvocationLifecycle;\n /** Provider-owned bounded learned admission diagnostics, delivered by invocation. */\n readonly onAdmittedCheck?: (check: NormalizedCheck) => void;\n}>;\n\n/**\n * Runs the already normalized executable Check collection through one generic\n * Task per Check. Graph validation happens before Core scopes or callbacks.\n */\nexport async function executeResolvedChecks(\n input: ResolvedCheckExecutionInput\n): Promise<ResolvedCheckExecution> {\n prepareTaskGraph(planStaticCheckGraph(input.checks, input.resourceCapacities), input.maxParallel);\n const effectiveCheckIds = selectEffectiveCheckIds(input.checks, input.project.flags);\n return runWithCheckConsoleRouter(() => executePreparedResolvedChecks(input, effectiveCheckIds));\n}\n\nasync function executePreparedResolvedChecks(\n input: ResolvedCheckExecutionInput,\n effectiveCheckIds: readonly string[]\n): Promise<ResolvedCheckExecution> {\n const state = createExecutionState({\n checks: input.checks,\n diagnosticLogger: input.diagnosticLogger,\n lifecycle: input.checkLifecycle\n });\n try {\n const flagControlSettlements = resolveFlagControlSettlements({\n checks: input.checks,\n ...(input.diagnosticLogger === undefined ? {} : { diagnosticLogger: input.diagnosticLogger }),\n effectiveCheckIds,\n signal: input.signal\n });\n for (const settlement of flagControlSettlements) {\n settleFlagControlOutcome(state, settlement);\n }\n input.invocationLifecycle?.selectionSettled();\n const graphRun = await runScheduledChecks({\n execution: input,\n flagControlSettlements,\n state\n });\n\n return closeResolvedChecks({\n allChecks: input.checks,\n effectiveCheckIds,\n graphRun,\n state\n });\n } finally {\n state.handoffsByCheckId.clear();\n }\n}\n\nfunction createExecutionState(\n input: Readonly<{\n readonly checks: readonly NormalizedCheck[];\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly lifecycle: CheckExecutionLifecycle | undefined;\n }>\n): CheckExecutionState {\n return {\n diagnosticLogger: input.diagnosticLogger,\n handoffsByCheckId: new Map(),\n settledFactsByCheckId: new Map<string, SettledCheckFacts>(),\n lifecycle: input.lifecycle,\n session: createCoreCheckSession(\n input.checks.map(({ definition }) => Object.freeze({ definition }))\n )\n };\n}\n\nfunction settleFlagControlOutcome(\n state: CheckExecutionState,\n settlement: FlagControlSettlement\n): void {\n const scope = state.session.openCheckScope(settlement.check.definition.checkId);\n const outcome = scope.settleProduct(settlement.outcome);\n recordSettledCheck({\n check: checkIdentity(settlement.check),\n durationMs: null,\n messages: NO_CHECK_MESSAGES,\n outcome,\n phase: \"control\",\n state\n });\n}\n"]}
@@ -0,0 +1,79 @@
1
+ /** Maps normalized Checks into the Scheduler's opaque Task execute contract. */
2
+ import { runTaskGraph } from "../task-scheduler/scheduler.mjs";
3
+ import { CheckExecutionInvariantFailure } from "./execution-settlement.mjs";
4
+ import { settleBlockedDependent, trustedFailure } from "./execution-finalization.mjs";
5
+ import { planStaticCheckGraph } from "./plan.mjs";
6
+ import { executeAdmittedCheck } from "./admitted-check-execution.mjs";
7
+ const INERT_SIGNAL = new AbortController().signal;
8
+ const DIRECT_EXECUTION_INVOCATION_ID = "invocation/v1:direct-check-execution";
9
+ const SYSTEM_MONOTONIC_CLOCK = Object.freeze({
10
+ now: () => performance.now()
11
+ });
12
+ export async function runScheduledChecks(input) {
13
+ try {
14
+ return await runTaskGraph(schedulerOptionsFor(input));
15
+ }
16
+ catch (error) {
17
+ throw trustedFailure(error);
18
+ }
19
+ }
20
+ function schedulerOptionsFor(input) {
21
+ const execution = input.execution;
22
+ const checksByCheckId = new Map(execution.checks.map((check) => [check.definition.checkId, check]));
23
+ const schedulerDiagnosticLogger = execution.schedulerDiagnosticLogger ?? execution.diagnosticLogger;
24
+ return {
25
+ graph: planStaticCheckGraph(execution.checks, execution.resourceCapacities),
26
+ ...(execution.admissionPolicy === undefined
27
+ ? {}
28
+ : { admissionPolicy: execution.admissionPolicy }),
29
+ maxParallel: execution.maxParallel,
30
+ ...(schedulerDiagnosticLogger === undefined
31
+ ? {}
32
+ : { diagnosticLogger: schedulerDiagnosticLogger }),
33
+ ...(execution.schedulerPerformanceDiagnostics === undefined
34
+ ? {}
35
+ : { performanceDiagnostics: execution.schedulerPerformanceDiagnostics }),
36
+ ...(execution.schedulerTerminalEffects === undefined
37
+ ? {}
38
+ : { terminalEffects: execution.schedulerTerminalEffects }),
39
+ ...(execution.onSchedulerTerminalEffectFailure === undefined
40
+ ? {}
41
+ : { onTerminalEffectFailure: execution.onSchedulerTerminalEffectFailure }),
42
+ ...(execution.onSchedulerTerminalEffectsSettled === undefined
43
+ ? {}
44
+ : { onTerminalEffectsSettled: execution.onSchedulerTerminalEffectsSettled }),
45
+ preAdmissionTaskResults: Object.freeze(input.flagControlSettlements.map((settlement) => Object.freeze({ taskId: settlement.check.definition.checkId, value: false }))),
46
+ ...(execution.signal === undefined ? {} : { signal: execution.signal }),
47
+ isPrerequisiteSatisfied: (satisfied) => satisfied,
48
+ onTaskBlocked: (task, dependencyIds) => {
49
+ settleBlockedDependent({
50
+ check: requiredNormalizedCheck(checksByCheckId, task, "Blocked Task"),
51
+ dependencyIds,
52
+ state: input.state
53
+ });
54
+ },
55
+ execute: (task, context) => executeAdmittedCheck({
56
+ ...input.state,
57
+ ...admittedExecutionFacts(execution),
58
+ check: requiredNormalizedCheck(checksByCheckId, task, "Task graph"),
59
+ signal: context.signal ?? INERT_SIGNAL
60
+ })
61
+ };
62
+ }
63
+ function requiredNormalizedCheck(checksByCheckId, task, owner) {
64
+ const check = checksByCheckId.get(task.id);
65
+ if (check === undefined) {
66
+ throw new CheckExecutionInvariantFailure(`${owner} has no normalized Check`);
67
+ }
68
+ return check;
69
+ }
70
+ function admittedExecutionFacts(execution) {
71
+ return {
72
+ clock: execution.clock ?? SYSTEM_MONOTONIC_CLOCK,
73
+ onAdmittedCheck: execution.onAdmittedCheck,
74
+ invocationId: execution.invocationId ?? DIRECT_EXECUTION_INVOCATION_ID,
75
+ paths: execution.paths,
76
+ project: execution.project
77
+ };
78
+ }
79
+ //# sourceMappingURL=scheduled-check-run.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-check-run.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/scheduled-check-run.ts"],"names":[],"mappings":"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","sourcesContent":["/** Maps normalized Checks into the Scheduler's opaque Task execute contract. */\n\nimport type { NormalizedCheck } from \"../../project-definition/project-definition.ts\";\nimport { runTaskGraph, type RunTaskGraphOptions } from \"../task-scheduler/scheduler.ts\";\nimport {\n CheckExecutionInvariantFailure,\n type CheckExecutionState\n} from \"./execution-settlement.ts\";\nimport { settleBlockedDependent, trustedFailure } from \"./execution-finalization.ts\";\nimport type { FlagControlSettlement } from \"./flag-controls.ts\";\nimport { planStaticCheckGraph } from \"./plan.ts\";\nimport {\n executeAdmittedCheck,\n type AdmittedCheckExecutionInput,\n type CheckExecutionClock\n} from \"./admitted-check-execution.ts\";\nimport type { ResolvedCheckExecutionInput } from \"./resolved-checks.ts\";\n\nconst INERT_SIGNAL = new AbortController().signal;\nconst DIRECT_EXECUTION_INVOCATION_ID = \"invocation/v1:direct-check-execution\";\nconst SYSTEM_MONOTONIC_CLOCK: CheckExecutionClock = Object.freeze({\n now: () => performance.now()\n});\n\nexport async function runScheduledChecks(\n input: Readonly<{\n readonly execution: ResolvedCheckExecutionInput;\n readonly flagControlSettlements: readonly FlagControlSettlement[];\n readonly state: CheckExecutionState;\n }>\n): Promise<Awaited<ReturnType<typeof runTaskGraph<boolean>>>> {\n try {\n return await runTaskGraph(schedulerOptionsFor(input));\n } catch (error) {\n throw trustedFailure(error);\n }\n}\n\nfunction schedulerOptionsFor(\n input: Readonly<{\n readonly execution: ResolvedCheckExecutionInput;\n readonly flagControlSettlements: readonly FlagControlSettlement[];\n readonly state: CheckExecutionState;\n }>\n): RunTaskGraphOptions<boolean> {\n const execution = input.execution;\n const checksByCheckId = new Map(\n execution.checks.map((check) => [check.definition.checkId, check] as const)\n );\n const schedulerDiagnosticLogger =\n execution.schedulerDiagnosticLogger ?? execution.diagnosticLogger;\n return {\n graph: planStaticCheckGraph(execution.checks, execution.resourceCapacities),\n ...(execution.admissionPolicy === undefined\n ? {}\n : { admissionPolicy: execution.admissionPolicy }),\n maxParallel: execution.maxParallel,\n ...(schedulerDiagnosticLogger === undefined\n ? {}\n : { diagnosticLogger: schedulerDiagnosticLogger }),\n ...(execution.schedulerPerformanceDiagnostics === undefined\n ? {}\n : { performanceDiagnostics: execution.schedulerPerformanceDiagnostics }),\n ...(execution.schedulerTerminalEffects === undefined\n ? {}\n : { terminalEffects: execution.schedulerTerminalEffects }),\n ...(execution.onSchedulerTerminalEffectFailure === undefined\n ? {}\n : { onTerminalEffectFailure: execution.onSchedulerTerminalEffectFailure }),\n ...(execution.onSchedulerTerminalEffectsSettled === undefined\n ? {}\n : { onTerminalEffectsSettled: execution.onSchedulerTerminalEffectsSettled }),\n preAdmissionTaskResults: Object.freeze(\n input.flagControlSettlements.map((settlement) =>\n Object.freeze({ taskId: settlement.check.definition.checkId, value: false })\n )\n ),\n ...(execution.signal === undefined ? {} : { signal: execution.signal }),\n isPrerequisiteSatisfied: (satisfied) => satisfied,\n onTaskBlocked: (task, dependencyIds) => {\n settleBlockedDependent({\n check: requiredNormalizedCheck(checksByCheckId, task, \"Blocked Task\"),\n dependencyIds,\n state: input.state\n });\n },\n execute: (task, context) =>\n executeAdmittedCheck({\n ...input.state,\n ...admittedExecutionFacts(execution),\n check: requiredNormalizedCheck(checksByCheckId, task, \"Task graph\"),\n signal: context.signal ?? INERT_SIGNAL\n })\n };\n}\n\nfunction requiredNormalizedCheck(\n checksByCheckId: ReadonlyMap<string, NormalizedCheck>,\n task: Readonly<{ readonly id: string }>,\n owner: \"Blocked Task\" | \"Task graph\"\n): NormalizedCheck {\n const check = checksByCheckId.get(task.id);\n if (check === undefined) {\n throw new CheckExecutionInvariantFailure(`${owner} has no normalized Check`);\n }\n return check;\n}\n\nfunction admittedExecutionFacts(\n execution: ResolvedCheckExecutionInput\n): Omit<AdmittedCheckExecutionInput, keyof CheckExecutionState | \"check\" | \"signal\"> {\n return {\n clock: execution.clock ?? SYSTEM_MONOTONIC_CLOCK,\n onAdmittedCheck: execution.onAdmittedCheck,\n invocationId: execution.invocationId ?? DIRECT_EXECUTION_INVOCATION_ID,\n paths: execution.paths,\n project: execution.project\n };\n}\n"]}
@@ -5,45 +5,90 @@ import { parseCheckMessages } from "./messages.mjs";
5
5
  * closed author result. Any malformed attachment rejects the whole value so a
6
6
  * valid prefix can never escape into lifecycle or Run result state.
7
7
  */
8
- export function parseCheckTerminalResult(value) {
8
+ export function parseCheckTerminalResult(value, handoffIdentity) {
9
9
  const terminal = snapshotClosedRecord(value);
10
10
  if (terminal === undefined || typeof terminal.status !== "string")
11
11
  return undefined;
12
- const result = strippedTerminalResult(terminal);
12
+ const result = strippedTerminalResult(terminal, handoffIdentity);
13
13
  if (result === undefined)
14
14
  return undefined;
15
15
  const messages = parseCheckMessages(terminal.messages);
16
- return messages === undefined ? undefined : Object.freeze({ messages, result });
16
+ const handoff = terminalHandoff(terminal, handoffIdentity);
17
+ return messages === undefined || handoff === null
18
+ ? undefined
19
+ : Object.freeze({ handoff, messages, result });
17
20
  }
18
- function strippedTerminalResult(terminal) {
21
+ /**
22
+ * A declared provider result can contain an invocation-private reference. Diagnostics
23
+ * retain only its parsed terminal result, and represent malformed values as null.
24
+ */
25
+ export function diagnosticCallbackResult(value, handoffIdentity) {
26
+ const terminal = snapshotClosedRecord(value);
27
+ if (handoffIdentity === undefined &&
28
+ (terminal === undefined || !Object.hasOwn(terminal, "handoff"))) {
29
+ return value;
30
+ }
31
+ return parseCheckTerminalResult(value, handoffIdentity)?.result ?? null;
32
+ }
33
+ function strippedTerminalResult(terminal, handoffIdentity) {
19
34
  switch (terminal.status) {
20
35
  case "passed":
36
+ return strippedPassedTerminalResult(terminal, handoffIdentity);
21
37
  case "failed":
22
- return hasRequiredAndOptionalRecordKeys(terminal, {
23
- required: ["status", "data"],
24
- optional: ["messages"]
25
- })
26
- ? Object.freeze({ status: terminal.status, data: terminal.data })
27
- : undefined;
38
+ return strippedFailedTerminalResult(terminal);
28
39
  case "not-applicable":
29
- if (!hasRequiredAndOptionalRecordKeys(terminal, {
30
- required: ["status"],
31
- optional: ["reason", "messages"]
32
- })) {
33
- return undefined;
34
- }
35
- return Object.freeze(Object.hasOwn(terminal, "reason")
36
- ? { status: "not-applicable", reason: terminal.reason }
37
- : { status: "not-applicable" });
40
+ return strippedNotApplicableTerminalResult(terminal);
38
41
  case "unavailable":
39
- return hasRequiredAndOptionalRecordKeys(terminal, {
40
- required: ["status", "reason"],
41
- optional: ["messages"]
42
- })
43
- ? Object.freeze({ status: "unavailable", reason: terminal.reason })
44
- : undefined;
42
+ return strippedUnavailableTerminalResult(terminal);
45
43
  default:
46
44
  return undefined;
47
45
  }
48
46
  }
47
+ /** A declared provider can only publish its reference alongside a passed data result. */
48
+ function strippedPassedTerminalResult(terminal, handoffIdentity) {
49
+ const required = handoffIdentity === undefined ? ["status", "data"] : ["status", "data", "handoff"];
50
+ return hasRequiredAndOptionalRecordKeys(terminal, { required, optional: ["messages"] })
51
+ ? Object.freeze({ status: "passed", data: terminal.data })
52
+ : undefined;
53
+ }
54
+ /** Failed results retain canonical data but never carry an invocation-private handoff. */
55
+ function strippedFailedTerminalResult(terminal) {
56
+ return hasRequiredAndOptionalRecordKeys(terminal, {
57
+ required: ["status", "data"],
58
+ optional: ["messages"]
59
+ })
60
+ ? Object.freeze({ status: "failed", data: terminal.data })
61
+ : undefined;
62
+ }
63
+ function strippedNotApplicableTerminalResult(terminal) {
64
+ if (!hasRequiredAndOptionalRecordKeys(terminal, {
65
+ required: ["status"],
66
+ optional: ["reason", "messages"]
67
+ })) {
68
+ return undefined;
69
+ }
70
+ return Object.freeze(Object.hasOwn(terminal, "reason")
71
+ ? { status: "not-applicable", reason: terminal.reason }
72
+ : { status: "not-applicable" });
73
+ }
74
+ function strippedUnavailableTerminalResult(terminal) {
75
+ return hasRequiredAndOptionalRecordKeys(terminal, {
76
+ required: ["status", "reason"],
77
+ optional: ["messages"]
78
+ })
79
+ ? Object.freeze({ status: "unavailable", reason: terminal.reason })
80
+ : undefined;
81
+ }
82
+ function terminalHandoff(terminal, handoffIdentity) {
83
+ if (handoffIdentity === undefined)
84
+ return undefined;
85
+ if (terminal.status !== "passed")
86
+ return undefined;
87
+ if (!isHandoffReference(terminal.handoff))
88
+ return null;
89
+ return Object.freeze({ identity: handoffIdentity, value: terminal.handoff });
90
+ }
91
+ function isHandoffReference(value) {
92
+ return value !== null && (typeof value === "object" || typeof value === "function");
93
+ }
49
94
  //# sourceMappingURL=terminal-result.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-result.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/terminal-result.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAiBnD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEpF,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAA2C;IAE3C,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,gCAAgC,CAAC,QAAQ,EAAE;gBAChD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAC5B,QAAQ,EAAE,CAAC,UAAU,CAAC;aACvB,CAAC;gBACA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjE,CAAC,CAAC,SAAS,CAAC;QAChB,KAAK,gBAAgB;YACnB,IACE,CAAC,gCAAgC,CAAC,QAAQ,EAAE;gBAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;aACjC,CAAC,EACF,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;gBACvD,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CACjC,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,gCAAgC,CAAC,QAAQ,EAAE;gBAChD,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC9B,QAAQ,EAAE,CAAC,UAAU,CAAC;aACvB,CAAC;gBACA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACnE,CAAC,CAAC,SAAS,CAAC;QAChB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC","sourcesContent":["import type { CheckMessage } from \"../../check/check.ts\";\nimport {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { parseCheckMessages } from \"./messages.ts\";\n\n/**\n * A terminal callback result split into the Core-owned four-state result and\n * detached presentation-only messages. The caller must still pass `result` to\n * Core; this adapter never validates outcome data or reasons.\n */\nexport interface ParsedCheckTerminalResult {\n readonly messages: readonly CheckMessage[];\n readonly result: StrippedTerminalResult;\n}\n\ntype StrippedTerminalResult =\n | Readonly<{ readonly status: \"passed\" | \"failed\"; readonly data: unknown }>\n | Readonly<{ readonly status: \"not-applicable\"; readonly reason?: unknown }>\n | Readonly<{ readonly status: \"unavailable\"; readonly reason: unknown }>;\n\n/**\n * Safely removes an optional terminal-message attachment from an otherwise\n * closed author result. Any malformed attachment rejects the whole value so a\n * valid prefix can never escape into lifecycle or Run result state.\n */\nexport function parseCheckTerminalResult(value: unknown): ParsedCheckTerminalResult | undefined {\n const terminal = snapshotClosedRecord(value);\n if (terminal === undefined || typeof terminal.status !== \"string\") return undefined;\n\n const result = strippedTerminalResult(terminal);\n if (result === undefined) return undefined;\n const messages = parseCheckMessages(terminal.messages);\n return messages === undefined ? undefined : Object.freeze({ messages, result });\n}\n\nfunction strippedTerminalResult(\n terminal: Readonly<Record<string, unknown>>\n): StrippedTerminalResult | undefined {\n switch (terminal.status) {\n case \"passed\":\n case \"failed\":\n return hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\", \"data\"],\n optional: [\"messages\"]\n })\n ? Object.freeze({ status: terminal.status, data: terminal.data })\n : undefined;\n case \"not-applicable\":\n if (\n !hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\"],\n optional: [\"reason\", \"messages\"]\n })\n ) {\n return undefined;\n }\n return Object.freeze(\n Object.hasOwn(terminal, \"reason\")\n ? { status: \"not-applicable\", reason: terminal.reason }\n : { status: \"not-applicable\" }\n );\n case \"unavailable\":\n return hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\", \"reason\"],\n optional: [\"messages\"]\n })\n ? Object.freeze({ status: \"unavailable\", reason: terminal.reason })\n : undefined;\n default:\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"terminal-result.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/terminal-result.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckMessage } from \"../../check/check.ts\";\nimport type { HandoffProviderIdentity } from \"../../check/handoff-provider-identity.ts\";\nimport {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { parseCheckMessages } from \"./messages.ts\";\n\n/**\n * A terminal callback result split into the Core-owned four-state result and\n * detached presentation-only messages. The caller must still pass `result` to\n * Core; this adapter never validates outcome data or reasons.\n */\nexport interface ParsedCheckTerminalResult {\n readonly handoff: ParsedCheckTerminalHandoff | undefined;\n readonly messages: readonly CheckMessage[];\n readonly result: StrippedTerminalResult;\n}\n\n/** A validated reference held only until its owning Core terminal settlement accepts it. */\nexport interface ParsedCheckTerminalHandoff {\n readonly identity: HandoffProviderIdentity;\n readonly value: object;\n}\n\ntype StrippedTerminalResult =\n | Readonly<{ readonly status: \"passed\" | \"failed\"; readonly data: unknown }>\n | Readonly<{ readonly status: \"not-applicable\"; readonly reason?: unknown }>\n | Readonly<{ readonly status: \"unavailable\"; readonly reason: unknown }>;\n\n/**\n * Safely removes an optional terminal-message attachment from an otherwise\n * closed author result. Any malformed attachment rejects the whole value so a\n * valid prefix can never escape into lifecycle or Run result state.\n */\nexport function parseCheckTerminalResult(\n value: unknown,\n handoffIdentity: HandoffProviderIdentity | undefined\n): ParsedCheckTerminalResult | undefined {\n const terminal = snapshotClosedRecord(value);\n if (terminal === undefined || typeof terminal.status !== \"string\") return undefined;\n\n const result = strippedTerminalResult(terminal, handoffIdentity);\n if (result === undefined) return undefined;\n const messages = parseCheckMessages(terminal.messages);\n const handoff = terminalHandoff(terminal, handoffIdentity);\n return messages === undefined || handoff === null\n ? undefined\n : Object.freeze({ handoff, messages, result });\n}\n\n/**\n * A declared provider result can contain an invocation-private reference. Diagnostics\n * retain only its parsed terminal result, and represent malformed values as null.\n */\nexport function diagnosticCallbackResult(\n value: unknown,\n handoffIdentity: HandoffProviderIdentity | undefined\n): unknown {\n const terminal = snapshotClosedRecord(value);\n if (\n handoffIdentity === undefined &&\n (terminal === undefined || !Object.hasOwn(terminal, \"handoff\"))\n ) {\n return value;\n }\n return parseCheckTerminalResult(value, handoffIdentity)?.result ?? null;\n}\n\nfunction strippedTerminalResult(\n terminal: Readonly<Record<string, unknown>>,\n handoffIdentity: HandoffProviderIdentity | undefined\n): StrippedTerminalResult | undefined {\n switch (terminal.status) {\n case \"passed\":\n return strippedPassedTerminalResult(terminal, handoffIdentity);\n case \"failed\":\n return strippedFailedTerminalResult(terminal);\n case \"not-applicable\":\n return strippedNotApplicableTerminalResult(terminal);\n case \"unavailable\":\n return strippedUnavailableTerminalResult(terminal);\n default:\n return undefined;\n }\n}\n\n/** A declared provider can only publish its reference alongside a passed data result. */\nfunction strippedPassedTerminalResult(\n terminal: Readonly<Record<string, unknown>>,\n handoffIdentity: HandoffProviderIdentity | undefined\n): StrippedTerminalResult | undefined {\n const required =\n handoffIdentity === undefined ? [\"status\", \"data\"] : [\"status\", \"data\", \"handoff\"];\n return hasRequiredAndOptionalRecordKeys(terminal, { required, optional: [\"messages\"] })\n ? Object.freeze({ status: \"passed\", data: terminal.data })\n : undefined;\n}\n\n/** Failed results retain canonical data but never carry an invocation-private handoff. */\nfunction strippedFailedTerminalResult(\n terminal: Readonly<Record<string, unknown>>\n): StrippedTerminalResult | undefined {\n return hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\", \"data\"],\n optional: [\"messages\"]\n })\n ? Object.freeze({ status: \"failed\", data: terminal.data })\n : undefined;\n}\n\nfunction strippedNotApplicableTerminalResult(\n terminal: Readonly<Record<string, unknown>>\n): StrippedTerminalResult | undefined {\n if (\n !hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\"],\n optional: [\"reason\", \"messages\"]\n })\n ) {\n return undefined;\n }\n return Object.freeze(\n Object.hasOwn(terminal, \"reason\")\n ? { status: \"not-applicable\", reason: terminal.reason }\n : { status: \"not-applicable\" }\n );\n}\n\nfunction strippedUnavailableTerminalResult(\n terminal: Readonly<Record<string, unknown>>\n): StrippedTerminalResult | undefined {\n return hasRequiredAndOptionalRecordKeys(terminal, {\n required: [\"status\", \"reason\"],\n optional: [\"messages\"]\n })\n ? Object.freeze({ status: \"unavailable\", reason: terminal.reason })\n : undefined;\n}\n\nfunction terminalHandoff(\n terminal: Readonly<Record<string, unknown>>,\n handoffIdentity: HandoffProviderIdentity | undefined\n): ParsedCheckTerminalHandoff | null | undefined {\n if (handoffIdentity === undefined) return undefined;\n if (terminal.status !== \"passed\") return undefined;\n if (!isHandoffReference(terminal.handoff)) return null;\n return Object.freeze({ identity: handoffIdentity, value: terminal.handoff });\n}\n\nfunction isHandoffReference(value: unknown): value is object {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\n"]}