@zxyycom/vibe-check 0.0.1

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 (767) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/esm/check/check.mjs +5 -0
  4. package/dist/esm/check/check.mjs.map +1 -0
  5. package/dist/esm/check/descriptor-validation.mjs +37 -0
  6. package/dist/esm/check/descriptor-validation.mjs.map +1 -0
  7. package/dist/esm/check/descriptor.mjs +2 -0
  8. package/dist/esm/check/descriptor.mjs.map +1 -0
  9. package/dist/esm/check/inherited-collection.mjs +62 -0
  10. package/dist/esm/check/inherited-collection.mjs.map +1 -0
  11. package/dist/esm/check/options-snapshot.mjs +75 -0
  12. package/dist/esm/check/options-snapshot.mjs.map +1 -0
  13. package/dist/esm/check-settlement/fact-validation.mjs +216 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -0
  15. package/dist/esm/check-settlement/facts.mjs +2 -0
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -0
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +80 -0
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -0
  19. package/dist/esm/check-settlement/record-store.mjs +59 -0
  20. package/dist/esm/check-settlement/record-store.mjs.map +1 -0
  21. package/dist/esm/check-settlement/session.mjs +179 -0
  22. package/dist/esm/check-settlement/session.mjs.map +1 -0
  23. package/dist/esm/data-boundary/canonical-data.mjs +159 -0
  24. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -0
  25. package/dist/esm/data-boundary/canonical-json.mjs +2 -0
  26. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -0
  27. package/dist/esm/data-boundary/closed-values.mjs +98 -0
  28. package/dist/esm/data-boundary/closed-values.mjs.map +1 -0
  29. package/dist/esm/data-boundary/value-shapes.mjs +13 -0
  30. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -0
  31. package/dist/esm/finding-waivers/reconciliation.mjs +84 -0
  32. package/dist/esm/finding-waivers/reconciliation.mjs.map +1 -0
  33. package/dist/esm/index.mjs +26 -0
  34. package/dist/esm/index.mjs.map +1 -0
  35. package/dist/esm/machine-output/v4/atomic-publication.mjs +102 -0
  36. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -0
  37. package/dist/esm/machine-output/v4/freeze-publication-value.mjs +14 -0
  38. package/dist/esm/machine-output/v4/freeze-publication-value.mjs.map +1 -0
  39. package/dist/esm/machine-output/v4/projection.mjs +23 -0
  40. package/dist/esm/machine-output/v4/projection.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/publication-invariants.mjs +59 -0
  42. package/dist/esm/machine-output/v4/publication-invariants.mjs.map +1 -0
  43. package/dist/esm/machine-output/v4/publication-model.mjs +19 -0
  44. package/dist/esm/machine-output/v4/publication-model.mjs.map +1 -0
  45. package/dist/esm/machine-output/v4/publish.mjs +20 -0
  46. package/dist/esm/machine-output/v4/publish.mjs.map +1 -0
  47. package/dist/esm/machine-output/v4/records-fingerprint.mjs +9 -0
  48. package/dist/esm/machine-output/v4/records-fingerprint.mjs.map +1 -0
  49. package/dist/esm/machine-output/v4/schema-identities.mjs +8 -0
  50. package/dist/esm/machine-output/v4/schema-identities.mjs.map +1 -0
  51. package/dist/esm/machine-output/v4/schema.mjs +50 -0
  52. package/dist/esm/machine-output/v4/schema.mjs.map +1 -0
  53. package/dist/esm/machine-output/v4/serializers.mjs +9 -0
  54. package/dist/esm/machine-output/v4/serializers.mjs.map +1 -0
  55. package/dist/esm/machine-output/v4/validation-result.mjs +16 -0
  56. package/dist/esm/machine-output/v4/validation-result.mjs.map +1 -0
  57. package/dist/esm/machine-output/v4/validation.mjs +131 -0
  58. package/dist/esm/machine-output/v4/validation.mjs.map +1 -0
  59. package/dist/esm/package-checks/code-quality-findings/policy.mjs +49 -0
  60. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +71 -0
  62. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -0
  63. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs +2 -0
  64. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs.map +1 -0
  65. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +37 -0
  66. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -0
  67. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs +38 -0
  68. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs.map +1 -0
  69. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs +47 -0
  70. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs.map +1 -0
  71. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs +44 -0
  72. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs.map +1 -0
  73. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +39 -0
  74. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -0
  75. package/dist/esm/package-checks/duplicate-detection/execution.mjs +124 -0
  76. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -0
  77. package/dist/esm/package-checks/duplicate-detection/final-data.mjs +6 -0
  78. package/dist/esm/package-checks/duplicate-detection/final-data.mjs.map +1 -0
  79. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +77 -0
  80. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -0
  81. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs +6 -0
  82. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs.map +1 -0
  83. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +87 -0
  84. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -0
  85. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +94 -0
  86. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -0
  87. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs +2 -0
  88. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs.map +1 -0
  89. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +180 -0
  90. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -0
  91. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs +10 -0
  92. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs.map +1 -0
  93. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs +2 -0
  94. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs.map +1 -0
  95. package/dist/esm/package-checks/duplicate-detection/measurement.mjs +151 -0
  96. package/dist/esm/package-checks/duplicate-detection/measurement.mjs.map +1 -0
  97. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +126 -0
  98. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -0
  99. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +60 -0
  100. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -0
  101. package/dist/esm/package-checks/duplicate-detection/options.mjs +2 -0
  102. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -0
  103. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs +5 -0
  104. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs.map +1 -0
  105. package/dist/esm/package-checks/duplicate-detection/records.mjs +119 -0
  106. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -0
  107. package/dist/esm/package-checks/file-metrics/constructor.mjs +39 -0
  108. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -0
  109. package/dist/esm/package-checks/file-metrics/execution.mjs +170 -0
  110. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -0
  111. package/dist/esm/package-checks/file-metrics/final-data.mjs +6 -0
  112. package/dist/esm/package-checks/file-metrics/final-data.mjs.map +1 -0
  113. package/dist/esm/package-checks/file-metrics/measurement-model.mjs +2 -0
  114. package/dist/esm/package-checks/file-metrics/measurement-model.mjs.map +1 -0
  115. package/dist/esm/package-checks/file-metrics/measurement.mjs +33 -0
  116. package/dist/esm/package-checks/file-metrics/measurement.mjs.map +1 -0
  117. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +171 -0
  118. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -0
  119. package/dist/esm/package-checks/file-metrics/options-validation.mjs +82 -0
  120. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -0
  121. package/dist/esm/package-checks/file-metrics/options.mjs +2 -0
  122. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -0
  123. package/dist/esm/package-checks/file-metrics/records.mjs +109 -0
  124. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -0
  125. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +59 -0
  126. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -0
  127. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +17 -0
  128. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +1 -0
  129. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +145 -0
  130. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -0
  131. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +54 -0
  132. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -0
  133. package/dist/esm/package-checks/final-data-parsing.mjs +35 -0
  134. package/dist/esm/package-checks/final-data-parsing.mjs.map +1 -0
  135. package/dist/esm/package-checks/function-metrics/analysis.mjs +96 -0
  136. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -0
  137. package/dist/esm/package-checks/function-metrics/constructor.mjs +43 -0
  138. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -0
  139. package/dist/esm/package-checks/function-metrics/execution.mjs +178 -0
  140. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -0
  141. package/dist/esm/package-checks/function-metrics/final-data.mjs +6 -0
  142. package/dist/esm/package-checks/function-metrics/final-data.mjs.map +1 -0
  143. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +64 -0
  144. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +1 -0
  145. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +17 -0
  146. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +1 -0
  147. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +138 -0
  148. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +1 -0
  149. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +35 -0
  150. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +1 -0
  151. package/dist/esm/package-checks/function-metrics/measurement-model.mjs +2 -0
  152. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -0
  153. package/dist/esm/package-checks/function-metrics/measurement.mjs +35 -0
  154. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -0
  155. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +171 -0
  156. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -0
  157. package/dist/esm/package-checks/function-metrics/options-validation.mjs +71 -0
  158. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -0
  159. package/dist/esm/package-checks/function-metrics/options.mjs +2 -0
  160. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -0
  161. package/dist/esm/package-checks/function-metrics/records.mjs +133 -0
  162. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -0
  163. package/dist/esm/package-checks/function-metrics/target-files.mjs +75 -0
  164. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -0
  165. package/dist/esm/package-checks/host-environment/error-message.mjs +4 -0
  166. package/dist/esm/package-checks/host-environment/error-message.mjs.map +1 -0
  167. package/dist/esm/package-checks/host-environment/filesystem.mjs +81 -0
  168. package/dist/esm/package-checks/host-environment/filesystem.mjs.map +1 -0
  169. package/dist/esm/package-checks/host-environment/git.mjs +51 -0
  170. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -0
  171. package/dist/esm/package-checks/host-environment/path.mjs +18 -0
  172. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -0
  173. package/dist/esm/package-checks/host-environment/process/command.mjs +13 -0
  174. package/dist/esm/package-checks/host-environment/process/command.mjs.map +1 -0
  175. package/dist/esm/package-checks/host-environment/process/contract.mjs +2 -0
  176. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -0
  177. package/dist/esm/package-checks/host-environment/process/env.mjs +19 -0
  178. package/dist/esm/package-checks/host-environment/process/env.mjs.map +1 -0
  179. package/dist/esm/package-checks/host-environment/process/failure.mjs +34 -0
  180. package/dist/esm/package-checks/host-environment/process/failure.mjs.map +1 -0
  181. package/dist/esm/package-checks/host-environment/process/result.mjs +33 -0
  182. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -0
  183. package/dist/esm/package-checks/host-environment/process/runner.mjs +30 -0
  184. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -0
  185. package/dist/esm/package-checks/json-document/strict-document.mjs +163 -0
  186. package/dist/esm/package-checks/json-document/strict-document.mjs.map +1 -0
  187. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +39 -0
  188. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -0
  189. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs +141 -0
  190. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs.map +1 -0
  191. package/dist/esm/package-checks/json-schema-validation/final-data.mjs +64 -0
  192. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -0
  193. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs +35 -0
  194. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs.map +1 -0
  195. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs +118 -0
  196. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs.map +1 -0
  197. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs +45 -0
  198. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs.map +1 -0
  199. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +212 -0
  200. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -0
  201. package/dist/esm/package-checks/json-schema-validation/options.mjs +2 -0
  202. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -0
  203. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +128 -0
  204. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -0
  205. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs +71 -0
  206. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs.map +1 -0
  207. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs +190 -0
  208. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs.map +1 -0
  209. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +234 -0
  210. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -0
  211. package/dist/esm/package-checks/json-validation/default-check.mjs +39 -0
  212. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -0
  213. package/dist/esm/package-checks/json-validation/final-data.mjs +27 -0
  214. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -0
  215. package/dist/esm/package-checks/json-validation/json-validation.mjs +138 -0
  216. package/dist/esm/package-checks/json-validation/json-validation.mjs.map +1 -0
  217. package/dist/esm/package-checks/json-validation/options-resolution.mjs +33 -0
  218. package/dist/esm/package-checks/json-validation/options-resolution.mjs.map +1 -0
  219. package/dist/esm/package-checks/json-validation/options-validation.mjs +16 -0
  220. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -0
  221. package/dist/esm/package-checks/json-validation/options.mjs +2 -0
  222. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -0
  223. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs +73 -0
  224. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs.map +1 -0
  225. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs +153 -0
  226. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -0
  227. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +155 -0
  228. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -0
  229. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +58 -0
  230. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -0
  231. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs +125 -0
  232. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs.map +1 -0
  233. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs +72 -0
  234. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs.map +1 -0
  235. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +55 -0
  236. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -0
  237. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +199 -0
  238. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -0
  239. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +109 -0
  240. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -0
  241. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs +28 -0
  242. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs +158 -0
  244. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +17 -0
  246. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -0
  247. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +191 -0
  248. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +83 -0
  250. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -0
  251. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +50 -0
  252. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -0
  253. package/dist/esm/package-checks/markdown-link-validation/options.mjs +2 -0
  254. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -0
  255. package/dist/esm/package-checks/markdown-link-validation/records.mjs +32 -0
  256. package/dist/esm/package-checks/markdown-link-validation/records.mjs.map +1 -0
  257. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +196 -0
  258. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -0
  259. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs +23 -0
  260. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs.map +1 -0
  261. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs +41 -0
  262. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs.map +1 -0
  263. package/dist/esm/package-checks/project-files/collection.mjs +142 -0
  264. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -0
  265. package/dist/esm/package-checks/project-files/config-glob.mjs +11 -0
  266. package/dist/esm/package-checks/project-files/config-glob.mjs.map +1 -0
  267. package/dist/esm/package-checks/project-files/configuration.mjs +104 -0
  268. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -0
  269. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs +24 -0
  270. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs.map +1 -0
  271. package/dist/esm/package-checks/project-files/file-fingerprint.mjs +36 -0
  272. package/dist/esm/package-checks/project-files/file-fingerprint.mjs.map +1 -0
  273. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +57 -0
  274. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -0
  275. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +72 -0
  276. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -0
  277. package/dist/esm/package-checks/project-files/input-eligibility.mjs +13 -0
  278. package/dist/esm/package-checks/project-files/input-eligibility.mjs.map +1 -0
  279. package/dist/esm/package-checks/project-files/reported-path.mjs +30 -0
  280. package/dist/esm/package-checks/project-files/reported-path.mjs.map +1 -0
  281. package/dist/esm/package-checks/project-files/revision-paths.mjs +19 -0
  282. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -0
  283. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +102 -0
  284. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +242 -0
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -0
  287. package/dist/esm/project-definition/check-tree/materialization.mjs +50 -0
  288. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/resolution.mjs +60 -0
  290. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -0
  291. package/dist/esm/project-definition/output-defaults.mjs +7 -0
  292. package/dist/esm/project-definition/output-defaults.mjs.map +1 -0
  293. package/dist/esm/project-definition/output-validation.mjs +44 -0
  294. package/dist/esm/project-definition/output-validation.mjs.map +1 -0
  295. package/dist/esm/project-definition/project-definition-validation.mjs +95 -0
  296. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -0
  297. package/dist/esm/project-definition/project-definition.mjs +92 -0
  298. package/dist/esm/project-definition/project-definition.mjs.map +1 -0
  299. package/dist/esm/project-run/aggregation.mjs +66 -0
  300. package/dist/esm/project-run/aggregation.mjs.map +1 -0
  301. package/dist/esm/project-run/check-execution/callback.mjs +70 -0
  302. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -0
  303. package/dist/esm/project-run/check-execution/dependencies.mjs +50 -0
  304. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -0
  305. package/dist/esm/project-run/check-execution/execution-finalization.mjs +103 -0
  306. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -0
  307. package/dist/esm/project-run/check-execution/execution-settlement.mjs +90 -0
  308. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -0
  309. package/dist/esm/project-run/check-execution/messages.mjs +38 -0
  310. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -0
  311. package/dist/esm/project-run/check-execution/plan.mjs +35 -0
  312. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -0
  313. package/dist/esm/project-run/check-execution/preflight-result.mjs +83 -0
  314. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +1 -0
  315. package/dist/esm/project-run/check-execution/preflight.mjs +186 -0
  316. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -0
  317. package/dist/esm/project-run/check-execution/resolved-checks.mjs +168 -0
  318. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -0
  319. package/dist/esm/project-run/check-execution/terminal-result.mjs +49 -0
  320. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -0
  321. package/dist/esm/project-run/completion.mjs +173 -0
  322. package/dist/esm/project-run/completion.mjs.map +1 -0
  323. package/dist/esm/project-run/controls/contract.mjs +2 -0
  324. package/dist/esm/project-run/controls/contract.mjs.map +1 -0
  325. package/dist/esm/project-run/controls/outputs-override-validation.mjs +61 -0
  326. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -0
  327. package/dist/esm/project-run/controls/validation-result.mjs +2 -0
  328. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -0
  329. package/dist/esm/project-run/controls/validation.mjs +156 -0
  330. package/dist/esm/project-run/controls/validation.mjs.map +1 -0
  331. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +182 -0
  332. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -0
  333. package/dist/esm/project-run/diagnostic-logging/logger.mjs +242 -0
  334. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -0
  335. package/dist/esm/project-run/invocation-creation.mjs +111 -0
  336. package/dist/esm/project-run/invocation-creation.mjs.map +1 -0
  337. package/dist/esm/project-run/invocation.mjs +195 -0
  338. package/dist/esm/project-run/invocation.mjs.map +1 -0
  339. package/dist/esm/project-run/machine-publication.mjs +16 -0
  340. package/dist/esm/project-run/machine-publication.mjs.map +1 -0
  341. package/dist/esm/project-run/output-configuration.mjs +17 -0
  342. package/dist/esm/project-run/output-configuration.mjs.map +1 -0
  343. package/dist/esm/project-run/output-status.mjs +43 -0
  344. package/dist/esm/project-run/output-status.mjs.map +1 -0
  345. package/dist/esm/project-run/progress-rendering/presentation.mjs +135 -0
  346. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -0
  347. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +100 -0
  348. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -0
  349. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +123 -0
  350. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -0
  351. package/dist/esm/project-run/progress-rendering/renderer.mjs +12 -0
  352. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -0
  353. package/dist/esm/project-run/project-context.mjs +8 -0
  354. package/dist/esm/project-run/project-context.mjs.map +1 -0
  355. package/dist/esm/project-run/result.mjs +54 -0
  356. package/dist/esm/project-run/result.mjs.map +1 -0
  357. package/dist/esm/project-run/run.mjs +23 -0
  358. package/dist/esm/project-run/run.mjs.map +1 -0
  359. package/dist/esm/project-run/task-scheduler/execution-state.mjs +66 -0
  360. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -0
  361. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +119 -0
  362. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -0
  363. package/dist/esm/project-run/task-scheduler/graph.mjs +116 -0
  364. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -0
  365. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +82 -0
  366. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -0
  367. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +27 -0
  368. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -0
  369. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +125 -0
  370. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -0
  371. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +45 -0
  372. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -0
  373. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +74 -0
  374. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -0
  375. package/dist/esm/project-run/task-scheduler/scheduler.mjs +147 -0
  376. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -0
  377. package/docs/api-mechanics.md +205 -0
  378. package/docs/checks/duplicate-detection.md +195 -0
  379. package/docs/checks/file-metrics.md +229 -0
  380. package/docs/checks/function-metrics.md +222 -0
  381. package/docs/checks/json-schema-validation.md +190 -0
  382. package/docs/checks/json-validation.md +133 -0
  383. package/docs/checks/maintenance-reminders.md +158 -0
  384. package/docs/checks/markdown-link-validation.md +192 -0
  385. package/docs/examples/artifacts/mixed-outcomes/definition.ts +195 -0
  386. package/docs/examples/artifacts/mixed-outcomes/records.ndjson +2 -0
  387. package/docs/examples/artifacts/mixed-outcomes/run.json +70 -0
  388. package/docs/output.md +97 -0
  389. package/docs/schemas/vibe-check-record.schema.json +33 -0
  390. package/docs/schemas/vibe-check-run.schema.json +173 -0
  391. package/index.mjs +1 -0
  392. package/package.json +49 -0
  393. package/src/check/check.ts +497 -0
  394. package/src/check/descriptor-validation.ts +60 -0
  395. package/src/check/descriptor.ts +5 -0
  396. package/src/check/inherited-collection.ts +101 -0
  397. package/src/check/options-snapshot.ts +80 -0
  398. package/src/check-settlement/fact-validation.ts +289 -0
  399. package/src/check-settlement/facts.ts +27 -0
  400. package/src/check-settlement/outcome-normalization.ts +118 -0
  401. package/src/check-settlement/record-store.ts +73 -0
  402. package/src/check-settlement/session.ts +257 -0
  403. package/src/data-boundary/canonical-data.ts +188 -0
  404. package/src/data-boundary/canonical-json.ts +11 -0
  405. package/src/data-boundary/closed-values.ts +126 -0
  406. package/src/data-boundary/value-shapes.ts +15 -0
  407. package/src/finding-waivers/reconciliation.ts +176 -0
  408. package/src/index.ts +123 -0
  409. package/src/machine-output/v4/atomic-publication.ts +123 -0
  410. package/src/machine-output/v4/freeze-publication-value.ts +12 -0
  411. package/src/machine-output/v4/projection.ts +36 -0
  412. package/src/machine-output/v4/publication-invariants.ts +89 -0
  413. package/src/machine-output/v4/publication-model.ts +38 -0
  414. package/src/machine-output/v4/publish.ts +23 -0
  415. package/src/machine-output/v4/records-fingerprint.ts +12 -0
  416. package/src/machine-output/v4/schema-identities.ts +8 -0
  417. package/src/machine-output/v4/schema.ts +97 -0
  418. package/src/machine-output/v4/serializers.ts +18 -0
  419. package/src/machine-output/v4/validation-result.ts +59 -0
  420. package/src/machine-output/v4/validation.ts +166 -0
  421. package/src/package-checks/code-quality-findings/policy.ts +85 -0
  422. package/src/package-checks/duplicate-detection/area-policy.ts +103 -0
  423. package/src/package-checks/duplicate-detection/cache/cache-contract.ts +49 -0
  424. package/src/package-checks/duplicate-detection/cache/identity.ts +61 -0
  425. package/src/package-checks/duplicate-detection/cache/key.ts +46 -0
  426. package/src/package-checks/duplicate-detection/cache/payload.ts +78 -0
  427. package/src/package-checks/duplicate-detection/cache/store.ts +77 -0
  428. package/src/package-checks/duplicate-detection/default-check.ts +50 -0
  429. package/src/package-checks/duplicate-detection/execution.ts +168 -0
  430. package/src/package-checks/duplicate-detection/final-data.ts +10 -0
  431. package/src/package-checks/duplicate-detection/jscpd/availability.ts +137 -0
  432. package/src/package-checks/duplicate-detection/jscpd/command-path.ts +8 -0
  433. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +112 -0
  434. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +137 -0
  435. package/src/package-checks/duplicate-detection/jscpd/scanner-contract.ts +18 -0
  436. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +257 -0
  437. package/src/package-checks/duplicate-detection/jscpd/scoped-fragments.ts +17 -0
  438. package/src/package-checks/duplicate-detection/measurement-model.ts +44 -0
  439. package/src/package-checks/duplicate-detection/measurement.ts +223 -0
  440. package/src/package-checks/duplicate-detection/options-resolution.ts +162 -0
  441. package/src/package-checks/duplicate-detection/options-validation.ts +75 -0
  442. package/src/package-checks/duplicate-detection/options.ts +72 -0
  443. package/src/package-checks/duplicate-detection/project-revision.ts +5 -0
  444. package/src/package-checks/duplicate-detection/records.ts +171 -0
  445. package/src/package-checks/file-metrics/constructor.ts +46 -0
  446. package/src/package-checks/file-metrics/execution.ts +233 -0
  447. package/src/package-checks/file-metrics/final-data.ts +10 -0
  448. package/src/package-checks/file-metrics/measurement-model.ts +10 -0
  449. package/src/package-checks/file-metrics/measurement.ts +52 -0
  450. package/src/package-checks/file-metrics/options-resolution.ts +213 -0
  451. package/src/package-checks/file-metrics/options-validation.ts +104 -0
  452. package/src/package-checks/file-metrics/options.ts +91 -0
  453. package/src/package-checks/file-metrics/records.ts +182 -0
  454. package/src/package-checks/file-metrics/scc/availability.ts +100 -0
  455. package/src/package-checks/file-metrics/scc/csv.ts +20 -0
  456. package/src/package-checks/file-metrics/scc/parser.ts +223 -0
  457. package/src/package-checks/file-metrics/scc/scanner.ts +68 -0
  458. package/src/package-checks/final-data-parsing.ts +49 -0
  459. package/src/package-checks/function-metrics/analysis.ts +138 -0
  460. package/src/package-checks/function-metrics/constructor.ts +55 -0
  461. package/src/package-checks/function-metrics/execution.ts +263 -0
  462. package/src/package-checks/function-metrics/final-data.ts +10 -0
  463. package/src/package-checks/function-metrics/lizard/availability.ts +90 -0
  464. package/src/package-checks/function-metrics/lizard/csv.ts +20 -0
  465. package/src/package-checks/function-metrics/lizard/parser.ts +179 -0
  466. package/src/package-checks/function-metrics/lizard/scanner.ts +62 -0
  467. package/src/package-checks/function-metrics/measurement-model.ts +30 -0
  468. package/src/package-checks/function-metrics/measurement.ts +57 -0
  469. package/src/package-checks/function-metrics/options-resolution.ts +215 -0
  470. package/src/package-checks/function-metrics/options-validation.ts +89 -0
  471. package/src/package-checks/function-metrics/options.ts +84 -0
  472. package/src/package-checks/function-metrics/records.ts +254 -0
  473. package/src/package-checks/function-metrics/target-files.ts +85 -0
  474. package/src/package-checks/host-environment/error-message.ts +3 -0
  475. package/src/package-checks/host-environment/filesystem.ts +110 -0
  476. package/src/package-checks/host-environment/git.ts +68 -0
  477. package/src/package-checks/host-environment/path.ts +20 -0
  478. package/src/package-checks/host-environment/process/command.ts +21 -0
  479. package/src/package-checks/host-environment/process/contract.ts +56 -0
  480. package/src/package-checks/host-environment/process/env.ts +25 -0
  481. package/src/package-checks/host-environment/process/failure.ts +40 -0
  482. package/src/package-checks/host-environment/process/result.ts +39 -0
  483. package/src/package-checks/host-environment/process/runner.ts +47 -0
  484. package/src/package-checks/json-document/strict-document.ts +209 -0
  485. package/src/package-checks/json-schema-validation/default-check.ts +54 -0
  486. package/src/package-checks/json-schema-validation/execution-stages.ts +230 -0
  487. package/src/package-checks/json-schema-validation/final-data.ts +115 -0
  488. package/src/package-checks/json-schema-validation/issue-collector.ts +43 -0
  489. package/src/package-checks/json-schema-validation/json-schema-validation.ts +191 -0
  490. package/src/package-checks/json-schema-validation/options-resolution.ts +61 -0
  491. package/src/package-checks/json-schema-validation/options-validation.ts +256 -0
  492. package/src/package-checks/json-schema-validation/options.ts +66 -0
  493. package/src/package-checks/json-schema-validation/reference-resolver.ts +165 -0
  494. package/src/package-checks/json-schema-validation/remote-response.ts +84 -0
  495. package/src/package-checks/json-schema-validation/schema-engine.ts +263 -0
  496. package/src/package-checks/json-schema-validation/schema-policy.ts +275 -0
  497. package/src/package-checks/json-validation/default-check.ts +48 -0
  498. package/src/package-checks/json-validation/final-data.ts +46 -0
  499. package/src/package-checks/json-validation/json-validation.ts +212 -0
  500. package/src/package-checks/json-validation/options-resolution.ts +50 -0
  501. package/src/package-checks/json-validation/options-validation.ts +27 -0
  502. package/src/package-checks/json-validation/options.ts +18 -0
  503. package/src/package-checks/maintenance-reminders/assessment-results.ts +117 -0
  504. package/src/package-checks/maintenance-reminders/final-data.ts +239 -0
  505. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +264 -0
  506. package/src/package-checks/maintenance-reminders/maintenance-support.ts +67 -0
  507. package/src/package-checks/maintenance-reminders/measurement.ts +183 -0
  508. package/src/package-checks/maintenance-reminders/options-validation.ts +88 -0
  509. package/src/package-checks/markdown-link-validation/default-check.ts +70 -0
  510. package/src/package-checks/markdown-link-validation/execution.ts +325 -0
  511. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +127 -0
  512. package/src/package-checks/markdown-link-validation/final-data.ts +47 -0
  513. package/src/package-checks/markdown-link-validation/local-resolution.ts +306 -0
  514. package/src/package-checks/markdown-link-validation/local-resolver.ts +51 -0
  515. package/src/package-checks/markdown-link-validation/markdown-parser.ts +302 -0
  516. package/src/package-checks/markdown-link-validation/options-resolution.ts +114 -0
  517. package/src/package-checks/markdown-link-validation/options-validation.ts +72 -0
  518. package/src/package-checks/markdown-link-validation/options.ts +50 -0
  519. package/src/package-checks/markdown-link-validation/records.ts +77 -0
  520. package/src/package-checks/markdown-link-validation/resolver-engine.ts +276 -0
  521. package/src/package-checks/markdown-link-validation/target-descriptor.ts +34 -0
  522. package/src/package-checks/markdown-link-validation/traversal-result.ts +58 -0
  523. package/src/package-checks/project-files/collection.ts +199 -0
  524. package/src/package-checks/project-files/config-glob.ts +17 -0
  525. package/src/package-checks/project-files/configuration.ts +152 -0
  526. package/src/package-checks/project-files/exact-input-measurement.ts +38 -0
  527. package/src/package-checks/project-files/file-fingerprint.ts +46 -0
  528. package/src/package-checks/project-files/gitlink-revision.ts +82 -0
  529. package/src/package-checks/project-files/gitlink-worktree.ts +106 -0
  530. package/src/package-checks/project-files/input-eligibility.ts +21 -0
  531. package/src/package-checks/project-files/reported-path.ts +35 -0
  532. package/src/package-checks/project-files/revision-paths.ts +34 -0
  533. package/src/package-checks/project-files/revision-worktree-files.ts +148 -0
  534. package/src/project-definition/check-tree/authoring.ts +332 -0
  535. package/src/project-definition/check-tree/materialization.ts +56 -0
  536. package/src/project-definition/check-tree/resolution.ts +108 -0
  537. package/src/project-definition/output-defaults.ts +6 -0
  538. package/src/project-definition/output-validation.ts +54 -0
  539. package/src/project-definition/project-definition-validation.ts +123 -0
  540. package/src/project-definition/project-definition.ts +184 -0
  541. package/src/project-run/aggregation.ts +90 -0
  542. package/src/project-run/check-execution/callback.ts +106 -0
  543. package/src/project-run/check-execution/dependencies.ts +70 -0
  544. package/src/project-run/check-execution/execution-finalization.ts +177 -0
  545. package/src/project-run/check-execution/execution-settlement.ts +147 -0
  546. package/src/project-run/check-execution/messages.ts +46 -0
  547. package/src/project-run/check-execution/plan.ts +46 -0
  548. package/src/project-run/check-execution/preflight-result.ts +131 -0
  549. package/src/project-run/check-execution/preflight.ts +321 -0
  550. package/src/project-run/check-execution/resolved-checks.ts +285 -0
  551. package/src/project-run/check-execution/terminal-result.ts +74 -0
  552. package/src/project-run/completion.ts +263 -0
  553. package/src/project-run/controls/contract.ts +24 -0
  554. package/src/project-run/controls/outputs-override-validation.ts +86 -0
  555. package/src/project-run/controls/validation-result.ts +12 -0
  556. package/src/project-run/controls/validation.ts +176 -0
  557. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +223 -0
  558. package/src/project-run/diagnostic-logging/logger.ts +325 -0
  559. package/src/project-run/invocation-creation.ts +160 -0
  560. package/src/project-run/invocation.ts +303 -0
  561. package/src/project-run/machine-publication.ts +23 -0
  562. package/src/project-run/output-configuration.ts +24 -0
  563. package/src/project-run/output-status.ts +69 -0
  564. package/src/project-run/progress-rendering/presentation.ts +189 -0
  565. package/src/project-run/progress-rendering/renderer-formatting.ts +141 -0
  566. package/src/project-run/progress-rendering/renderer-lifecycle.ts +152 -0
  567. package/src/project-run/progress-rendering/renderer.ts +68 -0
  568. package/src/project-run/project-context.ts +11 -0
  569. package/src/project-run/result.ts +175 -0
  570. package/src/project-run/run.ts +50 -0
  571. package/src/project-run/task-scheduler/execution-state.ts +153 -0
  572. package/src/project-run/task-scheduler/graph-validation.ts +176 -0
  573. package/src/project-run/task-scheduler/graph.ts +185 -0
  574. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +177 -0
  575. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +42 -0
  576. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +199 -0
  577. package/src/project-run/task-scheduler/scheduler-decision-model.ts +158 -0
  578. package/src/project-run/task-scheduler/scheduler-decision.ts +103 -0
  579. package/src/project-run/task-scheduler/scheduler.ts +228 -0
  580. package/third-party-licenses/momoa-3.3.12-LICENSE +201 -0
  581. package/types/check/check.d.ts +350 -0
  582. package/types/check/descriptor-validation.d.ts +18 -0
  583. package/types/check/descriptor.d.ts +5 -0
  584. package/types/check/inherited-collection.d.ts +35 -0
  585. package/types/check/options-snapshot.d.ts +2 -0
  586. package/types/check-settlement/fact-validation.d.ts +14 -0
  587. package/types/check-settlement/facts.d.ts +19 -0
  588. package/types/check-settlement/outcome-normalization.d.ts +9 -0
  589. package/types/check-settlement/record-store.d.ts +14 -0
  590. package/types/check-settlement/session.d.ts +41 -0
  591. package/types/data-boundary/canonical-data.d.ts +13 -0
  592. package/types/data-boundary/canonical-json.d.ts +6 -0
  593. package/types/data-boundary/closed-values.d.ts +8 -0
  594. package/types/data-boundary/value-shapes.d.ts +4 -0
  595. package/types/finding-waivers/reconciliation.d.ts +66 -0
  596. package/types/index.d.ts +57 -0
  597. package/types/machine-output/v4/atomic-publication.d.ts +9 -0
  598. package/types/machine-output/v4/freeze-publication-value.d.ts +6 -0
  599. package/types/machine-output/v4/projection.d.ts +7 -0
  600. package/types/machine-output/v4/publication-invariants.d.ts +3 -0
  601. package/types/machine-output/v4/publication-model.d.ts +15 -0
  602. package/types/machine-output/v4/publish.d.ts +7 -0
  603. package/types/machine-output/v4/records-fingerprint.d.ts +4 -0
  604. package/types/machine-output/v4/schema-identities.d.ts +7 -0
  605. package/types/machine-output/v4/schema.d.ts +44 -0
  606. package/types/machine-output/v4/serializers.d.ts +6 -0
  607. package/types/machine-output/v4/validation-result.d.ts +26 -0
  608. package/types/machine-output/v4/validation.d.ts +6 -0
  609. package/types/package-checks/code-quality-findings/policy.d.ts +20 -0
  610. package/types/package-checks/duplicate-detection/area-policy.d.ts +3 -0
  611. package/types/package-checks/duplicate-detection/cache/cache-contract.d.ts +48 -0
  612. package/types/package-checks/duplicate-detection/cache/identity.d.ts +17 -0
  613. package/types/package-checks/duplicate-detection/cache/key.d.ts +4 -0
  614. package/types/package-checks/duplicate-detection/cache/payload.d.ts +4 -0
  615. package/types/package-checks/duplicate-detection/cache/store.d.ts +18 -0
  616. package/types/package-checks/duplicate-detection/default-check.d.ts +11 -0
  617. package/types/package-checks/duplicate-detection/execution.d.ts +11 -0
  618. package/types/package-checks/duplicate-detection/final-data.d.ts +5 -0
  619. package/types/package-checks/duplicate-detection/jscpd/availability.d.ts +19 -0
  620. package/types/package-checks/duplicate-detection/jscpd/command-path.d.ts +1 -0
  621. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +23 -0
  622. package/types/package-checks/duplicate-detection/jscpd/json-report.d.ts +2 -0
  623. package/types/package-checks/duplicate-detection/jscpd/scanner-contract.d.ts +11 -0
  624. package/types/package-checks/duplicate-detection/jscpd/scanner.d.ts +21 -0
  625. package/types/package-checks/duplicate-detection/jscpd/scoped-fragments.d.ts +4 -0
  626. package/types/package-checks/duplicate-detection/measurement-model.d.ts +36 -0
  627. package/types/package-checks/duplicate-detection/measurement.d.ts +14 -0
  628. package/types/package-checks/duplicate-detection/options-resolution.d.ts +3 -0
  629. package/types/package-checks/duplicate-detection/options-validation.d.ts +1 -0
  630. package/types/package-checks/duplicate-detection/options.d.ts +65 -0
  631. package/types/package-checks/duplicate-detection/project-revision.d.ts +1 -0
  632. package/types/package-checks/duplicate-detection/records.d.ts +22 -0
  633. package/types/package-checks/file-metrics/constructor.d.ts +11 -0
  634. package/types/package-checks/file-metrics/execution.d.ts +11 -0
  635. package/types/package-checks/file-metrics/final-data.d.ts +5 -0
  636. package/types/package-checks/file-metrics/measurement-model.d.ts +12 -0
  637. package/types/package-checks/file-metrics/measurement.d.ts +13 -0
  638. package/types/package-checks/file-metrics/options-resolution.d.ts +3 -0
  639. package/types/package-checks/file-metrics/options-validation.d.ts +3 -0
  640. package/types/package-checks/file-metrics/options.d.ts +75 -0
  641. package/types/package-checks/file-metrics/records.d.ts +43 -0
  642. package/types/package-checks/file-metrics/scc/availability.d.ts +18 -0
  643. package/types/package-checks/file-metrics/scc/csv.d.ts +1 -0
  644. package/types/package-checks/file-metrics/scc/parser.d.ts +25 -0
  645. package/types/package-checks/file-metrics/scc/scanner.d.ts +14 -0
  646. package/types/package-checks/final-data-parsing.d.ts +9 -0
  647. package/types/package-checks/function-metrics/analysis.d.ts +10 -0
  648. package/types/package-checks/function-metrics/constructor.d.ts +11 -0
  649. package/types/package-checks/function-metrics/execution.d.ts +7 -0
  650. package/types/package-checks/function-metrics/final-data.d.ts +5 -0
  651. package/types/package-checks/function-metrics/lizard/availability.d.ts +11 -0
  652. package/types/package-checks/function-metrics/lizard/csv.d.ts +1 -0
  653. package/types/package-checks/function-metrics/lizard/parser.d.ts +17 -0
  654. package/types/package-checks/function-metrics/lizard/scanner.d.ts +15 -0
  655. package/types/package-checks/function-metrics/measurement-model.d.ts +26 -0
  656. package/types/package-checks/function-metrics/measurement.d.ts +21 -0
  657. package/types/package-checks/function-metrics/options-resolution.d.ts +3 -0
  658. package/types/package-checks/function-metrics/options-validation.d.ts +3 -0
  659. package/types/package-checks/function-metrics/options.d.ts +76 -0
  660. package/types/package-checks/function-metrics/records.d.ts +37 -0
  661. package/types/package-checks/function-metrics/target-files.d.ts +3 -0
  662. package/types/package-checks/host-environment/error-message.d.ts +1 -0
  663. package/types/package-checks/host-environment/filesystem.d.ts +19 -0
  664. package/types/package-checks/host-environment/git.d.ts +13 -0
  665. package/types/package-checks/host-environment/path.d.ts +3 -0
  666. package/types/package-checks/host-environment/process/command.d.ts +7 -0
  667. package/types/package-checks/host-environment/process/contract.d.ts +50 -0
  668. package/types/package-checks/host-environment/process/env.d.ts +16 -0
  669. package/types/package-checks/host-environment/process/failure.d.ts +4 -0
  670. package/types/package-checks/host-environment/process/result.d.ts +2 -0
  671. package/types/package-checks/host-environment/process/runner.d.ts +3 -0
  672. package/types/package-checks/json-document/strict-document.d.ts +35 -0
  673. package/types/package-checks/json-schema-validation/default-check.d.ts +11 -0
  674. package/types/package-checks/json-schema-validation/execution-stages.d.ts +27 -0
  675. package/types/package-checks/json-schema-validation/final-data.d.ts +15 -0
  676. package/types/package-checks/json-schema-validation/issue-collector.d.ts +12 -0
  677. package/types/package-checks/json-schema-validation/json-schema-validation.d.ts +42 -0
  678. package/types/package-checks/json-schema-validation/options-resolution.d.ts +3 -0
  679. package/types/package-checks/json-schema-validation/options-validation.d.ts +2 -0
  680. package/types/package-checks/json-schema-validation/options.d.ts +53 -0
  681. package/types/package-checks/json-schema-validation/reference-resolver.d.ts +23 -0
  682. package/types/package-checks/json-schema-validation/remote-response.d.ts +2 -0
  683. package/types/package-checks/json-schema-validation/schema-engine.d.ts +33 -0
  684. package/types/package-checks/json-schema-validation/schema-policy.d.ts +17 -0
  685. package/types/package-checks/json-validation/default-check.d.ts +11 -0
  686. package/types/package-checks/json-validation/final-data.d.ts +10 -0
  687. package/types/package-checks/json-validation/json-validation.d.ts +28 -0
  688. package/types/package-checks/json-validation/options-resolution.d.ts +3 -0
  689. package/types/package-checks/json-validation/options-validation.d.ts +2 -0
  690. package/types/package-checks/json-validation/options.d.ts +13 -0
  691. package/types/package-checks/maintenance-reminders/assessment-results.d.ts +10 -0
  692. package/types/package-checks/maintenance-reminders/final-data.d.ts +47 -0
  693. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +111 -0
  694. package/types/package-checks/maintenance-reminders/maintenance-support.d.ts +7 -0
  695. package/types/package-checks/maintenance-reminders/measurement.d.ts +10 -0
  696. package/types/package-checks/maintenance-reminders/options-validation.d.ts +3 -0
  697. package/types/package-checks/markdown-link-validation/default-check.d.ts +27 -0
  698. package/types/package-checks/markdown-link-validation/execution.d.ts +12 -0
  699. package/types/package-checks/markdown-link-validation/filesystem-probes.d.ts +10 -0
  700. package/types/package-checks/markdown-link-validation/final-data.d.ts +10 -0
  701. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +92 -0
  702. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +5 -0
  703. package/types/package-checks/markdown-link-validation/markdown-parser.d.ts +37 -0
  704. package/types/package-checks/markdown-link-validation/options-resolution.d.ts +3 -0
  705. package/types/package-checks/markdown-link-validation/options-validation.d.ts +2 -0
  706. package/types/package-checks/markdown-link-validation/options.d.ts +43 -0
  707. package/types/package-checks/markdown-link-validation/records.d.ts +37 -0
  708. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +15 -0
  709. package/types/package-checks/markdown-link-validation/target-descriptor.d.ts +5 -0
  710. package/types/package-checks/markdown-link-validation/traversal-result.d.ts +12 -0
  711. package/types/package-checks/project-files/collection.d.ts +9 -0
  712. package/types/package-checks/project-files/config-glob.d.ts +5 -0
  713. package/types/package-checks/project-files/configuration.d.ts +31 -0
  714. package/types/package-checks/project-files/exact-input-measurement.d.ts +12 -0
  715. package/types/package-checks/project-files/file-fingerprint.d.ts +7 -0
  716. package/types/package-checks/project-files/gitlink-revision.d.ts +9 -0
  717. package/types/package-checks/project-files/gitlink-worktree.d.ts +26 -0
  718. package/types/package-checks/project-files/input-eligibility.d.ts +7 -0
  719. package/types/package-checks/project-files/reported-path.d.ts +1 -0
  720. package/types/package-checks/project-files/revision-paths.d.ts +12 -0
  721. package/types/package-checks/project-files/revision-worktree-files.d.ts +5 -0
  722. package/types/project-definition/check-tree/authoring.d.ts +41 -0
  723. package/types/project-definition/check-tree/materialization.d.ts +4 -0
  724. package/types/project-definition/check-tree/resolution.d.ts +25 -0
  725. package/types/project-definition/output-defaults.d.ts +14 -0
  726. package/types/project-definition/output-validation.d.ts +3 -0
  727. package/types/project-definition/project-definition-validation.d.ts +6 -0
  728. package/types/project-definition/project-definition.d.ts +88 -0
  729. package/types/project-run/aggregation.d.ts +7 -0
  730. package/types/project-run/check-execution/callback.d.ts +24 -0
  731. package/types/project-run/check-execution/dependencies.d.ts +9 -0
  732. package/types/project-run/check-execution/execution-finalization.d.ts +18 -0
  733. package/types/project-run/check-execution/execution-settlement.d.ts +41 -0
  734. package/types/project-run/check-execution/messages.d.ts +3 -0
  735. package/types/project-run/check-execution/plan.d.ts +10 -0
  736. package/types/project-run/check-execution/preflight-result.d.ts +23 -0
  737. package/types/project-run/check-execution/preflight.d.ts +27 -0
  738. package/types/project-run/check-execution/resolved-checks.d.ts +51 -0
  739. package/types/project-run/check-execution/terminal-result.d.ts +27 -0
  740. package/types/project-run/completion.d.ts +14 -0
  741. package/types/project-run/controls/contract.d.ts +24 -0
  742. package/types/project-run/controls/outputs-override-validation.d.ts +3 -0
  743. package/types/project-run/controls/validation-result.d.ts +14 -0
  744. package/types/project-run/controls/validation.d.ts +3 -0
  745. package/types/project-run/diagnostic-logging/diagnostic-detail-rendering.d.ts +11 -0
  746. package/types/project-run/diagnostic-logging/logger.d.ts +33 -0
  747. package/types/project-run/invocation-creation.d.ts +12 -0
  748. package/types/project-run/invocation.d.ts +34 -0
  749. package/types/project-run/machine-publication.d.ts +10 -0
  750. package/types/project-run/output-configuration.d.ts +3 -0
  751. package/types/project-run/output-status.d.ts +21 -0
  752. package/types/project-run/progress-rendering/presentation.d.ts +28 -0
  753. package/types/project-run/progress-rendering/renderer-formatting.d.ts +23 -0
  754. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +24 -0
  755. package/types/project-run/progress-rendering/renderer.d.ts +44 -0
  756. package/types/project-run/project-context.d.ts +7 -0
  757. package/types/project-run/result.d.ts +99 -0
  758. package/types/project-run/run.d.ts +18 -0
  759. package/types/project-run/task-scheduler/execution-state.d.ts +67 -0
  760. package/types/project-run/task-scheduler/graph-validation.d.ts +11 -0
  761. package/types/project-run/task-scheduler/graph.d.ts +40 -0
  762. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +8 -0
  763. package/types/project-run/task-scheduler/scheduler-blocker-summary.d.ts +4 -0
  764. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +24 -0
  765. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +94 -0
  766. package/types/project-run/task-scheduler/scheduler-decision.d.ts +8 -0
  767. package/types/project-run/task-scheduler/scheduler.d.ts +3 -0
@@ -0,0 +1,45 @@
1
+ export function reservationUnchanged() {
2
+ return Object.freeze({ kind: "unchanged" });
3
+ }
4
+ export function reservationSet(taskId) {
5
+ return Object.freeze({ kind: "set", taskId });
6
+ }
7
+ export function reservationClear() {
8
+ return Object.freeze({ kind: "clear" });
9
+ }
10
+ export function freezeDecision(decision) {
11
+ const trigger = freezeTrigger(decision.trigger);
12
+ switch (decision.kind) {
13
+ case "admit":
14
+ case "await-running":
15
+ return Object.freeze({ ...decision, trigger });
16
+ case "settle-blocked":
17
+ return Object.freeze({
18
+ ...decision,
19
+ dependencyIds: Object.freeze([...decision.dependencyIds]),
20
+ trigger
21
+ });
22
+ case "cancel-pending":
23
+ return Object.freeze({ ...decision, taskIds: Object.freeze([...decision.taskIds]), trigger });
24
+ case "complete":
25
+ return Object.freeze({ ...decision, trigger });
26
+ }
27
+ }
28
+ function freezeTrigger(trigger) {
29
+ switch (trigger.kind) {
30
+ case "execution-started":
31
+ case "admission-continued":
32
+ case "cancellation-observed":
33
+ case "cancellation-applied":
34
+ return Object.freeze({ kind: trigger.kind });
35
+ case "blocked-settled":
36
+ return Object.freeze({ kind: trigger.kind, taskId: trigger.taskId });
37
+ case "task-settled":
38
+ return Object.freeze({
39
+ kind: trigger.kind,
40
+ settlementKind: trigger.settlementKind,
41
+ taskId: trigger.taskId
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=scheduler-decision-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-decision-model.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/scheduler-decision-model.ts"],"names":[],"mappings":"AA8GA,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAA2B;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,OAAO,CAAC;QACb,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,KAAK,gBAAgB;YACnB,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,GAAG,QAAQ;gBACX,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACzD,OAAO;aACR,CAAC,CAAC;QACL,KAAK,gBAAgB;YACnB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAChG,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAyB;IAC9C,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,mBAAmB,CAAC;QACzB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,sBAAsB;YACzB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,KAAK,iBAAiB;YACpB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;IACP,CAAC;AACH,CAAC","sourcesContent":["import type { PlannedTaskGraph } from \"./graph.ts\";\n\nexport type SchedulerSettlementKind = \"completed\" | \"failed\" | \"blocked\" | \"cancelled-before-start\";\n\nexport type SchedulerTrigger =\n | Readonly<{ readonly kind: \"execution-started\" }>\n | Readonly<{ readonly kind: \"admission-continued\" }>\n | Readonly<{ readonly kind: \"blocked-settled\"; readonly taskId: string }>\n | Readonly<{\n readonly kind: \"task-settled\";\n readonly settlementKind: SchedulerSettlementKind;\n readonly taskId: string;\n }>\n | Readonly<{ readonly kind: \"cancellation-observed\" }>\n | Readonly<{ readonly kind: \"cancellation-applied\" }>;\n\nexport interface SchedulerSnapshot {\n readonly graph: PlannedTaskGraph;\n readonly isAbortRequested: boolean;\n readonly isCancelled: boolean;\n readonly pendingTaskIds: readonly string[];\n readonly reservationTaskId: string | undefined;\n readonly runningMutexes: readonly string[];\n readonly runningTaskIds: readonly string[];\n readonly settledTasks: readonly Readonly<{\n readonly kind: SchedulerSettlementKind;\n readonly taskId: string;\n }>[];\n readonly activeScopeIds: readonly string[];\n readonly maxParallel: number;\n}\n\nexport interface SchedulerCapacity {\n readonly effectiveMaxParallel: number;\n readonly maxParallel: number;\n readonly running: number;\n}\n\nexport interface SchedulerBlockerSummary {\n readonly dependency: number;\n readonly mutex: number;\n readonly rootCapacity: boolean;\n readonly scopeCapacity: boolean;\n}\n\nexport interface SchedulerReservationContext {\n readonly taskId: string | null;\n}\n\nexport interface SchedulerDecisionContext {\n readonly blockers: SchedulerBlockerSummary;\n readonly capacity: SchedulerCapacity;\n readonly reservation: SchedulerReservationContext;\n}\n\nexport type ReservationUpdate =\n | Readonly<{ readonly kind: \"unchanged\" }>\n | Readonly<{ readonly kind: \"set\"; readonly taskId: string }>\n | Readonly<{ readonly kind: \"clear\" }>;\n\nexport type SchedulerAdmissionReason =\n | \"reservation\"\n | \"tightening-scope\"\n | \"constrained-continuation\"\n | \"canonical-order\";\n\nexport type SchedulerAwaitReason =\n | \"cancellation-drain\"\n | \"dependency-or-mutex\"\n | \"running-drain\"\n | \"root-capacity\"\n | \"active-scope-capacity\"\n | \"reserved-tightening-scope\";\n\nexport type SchedulerDecision = SchedulerDecisionContext &\n (\n | Readonly<{\n readonly eligibleCount: number;\n readonly kind: \"admit\";\n readonly reason: SchedulerAdmissionReason;\n readonly reservationUpdate: ReservationUpdate;\n readonly scopeToActivate: string | null;\n readonly taskId: string;\n readonly trigger: SchedulerTrigger;\n }>\n | Readonly<{\n readonly dependencyIds: readonly string[];\n readonly kind: \"settle-blocked\";\n readonly taskId: string;\n readonly trigger: SchedulerTrigger;\n }>\n | Readonly<{\n readonly eligibleCount: number;\n readonly kind: \"await-running\";\n readonly reason: SchedulerAwaitReason;\n readonly reservationUpdate: ReservationUpdate;\n readonly trigger: SchedulerTrigger;\n }>\n | Readonly<{\n readonly kind: \"cancel-pending\";\n readonly taskIds: readonly string[];\n readonly trigger: SchedulerTrigger;\n }>\n | Readonly<{\n readonly cancelled: boolean;\n readonly kind: \"complete\";\n readonly trigger: SchedulerTrigger;\n }>\n );\n\nexport function reservationUnchanged(): ReservationUpdate {\n return Object.freeze({ kind: \"unchanged\" });\n}\n\nexport function reservationSet(taskId: string): ReservationUpdate {\n return Object.freeze({ kind: \"set\", taskId });\n}\n\nexport function reservationClear(): ReservationUpdate {\n return Object.freeze({ kind: \"clear\" });\n}\n\nexport function freezeDecision(decision: SchedulerDecision): SchedulerDecision {\n const trigger = freezeTrigger(decision.trigger);\n switch (decision.kind) {\n case \"admit\":\n case \"await-running\":\n return Object.freeze({ ...decision, trigger });\n case \"settle-blocked\":\n return Object.freeze({\n ...decision,\n dependencyIds: Object.freeze([...decision.dependencyIds]),\n trigger\n });\n case \"cancel-pending\":\n return Object.freeze({ ...decision, taskIds: Object.freeze([...decision.taskIds]), trigger });\n case \"complete\":\n return Object.freeze({ ...decision, trigger });\n }\n}\n\nfunction freezeTrigger(trigger: SchedulerTrigger): SchedulerTrigger {\n switch (trigger.kind) {\n case \"execution-started\":\n case \"admission-continued\":\n case \"cancellation-observed\":\n case \"cancellation-applied\":\n return Object.freeze({ kind: trigger.kind });\n case \"blocked-settled\":\n return Object.freeze({ kind: trigger.kind, taskId: trigger.taskId });\n case \"task-settled\":\n return Object.freeze({\n kind: trigger.kind,\n settlementKind: trigger.settlementKind,\n taskId: trigger.taskId\n });\n }\n}\n"]}
@@ -0,0 +1,74 @@
1
+ import { decideAdmission } from "./scheduler-admission-decision.mjs";
2
+ import { decisionContext, inspectSnapshot, selectBlockedTask } from "./scheduler-decision-inspection.mjs";
3
+ import { freezeDecision, reservationUnchanged } from "./scheduler-decision-model.mjs";
4
+ /**
5
+ * Computes the next generic task-engine action from an immutable state projection.
6
+ * Starting work, awaiting promises, cancellation, and diagnostic output remain in
7
+ * the imperative scheduler shell.
8
+ */
9
+ export function decideScheduler(snapshot, trigger) {
10
+ const state = inspectSnapshot(snapshot);
11
+ const cycle = Object.freeze({
12
+ context: decisionContext(state),
13
+ state,
14
+ trigger
15
+ });
16
+ const terminalDecision = decideTerminalSchedulerAction(cycle, snapshot);
17
+ if (terminalDecision !== undefined)
18
+ return terminalDecision;
19
+ const blocked = selectBlockedTask(state);
20
+ if (blocked !== undefined) {
21
+ return freezeDecision({
22
+ ...cycle.context,
23
+ dependencyIds: blocked.dependencyIds,
24
+ kind: "settle-blocked",
25
+ taskId: blocked.task.id,
26
+ trigger
27
+ });
28
+ }
29
+ return decideAdmission(cycle);
30
+ }
31
+ function decideTerminalSchedulerAction(cycle, snapshot) {
32
+ if (cycle.state.pendingTasks.length === 0 && cycle.state.runningTaskIds.size === 0) {
33
+ return freezeDecision({
34
+ ...cycle.context,
35
+ cancelled: snapshot.isCancelled,
36
+ kind: "complete",
37
+ trigger: cycle.trigger
38
+ });
39
+ }
40
+ if (snapshot.isAbortRequested && !snapshot.isCancelled) {
41
+ return freezeDecision({
42
+ ...cycle.context,
43
+ kind: "cancel-pending",
44
+ taskIds: snapshot.pendingTaskIds,
45
+ trigger: Object.freeze({ kind: "cancellation-observed" })
46
+ });
47
+ }
48
+ if (snapshot.isCancelled) {
49
+ if (cycle.state.pendingTasks.length > 0) {
50
+ throw new Error("cancelled scheduler state retains pending tasks");
51
+ }
52
+ return cancellationDrainDecision(cycle);
53
+ }
54
+ if (cycle.state.pendingTasks.length === 0)
55
+ return runningDrainDecision(cycle);
56
+ return undefined;
57
+ }
58
+ function cancellationDrainDecision(cycle) {
59
+ return awaitDrainDecision(cycle, "cancellation-drain");
60
+ }
61
+ function runningDrainDecision(cycle) {
62
+ return awaitDrainDecision(cycle, "running-drain");
63
+ }
64
+ function awaitDrainDecision(cycle, reason) {
65
+ return freezeDecision({
66
+ ...cycle.context,
67
+ eligibleCount: 0,
68
+ kind: "await-running",
69
+ reason,
70
+ reservationUpdate: reservationUnchanged(),
71
+ trigger: cycle.trigger
72
+ });
73
+ }
74
+ //# sourceMappingURL=scheduler-decision.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-decision.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/scheduler-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA+B,MAAM,mCAAmC,CAAC;AACjG,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAcrF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,QAA2B,EAC3B,OAAyB;IAEzB,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAA2B,MAAM,CAAC,MAAM,CAAC;QAClD,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;QAC/B,KAAK;QACL,OAAO;KACR,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxE,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC;YACpB,GAAG,KAAK,CAAC,OAAO;YAChB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA6B,EAC7B,QAA2B;IAE3B,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,cAAc,CAAC;YACpB,GAAG,KAAK,CAAC,OAAO;YAChB,SAAS,EAAE,QAAQ,CAAC,WAAW;YAC/B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvD,OAAO,cAAc,CAAC;YACpB,GAAG,KAAK,CAAC,OAAO;YAChB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,QAAQ,CAAC,cAAc;YAChC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB,CAAC,KAA6B;IAC9D,OAAO,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA6B;IACzD,OAAO,kBAAkB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,kBAAkB,CACzB,KAA6B,EAC7B,MAAgF;IAEhF,OAAO,cAAc,CAAC;QACpB,GAAG,KAAK,CAAC,OAAO;QAChB,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM;QACN,iBAAiB,EAAE,oBAAoB,EAAE;QACzC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { decideAdmission, type SchedulerDecisionCycle } from \"./scheduler-admission-decision.ts\";\nimport {\n decisionContext,\n inspectSnapshot,\n selectBlockedTask\n} from \"./scheduler-decision-inspection.ts\";\nimport { freezeDecision, reservationUnchanged } from \"./scheduler-decision-model.ts\";\nimport type {\n SchedulerDecision,\n SchedulerSnapshot,\n SchedulerTrigger\n} from \"./scheduler-decision-model.ts\";\n\nexport type {\n SchedulerDecision,\n SchedulerSettlementKind,\n SchedulerSnapshot,\n SchedulerTrigger\n} from \"./scheduler-decision-model.ts\";\n\n/**\n * Computes the next generic task-engine action from an immutable state projection.\n * Starting work, awaiting promises, cancellation, and diagnostic output remain in\n * the imperative scheduler shell.\n */\nexport function decideScheduler(\n snapshot: SchedulerSnapshot,\n trigger: SchedulerTrigger\n): SchedulerDecision {\n const state = inspectSnapshot(snapshot);\n const cycle: SchedulerDecisionCycle = Object.freeze({\n context: decisionContext(state),\n state,\n trigger\n });\n const terminalDecision = decideTerminalSchedulerAction(cycle, snapshot);\n if (terminalDecision !== undefined) return terminalDecision;\n\n const blocked = selectBlockedTask(state);\n if (blocked !== undefined) {\n return freezeDecision({\n ...cycle.context,\n dependencyIds: blocked.dependencyIds,\n kind: \"settle-blocked\",\n taskId: blocked.task.id,\n trigger\n });\n }\n\n return decideAdmission(cycle);\n}\n\nfunction decideTerminalSchedulerAction(\n cycle: SchedulerDecisionCycle,\n snapshot: SchedulerSnapshot\n): SchedulerDecision | undefined {\n if (cycle.state.pendingTasks.length === 0 && cycle.state.runningTaskIds.size === 0) {\n return freezeDecision({\n ...cycle.context,\n cancelled: snapshot.isCancelled,\n kind: \"complete\",\n trigger: cycle.trigger\n });\n }\n if (snapshot.isAbortRequested && !snapshot.isCancelled) {\n return freezeDecision({\n ...cycle.context,\n kind: \"cancel-pending\",\n taskIds: snapshot.pendingTaskIds,\n trigger: Object.freeze({ kind: \"cancellation-observed\" })\n });\n }\n if (snapshot.isCancelled) {\n if (cycle.state.pendingTasks.length > 0) {\n throw new Error(\"cancelled scheduler state retains pending tasks\");\n }\n return cancellationDrainDecision(cycle);\n }\n if (cycle.state.pendingTasks.length === 0) return runningDrainDecision(cycle);\n return undefined;\n}\n\nfunction cancellationDrainDecision(cycle: SchedulerDecisionCycle): SchedulerDecision {\n return awaitDrainDecision(cycle, \"cancellation-drain\");\n}\n\nfunction runningDrainDecision(cycle: SchedulerDecisionCycle): SchedulerDecision {\n return awaitDrainDecision(cycle, \"running-drain\");\n}\n\nfunction awaitDrainDecision(\n cycle: SchedulerDecisionCycle,\n reason: Extract<SchedulerDecision, { readonly kind: \"await-running\" }>[\"reason\"]\n): SchedulerDecision {\n return freezeDecision({\n ...cycle.context,\n eligibleCount: 0,\n kind: \"await-running\",\n reason,\n reservationUpdate: reservationUnchanged(),\n trigger: cycle.trigger\n });\n}\n"]}
@@ -0,0 +1,147 @@
1
+ import { prepareTaskGraph } from "./graph.mjs";
2
+ import { diagnosticTags } from "../diagnostic-logging/logger.mjs";
3
+ import { decideScheduler } from "./scheduler-decision.mjs";
4
+ import { cancelPendingTasks, createSchedulerState, recordSettlement, snapshotSchedulerState } from "./execution-state.mjs";
5
+ export async function runTaskGraph(options) {
6
+ const graph = prepareTaskGraph(options.graph, options.maxParallel);
7
+ const state = createSchedulerState(graph, options);
8
+ let trigger = Object.freeze({ kind: "execution-started" });
9
+ while (true) {
10
+ const decision = decideScheduler(snapshotSchedulerState(state), trigger);
11
+ observeSchedulerDecision(state, decision);
12
+ switch (decision.kind) {
13
+ case "admit":
14
+ applyAdmission(state, decision);
15
+ trigger = Object.freeze({ kind: "admission-continued" });
16
+ continue;
17
+ case "settle-blocked":
18
+ applyBlockedSettlement(state, decision);
19
+ trigger = Object.freeze({ kind: "blocked-settled", taskId: decision.taskId });
20
+ continue;
21
+ case "cancel-pending":
22
+ applyCancellation(state, decision);
23
+ trigger = Object.freeze({ kind: "cancellation-applied" });
24
+ continue;
25
+ case "await-running": {
26
+ applyReservationUpdate(state, decision.reservationUpdate);
27
+ const completion = await nextRunningSettlement(state);
28
+ settleRunningTask(state, completion);
29
+ trigger = Object.freeze({
30
+ kind: "task-settled",
31
+ settlementKind: completion.settlement.kind,
32
+ taskId: completion.taskId
33
+ });
34
+ continue;
35
+ }
36
+ case "complete":
37
+ return buildTaskGraphRun(state);
38
+ }
39
+ }
40
+ }
41
+ function observeSchedulerDecision(state, decision) {
42
+ state.diagnosticLogger?.observe({
43
+ event: "scheduler.decision",
44
+ tags: schedulerDecisionTags(decision),
45
+ details: decision
46
+ });
47
+ }
48
+ function schedulerDecisionTags(decision) {
49
+ return diagnosticTags("SCHEDULER", decision.kind.toUpperCase(), ...("taskId" in decision ? [`TASK:${decision.taskId}`] : []));
50
+ }
51
+ function applyAdmission(state, decision) {
52
+ const task = takePendingTask(state, decision.taskId, "admission");
53
+ applyReservationUpdate(state, decision.reservationUpdate);
54
+ for (const mutex of task.mutex) {
55
+ state.runningMutexes.add(mutex);
56
+ }
57
+ activateScope(state, decision.scopeToActivate);
58
+ const completion = Promise.resolve()
59
+ .then(() => state.execute(task, Object.freeze({ signal: state.signal })))
60
+ .then((value) => completedTaskCompletion(task.id, value))
61
+ .catch((error) => failedTaskCompletion(task.id, error));
62
+ state.runningById.set(task.id, { task, completion });
63
+ }
64
+ function activateScope(state, scopeId) {
65
+ if (scopeId === null)
66
+ return;
67
+ const scope = state.scopesById.get(scopeId);
68
+ if (scope === undefined)
69
+ throw new Error(`scheduler admission references unknown scope ${scopeId}`);
70
+ scope.isActive = true;
71
+ }
72
+ function applyBlockedSettlement(state, decision) {
73
+ const task = takePendingTask(state, decision.taskId, "blocked settlement");
74
+ recordSettlement(state, task, Object.freeze({ kind: "blocked", dependencyIds: decision.dependencyIds }));
75
+ }
76
+ function applyCancellation(state, decision) {
77
+ const pendingTaskIds = state.pending.map((task) => task.id);
78
+ if (!sameTaskIds(pendingTaskIds, decision.taskIds)) {
79
+ throw new Error("scheduler cancellation decision no longer matches pending tasks");
80
+ }
81
+ if ((state.reservationTaskId ?? null) !== decision.reservation.taskId) {
82
+ throw new Error("scheduler cancellation decision no longer matches reservation state");
83
+ }
84
+ cancelPendingTasks(state);
85
+ }
86
+ function applyReservationUpdate(state, reservation) {
87
+ switch (reservation.kind) {
88
+ case "unchanged":
89
+ return;
90
+ case "set":
91
+ state.reservationTaskId = reservation.taskId;
92
+ return;
93
+ case "clear":
94
+ state.reservationTaskId = undefined;
95
+ return;
96
+ }
97
+ }
98
+ function takePendingTask(state, taskId, action) {
99
+ const index = state.pending.findIndex((task) => task.id === taskId);
100
+ if (index < 0)
101
+ throw new Error(`task ${taskId} is not pending for ${action}`);
102
+ const [task] = state.pending.splice(index, 1);
103
+ if (task === undefined)
104
+ throw new Error(`task ${taskId} disappeared during ${action}`);
105
+ return task;
106
+ }
107
+ async function nextRunningSettlement(state) {
108
+ if (state.runningById.size === 0) {
109
+ throw new Error("scheduler cannot await a task when no task is running");
110
+ }
111
+ return Promise.race([...state.runningById.values()].map((running) => running.completion));
112
+ }
113
+ function settleRunningTask(state, result) {
114
+ const running = state.runningById.get(result.taskId);
115
+ if (running === undefined) {
116
+ throw new Error(`task ${result.taskId} settled without admission`);
117
+ }
118
+ state.runningById.delete(result.taskId);
119
+ for (const mutex of running.task.mutex) {
120
+ state.runningMutexes.delete(mutex);
121
+ }
122
+ recordSettlement(state, running.task, result.settlement);
123
+ }
124
+ function completedTaskCompletion(taskId, value) {
125
+ const settlement = { kind: "completed", value };
126
+ return Object.freeze({ taskId, settlement: Object.freeze(settlement) });
127
+ }
128
+ function failedTaskCompletion(taskId, error) {
129
+ const settlement = { kind: "failed", error };
130
+ return Object.freeze({ taskId, settlement: Object.freeze(settlement) });
131
+ }
132
+ function buildTaskGraphRun(state) {
133
+ return Object.freeze({
134
+ cancelled: state.isCancelled,
135
+ settlements: Object.freeze(state.graph.tasks.map((task) => {
136
+ const settlement = state.settlementsByTaskId.get(task.id);
137
+ if (settlement === undefined) {
138
+ throw new Error(`task ${task.id} was not settled`);
139
+ }
140
+ return Object.freeze({ task, settlement });
141
+ }))
142
+ });
143
+ }
144
+ function sameTaskIds(left, right) {
145
+ return left.length === right.length && left.every((taskId, index) => taskId === right[index]);
146
+ }
147
+ //# sourceMappingURL=scheduler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.mjs","sourceRoot":"","sources":["../../../../src/project-run/task-scheduler/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,eAAe,EAGhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EAMvB,MAAM,sBAAsB,CAAC;AAU9B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAqC;IAErC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,OAAO,GAAqB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE7E,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE1C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,OAAO;gBACV,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;gBACzD,SAAS;YACX,KAAK,gBAAgB;gBACnB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACxC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,SAAS;YACX,KAAK,gBAAgB;gBACnB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACnC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBAC1D,SAAS;YACX,KAAK,eAAe,EAAE,CAAC;gBACrB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACtD,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACrC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;oBACtB,IAAI,EAAE,cAAc;oBACpB,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI;oBAC1C,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,KAAK,UAAU;gBACb,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA8B,EAC9B,QAA2B;IAE3B,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;QAC9B,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,qBAAqB,CAAC,QAAQ,CAAC;QACrC,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA2B;IACxD,OAAO,cAAc,CACnB,WAAW,EACX,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAC3B,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAA8B,EAC9B,QAAgE;IAEhE,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClE,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE;SACjC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACxE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SACxD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,oBAAoB,CAAU,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAU,KAA8B,EAAE,OAAsB;IACpF,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,SAAS;QACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;IAC7E,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA8B,EAC9B,QAAyE;IAEzE,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC3E,gBAAgB,CACd,KAAK,EACL,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA8B,EAC9B,QAAyE;IAEzE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA8B,EAC9B,WAGsB;IAEtB,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,KAAK,WAAW;YACd,OAAO;QACT,KAAK,KAAK;YACR,KAAK,CAAC,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;YAC7C,OAAO;QACT,KAAK,OAAO;YACV,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACpC,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAA8B,EAC9B,MAAc,EACd,MAAc;IAEd,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACpE,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,uBAAuB,MAAM,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,uBAAuB,MAAM,EAAE,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAA8B;IAE9B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA8B,EAC9B,MAAsC;IAEtC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,MAAM,4BAA4B,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAc,EACd,KAAc;IAEd,MAAM,UAAU,GAA4B,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAc,EACd,KAAc;IAEd,MAAM,UAAU,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAU,KAA8B;IAChE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,KAAK,CAAC,WAAW;QAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,CACxB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CACH;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB,EAAE,KAAwB;IACpE,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,CAAC","sourcesContent":["import { prepareTaskGraph, type PlannedTask } from \"./graph.ts\";\nimport { diagnosticTags } from \"../diagnostic-logging/logger.ts\";\nimport {\n decideScheduler,\n type SchedulerDecision,\n type SchedulerTrigger\n} from \"./scheduler-decision.ts\";\nimport {\n cancelPendingTasks,\n createSchedulerState,\n recordSettlement,\n snapshotSchedulerState,\n type RunningTaskCompletion,\n type RunTaskGraphOptions,\n type SchedulerState,\n type TaskGraphRun,\n type TaskSettlement\n} from \"./execution-state.ts\";\n\nexport type {\n RunTaskGraphOptions,\n SettledTask,\n TaskExecutionContext,\n TaskGraphRun,\n TaskSettlement\n} from \"./execution-state.ts\";\n\nexport async function runTaskGraph<TResult>(\n options: RunTaskGraphOptions<TResult>\n): Promise<TaskGraphRun<TResult>> {\n const graph = prepareTaskGraph(options.graph, options.maxParallel);\n const state = createSchedulerState(graph, options);\n let trigger: SchedulerTrigger = Object.freeze({ kind: \"execution-started\" });\n\n while (true) {\n const decision = decideScheduler(snapshotSchedulerState(state), trigger);\n observeSchedulerDecision(state, decision);\n\n switch (decision.kind) {\n case \"admit\":\n applyAdmission(state, decision);\n trigger = Object.freeze({ kind: \"admission-continued\" });\n continue;\n case \"settle-blocked\":\n applyBlockedSettlement(state, decision);\n trigger = Object.freeze({ kind: \"blocked-settled\", taskId: decision.taskId });\n continue;\n case \"cancel-pending\":\n applyCancellation(state, decision);\n trigger = Object.freeze({ kind: \"cancellation-applied\" });\n continue;\n case \"await-running\": {\n applyReservationUpdate(state, decision.reservationUpdate);\n const completion = await nextRunningSettlement(state);\n settleRunningTask(state, completion);\n trigger = Object.freeze({\n kind: \"task-settled\",\n settlementKind: completion.settlement.kind,\n taskId: completion.taskId\n });\n continue;\n }\n case \"complete\":\n return buildTaskGraphRun(state);\n }\n }\n}\n\nfunction observeSchedulerDecision<TResult>(\n state: SchedulerState<TResult>,\n decision: SchedulerDecision\n): void {\n state.diagnosticLogger?.observe({\n event: \"scheduler.decision\",\n tags: schedulerDecisionTags(decision),\n details: decision\n });\n}\n\nfunction schedulerDecisionTags(decision: SchedulerDecision): readonly string[] {\n return diagnosticTags(\n \"SCHEDULER\",\n decision.kind.toUpperCase(),\n ...(\"taskId\" in decision ? [`TASK:${decision.taskId}`] : [])\n );\n}\n\nfunction applyAdmission<TResult>(\n state: SchedulerState<TResult>,\n decision: Extract<SchedulerDecision, { readonly kind: \"admit\" }>\n): void {\n const task = takePendingTask(state, decision.taskId, \"admission\");\n applyReservationUpdate(state, decision.reservationUpdate);\n for (const mutex of task.mutex) {\n state.runningMutexes.add(mutex);\n }\n activateScope(state, decision.scopeToActivate);\n\n const completion = Promise.resolve()\n .then(() => state.execute(task, Object.freeze({ signal: state.signal })))\n .then((value) => completedTaskCompletion(task.id, value))\n .catch((error: unknown) => failedTaskCompletion<TResult>(task.id, error));\n state.runningById.set(task.id, { task, completion });\n}\n\nfunction activateScope<TResult>(state: SchedulerState<TResult>, scopeId: string | null): void {\n if (scopeId === null) return;\n const scope = state.scopesById.get(scopeId);\n if (scope === undefined)\n throw new Error(`scheduler admission references unknown scope ${scopeId}`);\n scope.isActive = true;\n}\n\nfunction applyBlockedSettlement<TResult>(\n state: SchedulerState<TResult>,\n decision: Extract<SchedulerDecision, { readonly kind: \"settle-blocked\" }>\n): void {\n const task = takePendingTask(state, decision.taskId, \"blocked settlement\");\n recordSettlement(\n state,\n task,\n Object.freeze({ kind: \"blocked\", dependencyIds: decision.dependencyIds })\n );\n}\n\nfunction applyCancellation<TResult>(\n state: SchedulerState<TResult>,\n decision: Extract<SchedulerDecision, { readonly kind: \"cancel-pending\" }>\n): void {\n const pendingTaskIds = state.pending.map((task) => task.id);\n if (!sameTaskIds(pendingTaskIds, decision.taskIds)) {\n throw new Error(\"scheduler cancellation decision no longer matches pending tasks\");\n }\n if ((state.reservationTaskId ?? null) !== decision.reservation.taskId) {\n throw new Error(\"scheduler cancellation decision no longer matches reservation state\");\n }\n cancelPendingTasks(state);\n}\n\nfunction applyReservationUpdate<TResult>(\n state: SchedulerState<TResult>,\n reservation: Extract<\n SchedulerDecision,\n { readonly kind: \"admit\" | \"await-running\" }\n >[\"reservationUpdate\"]\n): void {\n switch (reservation.kind) {\n case \"unchanged\":\n return;\n case \"set\":\n state.reservationTaskId = reservation.taskId;\n return;\n case \"clear\":\n state.reservationTaskId = undefined;\n return;\n }\n}\n\nfunction takePendingTask<TResult>(\n state: SchedulerState<TResult>,\n taskId: string,\n action: string\n): PlannedTask {\n const index = state.pending.findIndex((task) => task.id === taskId);\n if (index < 0) throw new Error(`task ${taskId} is not pending for ${action}`);\n const [task] = state.pending.splice(index, 1);\n if (task === undefined) throw new Error(`task ${taskId} disappeared during ${action}`);\n return task;\n}\n\nasync function nextRunningSettlement<TResult>(\n state: SchedulerState<TResult>\n): Promise<RunningTaskCompletion<TResult>> {\n if (state.runningById.size === 0) {\n throw new Error(\"scheduler cannot await a task when no task is running\");\n }\n return Promise.race([...state.runningById.values()].map((running) => running.completion));\n}\n\nfunction settleRunningTask<TResult>(\n state: SchedulerState<TResult>,\n result: RunningTaskCompletion<TResult>\n): void {\n const running = state.runningById.get(result.taskId);\n if (running === undefined) {\n throw new Error(`task ${result.taskId} settled without admission`);\n }\n state.runningById.delete(result.taskId);\n for (const mutex of running.task.mutex) {\n state.runningMutexes.delete(mutex);\n }\n recordSettlement(state, running.task, result.settlement);\n}\n\nfunction completedTaskCompletion<TResult>(\n taskId: string,\n value: TResult\n): RunningTaskCompletion<TResult> {\n const settlement: TaskSettlement<TResult> = { kind: \"completed\", value };\n return Object.freeze({ taskId, settlement: Object.freeze(settlement) });\n}\n\nfunction failedTaskCompletion<TResult>(\n taskId: string,\n error: unknown\n): RunningTaskCompletion<TResult> {\n const settlement: TaskSettlement<TResult> = { kind: \"failed\", error };\n return Object.freeze({ taskId, settlement: Object.freeze(settlement) });\n}\n\nfunction buildTaskGraphRun<TResult>(state: SchedulerState<TResult>): TaskGraphRun<TResult> {\n return Object.freeze({\n cancelled: state.isCancelled,\n settlements: Object.freeze(\n state.graph.tasks.map((task) => {\n const settlement = state.settlementsByTaskId.get(task.id);\n if (settlement === undefined) {\n throw new Error(`task ${task.id} was not settled`);\n }\n return Object.freeze({ task, settlement });\n })\n )\n });\n}\n\nfunction sameTaskIds(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((taskId, index) => taskId === right[index]);\n}\n"]}
@@ -0,0 +1,205 @@
1
+ # 深入理解 Vibe Check API 机制
2
+
3
+ 本文说明 package 的通用 invocation lifecycle:自定义 Check 如何经过 Definition validation、options preflight、execution 与 settlement,以及一次 Run 如何形成 dependency data、aggregation、outputs 和可判别结果。首次集成先阅读[package README](../README.md);随包 Check 的 options、业务效果和安全边界由各自指南说明;单个 public 字段与函数签名以 installed declarations 为准。
4
+
5
+ ## 一次 Run 的生命周期
6
+
7
+ 以下顺序描述责任与数据流;箭头表示当前阶段成功形成下一阶段的输入:
8
+
9
+ ordinary Check values
10
+ │ defineConfig: fill Definition defaults
11
+ ▼
12
+ Project Definition
13
+ │ run: validate Definition + RunControls, then normalize the Check tree
14
+ ▼
15
+ declarative snapshot + fingerprint + complete static graph validation
16
+ │ sequential all-Check preflight barrier
17
+ ▼
18
+ prepared Checks / blocked unavailable outcomes
19
+ │ build the ready task graph; apply dependency, mutex and parallel scheduling
20
+ ▼
21
+ author execution + terminal settlement
22
+ ▼
23
+ snapshot + messages + durations
24
+ │ optional aggregation + enabled output completion
25
+ ▼
26
+ RunResult
27
+
28
+ Run 在 preflight 前验证包含全部可执行 Check 的静态 task graph;完整 barrier 结束后,blocked Check 先结算为
29
+ `unavailable`,其余 prepared Checks 再形成 ready task graph。Run snapshot 保存 Check facts;progress rendering 呈现
30
+ execution lifecycle;machine publication 在 terminal snapshot 形成后写入 machine files。所有 author execution 都在完整
31
+ preflight barrier 之后开始,optional aggregate 也在 terminal facts 结算后计算。
32
+
33
+ ## Definition 与 invocation 的责任
34
+
35
+ - `defineCheck(value)` 保留 literal `checkId`、options 和 typed-provider parser 的 TypeScript inference。它与同 shape 普通 Check object 具有相同 runtime 语义。
36
+ - `defineConfig(value)` 形成带默认 `apiVersion`、outputs 和 scheduler policy 的 Project Definition。
37
+ - `run(definition, controls?)` 拥有 invocation validation 与 normalization:它关闭递归 Check grammar,detach / canonicalize authored options,并形成 declarative snapshot 与 fingerprint。
38
+
39
+ fingerprint 使用 normalized declarative fields;preflight 与 execution callbacks 保持为执行行为。同一份 Definition 可以重复调用,每次 Run 都从 authored input 派生自己的 project context、prepared options、terminal facts 和 output statuses。
40
+
41
+ ## options preflight 与 execution
42
+
43
+ 可执行 Check 可以提供 `preflight(options, signal)`,在 author execution 前准备本次 invocation 使用的 options。authored 与 prepared options 同形时可以直接使用 authored options;两种 shape 不同时,TypeScript 要求提供 preflight。
44
+
45
+ preflight 返回以下三种 closed result 之一:
46
+
47
+ | 结果 | execution 输入与 Check outcome |
48
+ | --- | --- |
49
+ | `{ status: "success", preparedOptions, messages? }` | 使用 `preparedOptions` 进入 execution。 |
50
+ | `{ status: "failure", action: "block", reason, messages? }` | owning Check 以 `unavailable` 结算。 |
51
+ | `{ status: "failure", action: "continue", reason, fallback, messages? }` | 使用 `fallback` 进入 execution。 |
52
+
53
+ Run 按 Definition 顺序执行所有 Check 的 preflight,完整 barrier 结束后才启动 Check scheduler。preflight throw、malformed result 或 noncanonical prepared value 把 owning Check 结算为 `unavailable`。prepared options 与 fallback 都会成为 detached、deep-frozen 的 invocation-local value;preflight messages 与后续 terminal outcome 共同呈现 preparation 结果。
54
+
55
+ Package root 的 `defaultProjectFileSelection` 只是 file-selecting constructor 共用的可组合、深冻结 baseline;spread 该
56
+ value 不会建立跨 Check global config。部分 constructor 原样物化它,具有更窄文件类型能力的 constructor 从相同
57
+ source/exclude 派生精准默认 include;显式 `include` / `exclude` 数组始终由 owning Check 视为完整替换。每项实际默认与
58
+ selected-but-rejected 行为由对应 Check 指南说明。
59
+
60
+ ## terminal result、Records 与 messages
61
+
62
+ 每个可执行 Check 返回一个 terminal result:`passed` / `failed` 带 Check-owned object final data;`not-applicable` / `unavailable` 以 reason 表示本次调用的数据边界。settlement 会 detach、canonicalize 并关闭 final data;callback throw、malformed result 或 noncanonical data 对应 `unavailable` outcome。
63
+
64
+ `records.report({ id }, data)` 在 owning Check namespace 内追加 supplemental Record。每个 `id` 非空且在该 Check 内唯一,Record data 使用 canonical JSON object;无效或重复 Record 把 owning Check 结算为 `unavailable`。settlement 保留此前已经接受的 Records。
65
+
66
+ `messages?` 是 owning Check 可选的有序人读说明;consumer 必须先按 outcome 处理事实,不能用 message presence 推断状态。final data、Records 和 messages 分别承载主要事实、补充事实和人读说明。随包 Check 的额外 message 保证由各自指南说明。
67
+
68
+ ## Finding waiver reconciliation
69
+
70
+ `reconcileFindingWaivers({ findings, identify, waivers })` 是 package root 提供的独立 helper,供 custom Check 或其它
71
+ finding producer 在**完整** finding 候选集合形成后对账。`identify(finding)` 对输入顺序中的每个原 finding 接收完整
72
+ finding;调用方自行选择稳定的语义 identity,例如 path、function name 和 metric 的组合。`identify` 的结果与
73
+ `waiver.identity` 都必须可安全 materialize 为 canonical JSON,helper 按 canonical JSON 的结构而非对象引用匹配。
74
+
75
+ 每项 waiver 的 identity 必须唯一且 reason 为非空 string。重复 canonical identity、无法 canonicalize 的 finding 或
76
+ waiver identity、无效 reason,或 malformed / hostile waiver authoring 都抛出 `TypeError`。每个 configured waiver 都在完整
77
+ 集合上获得 audit:`0` 次匹配是 `unused`,`1` 次是 `applied`,`>1` 次是 `overmatched`;过宽 waiver 不会豁免任一 finding。
78
+
79
+ 输出 `findings` 保持输入顺序,并在每项结果中保留同一个原 finding reference。applied waiver 附带的 evidence 是 detached、
80
+ deep-frozen 的 canonical materialization,因此调用方之后修改 authored identity 或 reason 不会改变结果。helper 只返回
81
+ finding disposition 和 waiver audit;它不发布 Record、message 或 terminal outcome。采用它的 Check 自己决定如何发布证据及
82
+ 如何结算 actionable finding。
83
+
84
+ ## 递归组合与继承
85
+
86
+ 带 `execution` 的节点形成自己的 outcome;没有 `execution` 的节点只组织子 Check 和 scheduling scope。普通对象字段表示显式 replacement;`inherit({ add, remove })` 只用于在父 `dependsOn` 或 `mutex` collection 上增删。解析后,每个可执行节点拥有自己的 effective options、dependencies、mutexes、visibility 与 parallel budget。
87
+
88
+ ## 类型化依赖数据
89
+
90
+ producer 同时声明 `execution` 与 `parseData`,从而拥有 final-data contract。consumer 先声明 direct `dependsOn`,再用非泛型 `dependencies.get(checkId)` 读取 canonical data、收窄 `ok`,最后调用 producer 的 parser。
91
+
92
+ ### 完整运行示例
93
+
94
+ ```ts
95
+ import { defineCheck, defineConfig, run } from "@zxyycom/vibe-check";
96
+
97
+ const CHANGED_FILES_DATA_VERSION = 1 as const;
98
+
99
+ type ChangedFilesData = Readonly<{
100
+ readonly files: readonly string[];
101
+ readonly version: typeof CHANGED_FILES_DATA_VERSION;
102
+ }>;
103
+
104
+ const changedFiles = defineCheck({
105
+ checkId: "changed-files",
106
+ displayName: "Changed files",
107
+ parseData(data): ChangedFilesData {
108
+ if (
109
+ data.version !== CHANGED_FILES_DATA_VERSION ||
110
+ !Array.isArray(data.files) ||
111
+ !data.files.every((value): value is string => typeof value === "string")
112
+ ) {
113
+ throw new TypeError("Unsupported changed-files data");
114
+ }
115
+ return { files: data.files, version: data.version };
116
+ },
117
+ execution() {
118
+ return {
119
+ status: "passed",
120
+ data: { files: ["src/index.ts"], version: CHANGED_FILES_DATA_VERSION }
121
+ };
122
+ }
123
+ });
124
+
125
+ const analyzeChangedFiles = defineCheck({
126
+ checkId: "analyze-changed-files",
127
+ displayName: "Analyze changed files",
128
+ dependsOn: [changedFiles.checkId],
129
+ execution({ dependencies }) {
130
+ const read = dependencies.get(changedFiles.checkId);
131
+ if (!read.ok) return { status: "unavailable", reason: { code: read.error.code } };
132
+
133
+ const data = changedFiles.parseData(read.data);
134
+ return { status: read.status, data: { analyzedFileCount: data.files.length } };
135
+ }
136
+ });
137
+
138
+ const definition = defineConfig({
139
+ checks: [changedFiles, analyzeChangedFiles],
140
+ outputs: {
141
+ diagnosticLogging: { enabled: false },
142
+ machinePublication: { enabled: false },
143
+ progressRendering: { enabled: false }
144
+ }
145
+ });
146
+
147
+ const result = await run(definition);
148
+ if (result.kind !== "completed") throw new Error(`Run did not complete: ${result.kind}`);
149
+ ```
150
+
151
+ dependency reader 为已声明且具有 `passed` / `failed` final data 的 direct dependency 返回 `ok: true`,并保留 upstream status;其它读取返回包含原因的 `ok: false`。producer parser 负责 shape、invariant 和 compatibility validation,consumer 显式调用它恢复 provider data。七个随包 Check 都提供 `parseData` 和同实现的 package-root parser;名称与类型见各自指南。
152
+
153
+ ## RunControls 与 Check aggregation
154
+
155
+ `RunControls` 只作用于一次 `run(definition, controls)`:
156
+
157
+ - `projectRoot` 决定项目相对路径的解析根。
158
+ - `flags` 成为 callback 可读的 normalized project context。
159
+ - `signal` 供 preflight 与 execution 协作取消;取消结果记录对应 phase。
160
+ - `outputs` 覆盖本次 diagnostic logging、machine publication 或 progress rendering。
161
+ - `checkAggregation` 选择 `checks`,并以 `all` / `any`、`unavailable`、`notApplicable` 与 `empty` policy 形成 invocation aggregate。
162
+
163
+ aggregation 是 terminal outcomes 之外的 invocation-level fact。它在完整 terminal facts 结算后产生 `passed`、`failed`、`not-applicable` 或 `unavailable`;未配置 policy 时 `aggregate` 为 `null`。consumer 需要调用级结论时显式选择 policy,同时保留每项 Check outcome。
164
+
165
+ Check-specific invocation facts 由 owning Check 的 options 或 producing Check 的 final data 承载。多个 Checks 共享同一事实时,producer 负责 acquisition policy 与 data shape,下游通过 direct `dependsOn` 读取;上面的 typed dependency 示例聚焦这条 data handoff。
166
+
167
+ ## outputs 与 RunResult 边界
168
+
169
+ Definition outputs 提供 diagnostic logging、machine publication 与 progress rendering 三项独立 defaults,RunControls 可以只覆盖当前调用需要的部分。configuration 成功后的职责如下:
170
+
171
+ - 只有 diagnostic logging 或 machine publication 至少一项启用时,Run 才在创建 invocation 阶段捕获一次 immutable wall-clock `startedAtUtc`;两项都禁用时不读取或序列化 wall clock。
172
+ - 启用的 diagnostic logging 在 preflight 前以该 instant 命名 UTC-compact log path,并按事实形成顺序记录 Product core 已知的 invocation、planning、scheduler、handoff 与 output 时间线。每个事件以序号、单调 elapsed、可筛选的 `[]` 标签和 event name 开始;普通事实使用 `key=value`,超出当前主行容量的事实进入有界 continuation line。标签只突出 Run、Check、phase、Scheduler decision 和 outcome 等高频阅读轴;Scheduler decision 的顶层 `kind` / `taskId` 与 Record observation 的顶层 `result` 已由标签完整表达时,不在 facts 中重复。
173
+ - 启用的 machine publication 将同一个 instant 投影为 `run.json` 的 `invocation.timestamp`,所以 timestamp 不是 publication 完成时间;两项同时启用时,日志文件名与 machine timestamp 必须共享该一次捕获。
174
+ - progress rendering 呈现人读 lifecycle。三项 output 都由 Run 调度,并分别返回 status。
175
+
176
+ 这些 diagnostic 行不建立可解析 schema。Run 结束前最后一条可写 diagnostic event 是 `run.terminal-before-log-close`:它只证明 terminal fact 已写入、logger close 尚未确认,随后才尝试关闭日志。
177
+
178
+ 只有 non-configuration `RunResult` 具有有效 output configuration 与 `outputs` readback。此时
179
+ `outputs.diagnosticLogging` 的形状为 `{ enabled, status, file }`,其中 `status` 是
180
+ `"disabled" | "not-run" | "succeeded" | "failed"`;禁用时 `file` 为 `null`,启用时即使文件创建失败也保留预先计算的、
181
+ project-root-relative `run-<UTC 紧凑时间>-<UUID>.log` 目标。无效 Definition、controls 或 aggregation selection 直接返回
182
+ configuration diagnostic,不创建诊断日志。
183
+
184
+ diagnostic logging 只服务当前人工诊断:它没有 parser、schema/version、跨版本格式兼容、`latest`、retention 或跨 invocation
185
+ discovery contract,也不替代 Check final data、Record、terminal message 或 Check/process adapter 自有的 transcript。logging
186
+ failure 只把该 output 标为 failed,不改写已形成的 Check/Record facts,也不阻断 progress rendering 或 machine publication 的
187
+ 闭合。多个 output 都失败时,`RunResult.outputs` 保留每项 status;唯一 `output` diagnostic 依次选择 progress rendering、
188
+ machine publication、diagnostic logging。diagnostic logging 不进入 machine v4;其 machine-field 排除见
189
+ [机器输出契约](output.md)。Check final-data parser 只处理已经取得的单个 data object,不替代该契约。
190
+
191
+ progress rendering 在 TTY 中维护 running region,在 plain output 与 `TERM=dumb` 中只追加 settled rows。`visibility: "attention"` 只隐藏无 messages 的 passed settled row,不改变 outcome、Records 或 machine output;accepted message 的 code 保留在 `RunResult.checkMessages`,终端只呈现 level 与正文。renderer failure 进入对应 output status,不改写已形成的 Check facts。
192
+
193
+ 按 `RunResult.kind` 和 cancellation phase 读取结果:
194
+
195
+ | 分支 | 可用 facts 与处理方式 |
196
+ | --- | --- |
197
+ | `completed` | 完整 `snapshot`、`checkDurations`、`checkMessages`、`outputs` 与可选 `aggregate`;继续读取单项 Check outcome。 |
198
+ | `output` | 完整 Check facts 与 output failure diagnostic;消费 facts 并处理失败的 output。 |
199
+ | `cancelled` / `phase: "execution"` | 取消时关闭的 snapshot、durations 与 messages;按 cancellation result 处理。 |
200
+ | `cancelled` / `phase: "pre-work"` 或 `"planning"` | invocation metadata 与 cancellation phase;按 phase 结束调用。 |
201
+ | `configuration` | Definition、controls 或 aggregation selection diagnostic;project callback 执行数为零。 |
202
+ | `planning` | task-graph diagnostic 与 invocation metadata。 |
203
+ | `execution` | Product execution-settlement diagnostic 与 invocation metadata。 |
204
+
205
+ Check `failed` 是已结算的业务 outcome;Run `execution` 是 invocation infrastructure diagnostic;Run `output` 是完整 Check facts 附带的 diagnostic logging、publication 或 rendering failure diagnostic。