@zxyycom/vibe-check 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1190) hide show
  1. package/README.md +79 -75
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +2 -2
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs +17 -23
  15. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
  19. package/dist/esm/check-settlement/reason-shape.mjs +12 -0
  20. package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
  21. package/dist/esm/check-settlement/record-store.mjs +14 -17
  22. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  23. package/dist/esm/check-settlement/session.mjs +8 -2
  24. package/dist/esm/check-settlement/session.mjs.map +1 -1
  25. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  26. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  27. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  28. package/dist/esm/data-boundary/closed-values.mjs +43 -3
  29. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  30. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  31. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  32. package/dist/esm/data-boundary/project-path.mjs +19 -0
  33. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  34. package/dist/esm/data-boundary/value-shapes.mjs +9 -0
  35. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
  36. package/dist/esm/index.mjs +16 -2
  37. package/dist/esm/index.mjs.map +1 -1
  38. package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
  39. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  40. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  41. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  42. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
  43. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
  44. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
  45. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
  46. package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
  47. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
  48. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  49. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  50. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  51. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  52. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  53. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  54. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  55. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  56. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  57. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  58. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
  59. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
  60. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
  61. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
  62. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
  63. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  64. package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
  65. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  66. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
  67. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
  68. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
  69. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
  70. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
  71. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  72. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
  73. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
  74. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
  75. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
  76. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
  77. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
  78. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
  79. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
  80. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
  81. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
  82. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  83. package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
  84. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  85. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  86. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  87. package/dist/esm/package-checks/file-metrics/execution.mjs +11 -20
  88. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  89. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
  90. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
  91. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
  92. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
  93. package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
  94. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
  95. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  96. package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
  97. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  98. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
  99. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  100. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  101. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  102. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  103. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  104. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
  105. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
  106. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
  107. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  108. package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
  109. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  110. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
  111. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
  112. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
  113. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
  114. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
  115. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
  116. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
  117. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
  118. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
  119. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
  120. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
  121. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
  122. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
  123. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
  124. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
  125. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
  126. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
  127. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
  128. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
  129. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
  130. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
  131. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
  132. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
  133. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
  134. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
  135. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
  136. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
  137. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
  138. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
  139. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
  140. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
  141. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
  142. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
  143. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
  144. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
  145. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
  146. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
  147. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
  148. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
  149. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
  150. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
  151. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
  152. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
  153. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
  154. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
  155. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
  156. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
  157. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
  158. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
  159. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
  160. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
  161. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
  162. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
  163. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
  164. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
  165. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
  166. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
  167. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
  168. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
  169. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
  170. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
  171. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
  172. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
  173. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
  174. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
  175. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
  176. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
  177. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
  178. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
  179. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
  180. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
  181. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
  182. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
  183. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
  184. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
  185. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
  186. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
  187. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
  188. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
  189. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
  190. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
  191. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
  192. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
  193. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
  194. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
  195. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
  196. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
  197. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
  198. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
  199. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
  200. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
  201. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
  202. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
  203. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
  204. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
  205. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
  206. package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
  207. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  208. package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
  209. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  210. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
  211. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
  212. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
  213. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
  214. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
  215. package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
  216. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  217. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
  218. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
  219. package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
  220. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
  221. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  222. package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
  223. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  224. package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
  225. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
  226. package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
  227. package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
  228. package/dist/esm/package-checks/host-environment/git.mjs +12 -1
  229. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  230. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  231. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  232. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  233. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  234. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  235. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  236. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  237. package/dist/esm/package-checks/host-environment/process.mjs +5 -0
  238. package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
  239. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  240. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  241. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
  242. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
  243. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
  244. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  245. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  246. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  247. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  248. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  249. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  250. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  251. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
  252. package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
  253. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
  254. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  255. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  256. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  257. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
  258. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  259. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  260. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  261. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  262. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -27
  263. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  264. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
  265. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  266. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
  267. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
  268. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
  269. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
  270. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
  271. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
  272. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
  273. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
  274. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  275. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  276. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +10 -3
  277. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  278. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +12 -11
  279. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  280. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  281. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +184 -0
  282. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
  283. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
  284. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
  285. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
  286. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
  287. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
  288. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
  289. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
  290. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
  291. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  292. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  293. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  294. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  295. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  296. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  297. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  298. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  299. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  300. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  301. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  302. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  303. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  304. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  305. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  306. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  307. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  308. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  309. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  310. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  311. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  312. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  313. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  314. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  315. package/dist/esm/package-checks/project-files/collection.mjs +24 -20
  316. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  317. package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
  318. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  319. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
  320. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  321. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
  322. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  323. package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
  324. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
  325. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  326. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  327. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +12 -16
  328. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  329. package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
  330. package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
  331. package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
  332. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
  333. package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
  334. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
  335. package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
  336. package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
  337. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
  338. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
  339. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
  340. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
  341. package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
  342. package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
  343. package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
  344. package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
  345. package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
  346. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
  347. package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
  348. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
  349. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
  350. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
  351. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  352. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  353. package/dist/esm/package-tools/cache/cache-json-by-key.mjs +188 -0
  354. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  355. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -0
  356. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  357. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  358. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  359. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs +46 -0
  360. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  361. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs +56 -0
  362. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  363. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
  364. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  365. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
  366. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  367. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs +109 -0
  368. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  369. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
  370. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  371. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
  372. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  373. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs +55 -0
  374. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  375. package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
  376. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  377. package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
  378. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  379. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
  380. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
  381. package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
  382. package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
  383. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  384. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  385. package/dist/esm/project-definition/check-tree/materialization.mjs +22 -9
  386. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  387. package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
  388. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  389. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
  390. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
  391. package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
  392. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
  393. package/dist/esm/project-definition/output-defaults.mjs +18 -1
  394. package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
  395. package/dist/esm/project-definition/output-validation.mjs +15 -15
  396. package/dist/esm/project-definition/output-validation.mjs.map +1 -1
  397. package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
  398. package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
  399. package/dist/esm/project-definition/project-changes.mjs +70 -0
  400. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  401. package/dist/esm/project-definition/project-definition-validation.mjs +132 -16
  402. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  403. package/dist/esm/project-definition/project-definition.mjs +62 -50
  404. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  405. package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
  406. package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
  407. package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
  408. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
  409. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
  410. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
  411. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
  412. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
  413. package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
  414. package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
  415. package/dist/esm/project-run/aggregation.mjs +42 -57
  416. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  417. package/dist/esm/project-run/changes/git.mjs +161 -0
  418. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  419. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  420. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  421. package/dist/esm/project-run/check-execution/callback.mjs +37 -9
  422. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  423. package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
  424. package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
  425. package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
  426. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  427. package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
  428. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  429. package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
  430. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  431. package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
  432. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
  433. package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
  434. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
  435. package/dist/esm/project-run/check-execution/messages.mjs +5 -0
  436. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
  437. package/dist/esm/project-run/check-execution/plan.mjs +9 -5
  438. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
  439. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  440. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  441. package/dist/esm/project-run/check-execution/preparation.mjs +172 -0
  442. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  443. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  444. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  445. package/dist/esm/project-run/check-execution/resolved-checks.mjs +44 -139
  446. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  447. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
  448. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
  449. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  450. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  451. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  452. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  453. package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +34 -39
  454. package/dist/esm/project-run/completion/completion.mjs.map +1 -0
  455. package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
  456. package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
  457. package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
  458. package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
  459. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  460. package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
  461. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
  462. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
  463. package/dist/esm/project-run/controls/validation.mjs +79 -62
  464. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  465. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  466. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  467. package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
  468. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
  469. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
  470. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
  471. package/dist/esm/project-run/invocation/candidate.mjs +65 -0
  472. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
  473. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  474. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  475. package/dist/esm/project-run/invocation/creation.mjs +83 -0
  476. package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
  477. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  478. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  479. package/dist/esm/project-run/invocation/paths.mjs +77 -0
  480. package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
  481. package/dist/esm/project-run/invocation/progress.mjs +30 -0
  482. package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
  483. package/dist/esm/project-run/invocation/run.mjs +82 -0
  484. package/dist/esm/project-run/invocation/run.mjs.map +1 -0
  485. package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
  486. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
  487. package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
  488. package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
  489. package/dist/esm/project-run/outputs/status.mjs +105 -0
  490. package/dist/esm/project-run/outputs/status.mjs.map +1 -0
  491. package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
  492. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  493. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
  494. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  495. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
  496. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  497. package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
  498. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  499. package/dist/esm/project-run/project-context.mjs +3 -2
  500. package/dist/esm/project-run/project-context.mjs.map +1 -1
  501. package/dist/esm/project-run/result.mjs +2 -0
  502. package/dist/esm/project-run/result.mjs.map +1 -1
  503. package/dist/esm/project-run/run.mjs +1 -1
  504. package/dist/esm/project-run/run.mjs.map +1 -1
  505. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  506. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  507. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +171 -0
  508. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
  509. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
  510. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
  511. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
  512. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
  513. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
  514. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
  515. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
  516. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
  517. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
  518. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
  519. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
  520. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
  521. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
  522. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
  523. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
  524. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
  525. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
  526. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
  527. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
  528. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
  529. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
  530. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
  531. package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
  532. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  533. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
  534. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
  535. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
  536. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
  537. package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
  538. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
  539. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
  540. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
  541. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
  542. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
  543. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
  544. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
  545. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
  546. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
  547. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
  548. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
  549. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
  550. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
  551. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
  552. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
  553. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
  554. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
  555. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
  556. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
  557. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
  558. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
  559. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
  560. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
  561. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
  562. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
  563. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
  564. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
  565. package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
  566. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  567. package/docs/api-mechanics.md +167 -121
  568. package/docs/changelog.md +300 -0
  569. package/docs/checks/duplicate-detection.md +131 -60
  570. package/docs/checks/file-metrics.md +68 -46
  571. package/docs/checks/function-metrics.md +119 -163
  572. package/docs/checks/json-schema-validation.md +65 -37
  573. package/docs/checks/json-validation.md +59 -27
  574. package/docs/checks/maintenance-reminders.md +68 -32
  575. package/docs/checks/markdown-link-validation.md +104 -56
  576. package/docs/checks/markdown-lint.md +167 -0
  577. package/docs/checks/secret-detection.md +153 -0
  578. package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
  579. package/docs/guides/building-project-gate.md +706 -0
  580. package/docs/guides/cache-results.md +63 -0
  581. package/docs/guides/callbacks.md +93 -0
  582. package/docs/guides/check-dependencies.md +152 -0
  583. package/docs/guides/collecting-project-files.md +59 -0
  584. package/docs/guides/command-check.md +155 -0
  585. package/docs/guides/data-boundaries.md +140 -0
  586. package/docs/guides/extending-check-lifecycle.md +164 -0
  587. package/docs/guides/finding-waivers.md +87 -0
  588. package/docs/guides/learned-scheduling.md +83 -0
  589. package/docs/guides/presenting-findings.md +54 -0
  590. package/docs/guides/run-outputs.md +171 -0
  591. package/docs/guides/scheduling.md +208 -0
  592. package/docs/guides/simulating-admission.md +55 -0
  593. package/docs/output.md +13 -21
  594. package/licenses/Lizard-1.24.0-MIT.txt +30 -0
  595. package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
  596. package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
  597. package/licenses/analyzer-translations-NOTICE.md +24 -0
  598. package/licenses/lizard-1.24.0-provenance.json +957 -0
  599. package/package.json +19 -6
  600. package/src/check/check.ts +382 -92
  601. package/src/check/flag-enablement.ts +76 -0
  602. package/src/check/handoff-provider-identity.ts +34 -0
  603. package/src/check/inherited-collection.ts +2 -2
  604. package/src/check/project-changes.ts +14 -0
  605. package/src/check/project-context.ts +11 -0
  606. package/src/check-settlement/fact-validation.ts +29 -39
  607. package/src/check-settlement/facts.ts +1 -1
  608. package/src/check-settlement/outcome-normalization.ts +17 -35
  609. package/src/check-settlement/reason-shape.ts +20 -0
  610. package/src/check-settlement/record-store.ts +18 -15
  611. package/src/check-settlement/session.ts +12 -3
  612. package/src/data-boundary/canonical-data.ts +36 -9
  613. package/src/data-boundary/canonical-json.ts +18 -1
  614. package/src/data-boundary/closed-values.ts +54 -5
  615. package/src/data-boundary/config-glob.ts +17 -0
  616. package/src/data-boundary/project-path.ts +21 -0
  617. package/src/data-boundary/value-shapes.ts +12 -0
  618. package/src/index.ts +134 -5
  619. package/src/machine-output/v4/atomic-publication.ts +4 -17
  620. package/src/package-checks/check-authoring.ts +136 -0
  621. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
  622. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
  623. package/src/package-checks/code-quality-findings/policy.ts +23 -0
  624. package/src/package-checks/command-check/command-check.ts +152 -0
  625. package/src/package-checks/command-check/contract.ts +168 -0
  626. package/src/package-checks/command-check/execution.ts +211 -0
  627. package/src/package-checks/command-check/options.ts +331 -0
  628. package/src/package-checks/command-check/transcript.ts +35 -0
  629. package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
  630. package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
  631. package/src/package-checks/duplicate-detection/default-check.ts +38 -7
  632. package/src/package-checks/duplicate-detection/execution.ts +82 -24
  633. package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
  634. package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
  635. package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
  636. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
  637. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
  638. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
  639. package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
  640. package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
  641. package/src/package-checks/duplicate-detection/options.ts +26 -3
  642. package/src/package-checks/duplicate-detection/records.ts +65 -12
  643. package/src/package-checks/file-metrics/constructor.ts +29 -6
  644. package/src/package-checks/file-metrics/execution.ts +17 -20
  645. package/src/package-checks/file-metrics/finding-messages.ts +29 -0
  646. package/src/package-checks/file-metrics/options-resolution.ts +19 -52
  647. package/src/package-checks/file-metrics/options-validation.ts +23 -32
  648. package/src/package-checks/file-metrics/options.ts +6 -3
  649. package/src/package-checks/file-metrics/records.ts +11 -23
  650. package/src/package-checks/file-metrics/scc/availability.ts +2 -2
  651. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  652. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  653. package/src/package-checks/file-metrics/scc/parser.ts +4 -4
  654. package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
  655. package/src/package-checks/function-metrics/analysis.ts +81 -21
  656. package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
  657. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
  658. package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
  659. package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
  660. package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
  661. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
  662. package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
  663. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
  664. package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
  665. package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
  666. package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
  667. package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
  668. package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
  669. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
  670. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
  671. package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
  672. package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
  673. package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
  674. package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
  675. package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
  676. package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
  677. package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
  678. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
  679. package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
  680. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
  681. package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
  682. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
  683. package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
  684. package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
  685. package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
  686. package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
  687. package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
  688. package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
  689. package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
  690. package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
  691. package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
  692. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
  693. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
  694. package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
  695. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
  696. package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
  697. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
  698. package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
  699. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
  700. package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
  701. package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
  702. package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
  703. package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
  704. package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
  705. package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
  706. package/src/package-checks/function-metrics/constructor.ts +32 -9
  707. package/src/package-checks/function-metrics/execution.ts +94 -41
  708. package/src/package-checks/function-metrics/finding-messages.ts +95 -0
  709. package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
  710. package/src/package-checks/function-metrics/measurement-model.ts +15 -1
  711. package/src/package-checks/function-metrics/measurement.ts +223 -36
  712. package/src/package-checks/function-metrics/options-resolution.ts +39 -75
  713. package/src/package-checks/function-metrics/options-validation.ts +30 -39
  714. package/src/package-checks/function-metrics/options.ts +32 -13
  715. package/src/package-checks/function-metrics/records.ts +73 -7
  716. package/src/package-checks/function-metrics/target-files.ts +10 -70
  717. package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
  718. package/src/package-checks/host-environment/git.ts +13 -2
  719. package/src/package-checks/host-environment/path.ts +1 -20
  720. package/src/package-checks/host-environment/process/contract.ts +17 -9
  721. package/src/package-checks/host-environment/process/result.ts +48 -20
  722. package/src/package-checks/host-environment/process/runner.ts +8 -4
  723. package/src/package-checks/host-environment/process.ts +10 -0
  724. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  725. package/src/package-checks/json-schema-validation/final-data.ts +8 -0
  726. package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
  727. package/src/package-checks/json-schema-validation/options.ts +27 -1
  728. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  729. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  730. package/src/package-checks/json-validation/default-check.ts +27 -6
  731. package/src/package-checks/json-validation/final-data.ts +5 -0
  732. package/src/package-checks/json-validation/options-validation.ts +4 -18
  733. package/src/package-checks/json-validation/options.ts +4 -1
  734. package/src/package-checks/local-cache-options.ts +40 -0
  735. package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
  736. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  737. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  738. package/src/package-checks/markdown-link-validation/default-check.ts +57 -8
  739. package/src/package-checks/markdown-link-validation/execution.ts +51 -57
  740. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
  741. package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
  742. package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
  743. package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
  744. package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
  745. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  746. package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
  747. package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
  748. package/src/package-checks/markdown-link-validation/options.ts +15 -1
  749. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
  750. package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
  751. package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
  752. package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
  753. package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
  754. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  755. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  756. package/src/package-checks/markdown-lint/execution.ts +266 -0
  757. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  758. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  759. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  760. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  761. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  762. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  763. package/src/package-checks/markdown-lint/options.ts +82 -0
  764. package/src/package-checks/markdown-lint/records.ts +132 -0
  765. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  766. package/src/package-checks/project-files/collection.ts +39 -23
  767. package/src/package-checks/project-files/config-glob.ts +1 -17
  768. package/src/package-checks/project-files/configuration.ts +4 -15
  769. package/src/package-checks/project-files/gitlink-revision.ts +5 -7
  770. package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
  771. package/src/package-checks/project-files/public-collection.ts +92 -0
  772. package/src/package-checks/project-files/revision-paths.ts +3 -3
  773. package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
  774. package/src/package-checks/secret-detection/classification.ts +30 -0
  775. package/src/package-checks/secret-detection/default-check.ts +73 -0
  776. package/src/package-checks/secret-detection/execution.ts +247 -0
  777. package/src/package-checks/secret-detection/final-data.ts +57 -0
  778. package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
  779. package/src/package-checks/secret-detection/input-preparation.ts +290 -0
  780. package/src/package-checks/secret-detection/options-resolution.ts +65 -0
  781. package/src/package-checks/secret-detection/options-validation.ts +27 -0
  782. package/src/package-checks/secret-detection/options.ts +39 -0
  783. package/src/package-checks/secret-detection/records.ts +77 -0
  784. package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
  785. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  786. package/src/package-tools/cache/cache-json-by-key.ts +300 -0
  787. package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
  788. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  789. package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
  790. package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
  791. package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
  792. package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
  793. package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
  794. package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
  795. package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
  796. package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
  797. package/src/package-tools/learned-critical-path/strategy.ts +302 -0
  798. package/src/project-definition/check-tree/authoring.ts +40 -234
  799. package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
  800. package/src/project-definition/check-tree/collection-authoring.ts +13 -0
  801. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  802. package/src/project-definition/check-tree/materialization.ts +21 -9
  803. package/src/project-definition/check-tree/resolution.ts +84 -28
  804. package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
  805. package/src/project-definition/declarative-snapshot.ts +94 -0
  806. package/src/project-definition/output-defaults.ts +32 -1
  807. package/src/project-definition/output-validation.ts +15 -15
  808. package/src/project-definition/progress-rendering-output.ts +121 -0
  809. package/src/project-definition/project-changes.ts +112 -0
  810. package/src/project-definition/project-definition-validation.ts +166 -19
  811. package/src/project-definition/project-definition.ts +177 -67
  812. package/src/project-definition/resource-unit-mapping.ts +25 -0
  813. package/src/project-definition/scheduler-policy.ts +556 -0
  814. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
  815. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
  816. package/src/project-run/admission-strategy-provider/provider.ts +45 -0
  817. package/src/project-run/aggregation.ts +52 -70
  818. package/src/project-run/changes/git.ts +206 -0
  819. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  820. package/src/project-run/check-execution/callback.ts +52 -9
  821. package/src/project-run/check-execution/console-capture.ts +262 -0
  822. package/src/project-run/check-execution/dependencies.ts +161 -10
  823. package/src/project-run/check-execution/execution-finalization.ts +103 -27
  824. package/src/project-run/check-execution/execution-settlement.ts +99 -32
  825. package/src/project-run/check-execution/flag-controls.ts +146 -0
  826. package/src/project-run/check-execution/lifecycle.ts +29 -0
  827. package/src/project-run/check-execution/messages.ts +8 -0
  828. package/src/project-run/check-execution/plan.ts +12 -8
  829. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  830. package/src/project-run/check-execution/preparation.ts +309 -0
  831. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  832. package/src/project-run/check-execution/resolved-checks.ts +92 -232
  833. package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
  834. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  835. package/src/project-run/check-execution/terminal-result.ts +108 -29
  836. package/src/project-run/{completion.ts → completion/completion.ts} +33 -59
  837. package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
  838. package/src/project-run/completion/result-resolver.ts +60 -0
  839. package/src/project-run/controls/contract.ts +22 -9
  840. package/src/project-run/controls/outputs-override-validation.ts +83 -60
  841. package/src/project-run/controls/validation-result.ts +17 -6
  842. package/src/project-run/controls/validation.ts +110 -68
  843. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  844. package/src/project-run/diagnostic-logging/logger.ts +132 -207
  845. package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
  846. package/src/project-run/invocation/candidate.ts +99 -0
  847. package/src/project-run/invocation/candidates.ts +56 -0
  848. package/src/project-run/invocation/creation.ts +120 -0
  849. package/src/project-run/invocation/execution.ts +136 -0
  850. package/src/project-run/invocation/paths.ts +154 -0
  851. package/src/project-run/invocation/progress.ts +38 -0
  852. package/src/project-run/invocation/run.ts +144 -0
  853. package/src/project-run/invocation/scheduler.ts +82 -0
  854. package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
  855. package/src/project-run/outputs/status.ts +161 -0
  856. package/src/project-run/progress-rendering/presentation.ts +150 -36
  857. package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
  858. package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
  859. package/src/project-run/progress-rendering/renderer.ts +23 -6
  860. package/src/project-run/project-context.ts +10 -5
  861. package/src/project-run/result.ts +50 -4
  862. package/src/project-run/run.ts +7 -6
  863. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  864. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +321 -0
  865. package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
  866. package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
  867. package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
  868. package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
  869. package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
  870. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
  871. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
  872. package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
  873. package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
  874. package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
  875. package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
  876. package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
  877. package/src/project-run/task-scheduler/execution-state.ts +97 -6
  878. package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
  879. package/src/project-run/task-scheduler/graph-validation.ts +77 -31
  880. package/src/project-run/task-scheduler/graph.ts +111 -3
  881. package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
  882. package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
  883. package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
  884. package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
  885. package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
  886. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
  887. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
  888. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
  889. package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
  890. package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
  891. package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
  892. package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
  893. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
  894. package/src/project-run/task-scheduler/scheduler.ts +233 -171
  895. package/types/check/check.d.ts +225 -69
  896. package/types/check/flag-enablement.d.ts +42 -0
  897. package/types/check/handoff-provider-identity.d.ts +12 -0
  898. package/types/check/inherited-collection.d.ts +1 -1
  899. package/types/check/project-changes.d.ts +13 -0
  900. package/types/check/project-context.d.ts +10 -0
  901. package/types/check-settlement/facts.d.ts +1 -1
  902. package/types/check-settlement/reason-shape.d.ts +5 -0
  903. package/types/check-settlement/record-store.d.ts +2 -2
  904. package/types/check-settlement/session.d.ts +3 -1
  905. package/types/data-boundary/canonical-data.d.ts +28 -5
  906. package/types/data-boundary/canonical-json.d.ts +18 -1
  907. package/types/data-boundary/closed-values.d.ts +24 -0
  908. package/types/data-boundary/config-glob.d.ts +5 -0
  909. package/types/data-boundary/project-path.d.ts +4 -0
  910. package/types/data-boundary/value-shapes.d.ts +3 -0
  911. package/types/index.d.ts +40 -9
  912. package/types/package-checks/check-authoring.d.ts +45 -0
  913. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
  914. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
  915. package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
  916. package/types/package-checks/command-check/command-check.d.ts +48 -0
  917. package/types/package-checks/command-check/contract.d.ts +108 -0
  918. package/types/package-checks/command-check/execution.d.ts +7 -0
  919. package/types/package-checks/command-check/options.d.ts +11 -0
  920. package/types/package-checks/command-check/transcript.d.ts +8 -0
  921. package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
  922. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  923. package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
  924. package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
  925. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
  926. package/types/package-checks/duplicate-detection/options.d.ts +21 -3
  927. package/types/package-checks/duplicate-detection/records.d.ts +20 -3
  928. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  929. package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
  930. package/types/package-checks/file-metrics/options.d.ts +4 -3
  931. package/types/package-checks/file-metrics/records.d.ts +5 -10
  932. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  933. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  934. package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
  935. package/types/package-checks/function-metrics/analysis.d.ts +1 -1
  936. package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
  937. package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
  938. package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
  939. package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
  940. package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
  941. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
  942. package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
  943. package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
  944. package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
  945. package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
  946. package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
  947. package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
  948. package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
  949. package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
  950. package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
  951. package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
  952. package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
  953. package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
  954. package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
  955. package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
  956. package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
  957. package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
  958. package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
  959. package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
  960. package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
  961. package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
  962. package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
  963. package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
  964. package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
  965. package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
  966. package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
  967. package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
  968. package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
  969. package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
  970. package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
  971. package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
  972. package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
  973. package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
  974. package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
  975. package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
  976. package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
  977. package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
  978. package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
  979. package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
  980. package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
  981. package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
  982. package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
  983. package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
  984. package/types/package-checks/function-metrics/constructor.d.ts +6 -3
  985. package/types/package-checks/function-metrics/execution.d.ts +5 -2
  986. package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
  987. package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
  988. package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
  989. package/types/package-checks/function-metrics/measurement.d.ts +22 -7
  990. package/types/package-checks/function-metrics/options.d.ts +26 -12
  991. package/types/package-checks/function-metrics/records.d.ts +24 -5
  992. package/types/package-checks/function-metrics/target-files.d.ts +4 -3
  993. package/types/package-checks/host-environment/csv.d.ts +2 -0
  994. package/types/package-checks/host-environment/git.d.ts +3 -1
  995. package/types/package-checks/host-environment/path.d.ts +1 -3
  996. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  997. package/types/package-checks/host-environment/process.d.ts +5 -0
  998. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  999. package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
  1000. package/types/package-checks/json-schema-validation/options.d.ts +33 -4
  1001. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  1002. package/types/package-checks/json-validation/final-data.d.ts +5 -0
  1003. package/types/package-checks/json-validation/options.d.ts +2 -1
  1004. package/types/package-checks/local-cache-options.d.ts +9 -0
  1005. package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
  1006. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  1007. package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
  1008. package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
  1009. package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
  1010. package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
  1011. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
  1012. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
  1013. package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
  1014. package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
  1015. package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
  1016. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
  1017. package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
  1018. package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
  1019. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  1020. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  1021. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  1022. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  1023. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  1024. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  1025. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  1026. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  1027. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  1028. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  1029. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  1030. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  1031. package/types/package-checks/project-files/public-collection.d.ts +16 -0
  1032. package/types/package-checks/secret-detection/classification.d.ts +12 -0
  1033. package/types/package-checks/secret-detection/default-check.d.ts +14 -0
  1034. package/types/package-checks/secret-detection/execution.d.ts +14 -0
  1035. package/types/package-checks/secret-detection/final-data.d.ts +15 -0
  1036. package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
  1037. package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
  1038. package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
  1039. package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
  1040. package/types/package-checks/secret-detection/options.d.ts +33 -0
  1041. package/types/package-checks/secret-detection/records.d.ts +35 -0
  1042. package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
  1043. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  1044. package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
  1045. package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
  1046. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  1047. package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
  1048. package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
  1049. package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
  1050. package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
  1051. package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
  1052. package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
  1053. package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
  1054. package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
  1055. package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
  1056. package/types/project-definition/check-tree/authoring.d.ts +13 -14
  1057. package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
  1058. package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
  1059. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  1060. package/types/project-definition/check-tree/resolution.d.ts +13 -6
  1061. package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
  1062. package/types/project-definition/declarative-snapshot.d.ts +10 -0
  1063. package/types/project-definition/output-defaults.d.ts +7 -0
  1064. package/types/project-definition/output-validation.d.ts +2 -1
  1065. package/types/project-definition/progress-rendering-output.d.ts +41 -0
  1066. package/types/project-definition/project-changes.d.ts +30 -0
  1067. package/types/project-definition/project-definition.d.ts +49 -19
  1068. package/types/project-definition/resource-unit-mapping.d.ts +4 -0
  1069. package/types/project-definition/scheduler-policy.d.ts +497 -0
  1070. package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
  1071. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
  1072. package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
  1073. package/types/project-run/aggregation.d.ts +8 -6
  1074. package/types/project-run/changes/git.d.ts +14 -0
  1075. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  1076. package/types/project-run/check-execution/callback.d.ts +5 -1
  1077. package/types/project-run/check-execution/console-capture.d.ts +18 -0
  1078. package/types/project-run/check-execution/dependencies.d.ts +4 -1
  1079. package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
  1080. package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
  1081. package/types/project-run/check-execution/flag-controls.d.ts +27 -0
  1082. package/types/project-run/check-execution/lifecycle.d.ts +24 -0
  1083. package/types/project-run/check-execution/messages.d.ts +2 -0
  1084. package/types/project-run/check-execution/plan.d.ts +2 -3
  1085. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  1086. package/types/project-run/check-execution/preparation.d.ts +29 -0
  1087. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  1088. package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
  1089. package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
  1090. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  1091. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  1092. package/types/project-run/{completion.d.ts → completion/completion.d.ts} +7 -5
  1093. package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
  1094. package/types/project-run/completion/result-resolver.d.ts +4 -0
  1095. package/types/project-run/controls/contract.d.ts +22 -9
  1096. package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
  1097. package/types/project-run/controls/validation-result.d.ts +12 -4
  1098. package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
  1099. package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
  1100. package/types/project-run/invocation/candidate.d.ts +12 -0
  1101. package/types/project-run/invocation/candidates.d.ts +8 -0
  1102. package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
  1103. package/types/project-run/invocation/execution.d.ts +5 -0
  1104. package/types/project-run/invocation/paths.d.ts +40 -0
  1105. package/types/project-run/invocation/progress.d.ts +11 -0
  1106. package/types/project-run/invocation/run.d.ts +43 -0
  1107. package/types/project-run/invocation/scheduler.d.ts +16 -0
  1108. package/types/project-run/outputs/configuration.d.ts +3 -0
  1109. package/types/project-run/outputs/status.d.ts +48 -0
  1110. package/types/project-run/progress-rendering/presentation.d.ts +12 -7
  1111. package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
  1112. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
  1113. package/types/project-run/progress-rendering/renderer.d.ts +11 -3
  1114. package/types/project-run/project-context.d.ts +5 -4
  1115. package/types/project-run/result.d.ts +38 -4
  1116. package/types/project-run/run.d.ts +6 -5
  1117. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  1118. package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
  1119. package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
  1120. package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
  1121. package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
  1122. package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
  1123. package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
  1124. package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
  1125. package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
  1126. package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
  1127. package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
  1128. package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
  1129. package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
  1130. package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
  1131. package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
  1132. package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
  1133. package/types/project-run/task-scheduler/graph.d.ts +15 -0
  1134. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
  1135. package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
  1136. package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
  1137. package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
  1138. package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
  1139. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
  1140. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
  1141. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
  1142. package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
  1143. package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
  1144. package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
  1145. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
  1146. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  1147. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
  1148. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
  1149. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
  1150. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
  1151. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
  1152. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
  1153. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
  1154. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
  1155. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
  1156. package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
  1157. package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
  1158. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  1159. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  1160. package/dist/esm/project-run/check-execution/preflight.mjs +0 -186
  1161. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  1162. package/dist/esm/project-run/completion.mjs.map +0 -1
  1163. package/dist/esm/project-run/invocation-creation.mjs +0 -111
  1164. package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
  1165. package/dist/esm/project-run/invocation.mjs +0 -195
  1166. package/dist/esm/project-run/invocation.mjs.map +0 -1
  1167. package/dist/esm/project-run/machine-publication.mjs.map +0 -1
  1168. package/dist/esm/project-run/output-configuration.mjs.map +0 -1
  1169. package/dist/esm/project-run/output-status.mjs +0 -43
  1170. package/dist/esm/project-run/output-status.mjs.map +0 -1
  1171. package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
  1172. package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
  1173. package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
  1174. package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
  1175. package/src/package-checks/host-environment/process/command.ts +0 -21
  1176. package/src/project-run/check-execution/preflight.ts +0 -321
  1177. package/src/project-run/invocation-creation.ts +0 -160
  1178. package/src/project-run/invocation.ts +0 -303
  1179. package/src/project-run/output-status.ts +0 -69
  1180. package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
  1181. package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
  1182. package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
  1183. package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
  1184. package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
  1185. package/types/package-checks/host-environment/process/command.d.ts +0 -7
  1186. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  1187. package/types/project-run/check-execution/preflight.d.ts +0 -27
  1188. package/types/project-run/invocation.d.ts +0 -34
  1189. package/types/project-run/output-configuration.d.ts +0 -3
  1190. package/types/project-run/output-status.d.ts +0 -21
@@ -1,13 +1,17 @@
1
1
  /** Project-root file discovery and selection helpers. */
2
2
  import { lstatSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
- import { matchesAnyConfigGlob } from "./config-glob.mjs";
4
+ import { matchesAnyConfigGlob } from "../../data-boundary/config-glob.mjs";
5
5
  import { collectSubmoduleWorktreeFiles } from "./revision-worktree-files.mjs";
6
6
  import { errorMessage } from "../host-environment/error-message.mjs";
7
- import { processFailed } from "../host-environment/process/command.mjs";
8
- import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
7
+ import { processFailed } from "../host-environment/process.mjs";
8
+ import { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
9
9
  import { toSlashPath } from "../host-environment/path.mjs";
10
10
  import { walkFiles } from "../host-environment/filesystem.mjs";
11
+ const sourceCandidateCollectors = Object.freeze({
12
+ filesystem: collectFilesystemCandidates,
13
+ "git-worktree": collectGitWorktreeCandidates
14
+ });
11
15
  const CONFIG_GLOB_MAGIC = /[\\*?[\]{}()!+@]/u;
12
16
  /**
13
17
  * Resolves multiple named file sets while enumerating each distinct candidate source once.
@@ -45,19 +49,22 @@ function groupSelectionsBySource(selections) {
45
49
  return new Map([...mutableGroups].map(([source, group]) => [source, Object.freeze(group)]));
46
50
  }
47
51
  function collectSourceCandidates(rootDir, source, selections) {
48
- switch (source) {
49
- case "filesystem":
50
- return uniqueSorted(walkFiles({
51
- ignoredDirs: commonExcludedDirectoryNames(selections),
52
- rootDir
53
- }).map(toSlashPath));
54
- case "git-worktree":
55
- return collectGitWorktreeCandidates(rootDir, selections);
56
- default: {
57
- const unsupportedSource = source;
58
- throw new TypeError(`unsupported project file source: ${String(unsupportedSource)}`);
59
- }
60
- }
52
+ return sourceCandidateCollectorFor(source)(rootDir, selections);
53
+ }
54
+ function sourceCandidateCollectorFor(source) {
55
+ const collector = sourceCandidateCollectors[source];
56
+ if (collector === undefined)
57
+ return unsupportedProjectFileSource(source);
58
+ return collector;
59
+ }
60
+ function unsupportedProjectFileSource(source) {
61
+ throw new TypeError(`unsupported project file source: ${source}`);
62
+ }
63
+ function collectFilesystemCandidates(rootDir, selections) {
64
+ return uniqueSorted(walkFiles({
65
+ ignoredDirs: commonExcludedDirectoryNames(selections),
66
+ rootDir
67
+ }).map(toSlashPath));
61
68
  }
62
69
  function collectGitWorktreeCandidates(rootDir, selections) {
63
70
  const result = runGit({
@@ -65,10 +72,7 @@ function collectGitWorktreeCandidates(rootDir, selections) {
65
72
  cwd: rootDir
66
73
  });
67
74
  if (processFailed(result)) {
68
- const detail = result.stderr.trim() ||
69
- result.error?.message ||
70
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
71
- throw new Error(`could not enumerate git-worktree files in ${rootDir}: ${detail}`);
75
+ throw new Error(`could not enumerate git-worktree files in ${rootDir}: ${gitFailureDetail(result)}`);
72
76
  }
73
77
  const include = uniqueSorted(selections.flatMap(({ selection }) => [...selection.include]));
74
78
  return uniqueSorted([
@@ -1 +1 @@
1
- {"version":3,"file":"collection.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/collection.ts"],"names":[],"mappings":"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","sourcesContent":["/** Project-root file discovery and selection helpers. */\n\nimport { lstatSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { matchesAnyConfigGlob } from \"./config-glob.ts\";\nimport { collectSubmoduleWorktreeFiles } from \"./revision-worktree-files.ts\";\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\nimport { walkFiles } from \"../host-environment/filesystem.ts\";\nimport type { ProjectFileSelection, ProjectFileSource } from \"./configuration.ts\";\n\ntype NamedProjectFileSelection = Readonly<{\n readonly id: string;\n readonly selection: ProjectFileSelection;\n}>;\n\nconst CONFIG_GLOB_MAGIC = /[\\\\*?[\\]{}()!+@]/u;\n\n/**\n * Resolves multiple named file sets while enumerating each distinct candidate source once.\n */\nexport function collectProjectFileSets(\n rootDir: string,\n selections: Readonly<Record<string, ProjectFileSelection>>\n): ReadonlyMap<string, readonly string[]> {\n const bySource = groupSelectionsBySource(selections);\n const selectedFiles = new Map<string, readonly string[]>();\n\n for (const [source, sourceSelections] of bySource) {\n const candidates = collectSourceCandidates(rootDir, source, sourceSelections);\n for (const { id, selection } of sourceSelections) {\n selectedFiles.set(id, Object.freeze(filterProjectFiles(candidates, selection)));\n }\n }\n\n return selectedFiles;\n}\n\nexport function collectProjectFiles(rootDir: string, selection: ProjectFileSelection): string[] {\n return [...requireProjectFileSet(collectProjectFileSets(rootDir, { selection }), \"selection\")];\n}\n\n/** 返回已收集的命名文件集合;缺失表示收集完整性失效,不能解释为空集合。 */\nexport function requireProjectFileSet(\n fileSets: ReadonlyMap<string, readonly string[]>,\n selectionId: string\n): readonly string[] {\n const selectedFiles = fileSets.get(selectionId);\n if (selectedFiles === undefined) {\n throw new Error(`project file collection did not produce selection ${selectionId}`);\n }\n return selectedFiles;\n}\n\nfunction groupSelectionsBySource(\n selections: Readonly<Record<string, ProjectFileSelection>>\n): ReadonlyMap<ProjectFileSource, readonly NamedProjectFileSelection[]> {\n const mutableGroups = new Map<ProjectFileSource, NamedProjectFileSelection[]>();\n const entries = Object.entries(selections).sort(([left], [right]) => compareText(left, right));\n\n for (const [id, selection] of entries) {\n const group = mutableGroups.get(selection.source) ?? [];\n group.push({ id, selection });\n mutableGroups.set(selection.source, group);\n }\n\n return new Map(\n [...mutableGroups].map(([source, group]) => [source, Object.freeze(group)] as const)\n );\n}\n\nfunction collectSourceCandidates(\n rootDir: string,\n source: ProjectFileSource,\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n switch (source) {\n case \"filesystem\":\n return uniqueSorted(\n walkFiles({\n ignoredDirs: commonExcludedDirectoryNames(selections),\n rootDir\n }).map(toSlashPath)\n );\n case \"git-worktree\":\n return collectGitWorktreeCandidates(rootDir, selections);\n default: {\n const unsupportedSource: never = source;\n throw new TypeError(`unsupported project file source: ${String(unsupportedSource)}`);\n }\n }\n}\n\nfunction collectGitWorktreeCandidates(\n rootDir: string,\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: rootDir\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not enumerate git-worktree files in ${rootDir}: ${detail}`);\n }\n\n const include = uniqueSorted(selections.flatMap(({ selection }) => [...selection.include]));\n return uniqueSorted(\n [\n ...splitNulDelimitedGitFileList(result.stdout),\n ...collectSubmoduleWorktreeFiles({ repository: rootDir, scanInputPaths: include })\n ]\n .map(toSlashPath)\n .filter((filePath) => isGitWorktreeFile({ filePath, rootDir }))\n );\n}\n\nfunction isGitWorktreeFile({\n filePath,\n rootDir\n}: Readonly<{ readonly filePath: string; readonly rootDir: string }>): boolean {\n try {\n const stats = lstatSync(resolve(rootDir, filePath));\n return stats.isFile() || stats.isSymbolicLink();\n } catch (error: unknown) {\n if (missingPath(error)) return false;\n throw new Error(\n `could not inspect git-worktree candidate ${filePath} in ${rootDir}: ${errorMessage(error)}`,\n { cause: error }\n );\n }\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction filterProjectFiles(\n candidates: readonly string[],\n selection: ProjectFileSelection\n): string[] {\n return uniqueSorted(candidates.filter((filePath) => isProjectFile(filePath, selection)));\n}\n\nfunction isProjectFile(filePath: string, selection: ProjectFileSelection): boolean {\n const normalized = toSlashPath(filePath);\n return (\n matchesAnyConfigGlob(normalized, selection.include) &&\n !matchesAnyConfigGlob(normalized, selection.exclude)\n );\n}\n\n/**\n * Recognizes only whole-directory exclusions with one literal directory segment. The\n * intersection is a traversal optimization; public semantics remain in `isProjectFile`.\n */\nfunction commonExcludedDirectoryNames(\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n let common: Set<string> | undefined;\n for (const { selection } of selections) {\n const names = new Set(selection.exclude.map(literalExcludedDirectoryName).filter(isString));\n common =\n common === undefined\n ? names\n : new Set([...common].filter((directoryName) => names.has(directoryName)));\n }\n return common === undefined ? [] : [...common].sort();\n}\n\nfunction literalExcludedDirectoryName(configGlob: string): string | undefined {\n const prefix = \"**/\";\n const suffix = \"/**\";\n if (!configGlob.startsWith(prefix) || !configGlob.endsWith(suffix)) return undefined;\n const directoryName = configGlob.slice(prefix.length, -suffix.length);\n if (directoryName.length === 0 || directoryName.includes(\"/\")) return undefined;\n return CONFIG_GLOB_MAGIC.test(directoryName) ? undefined : directoryName;\n}\n\nfunction isString(value: string | undefined): value is string {\n return value !== undefined;\n}\n\nfunction uniqueSorted(files: readonly string[]): string[] {\n return [...new Set(files)].sort(compareText);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
1
+ {"version":3,"file":"collection.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/collection.ts"],"names":[],"mappings":"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","sourcesContent":["/** Project-root file discovery and selection helpers. */\n\nimport { lstatSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { matchesAnyConfigGlob } from \"../../data-boundary/config-glob.ts\";\nimport { collectSubmoduleWorktreeFiles } from \"./revision-worktree-files.ts\";\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\nimport { walkFiles } from \"../host-environment/filesystem.ts\";\nimport type { ProjectFileSelection, ProjectFileSource } from \"./configuration.ts\";\n\ntype NamedProjectFileSelection = Readonly<{\n readonly id: string;\n readonly selection: ProjectFileSelection;\n}>;\n\ntype SourceCandidateCollector = (\n rootDir: string,\n selections: readonly NamedProjectFileSelection[]\n) => readonly string[];\n\nconst sourceCandidateCollectors = Object.freeze({\n filesystem: collectFilesystemCandidates,\n \"git-worktree\": collectGitWorktreeCandidates\n}) satisfies Readonly<Partial<Record<ProjectFileSource, SourceCandidateCollector>>>;\n\nconst CONFIG_GLOB_MAGIC = /[\\\\*?[\\]{}()!+@]/u;\n\n/**\n * Resolves multiple named file sets while enumerating each distinct candidate source once.\n */\nexport function collectProjectFileSets(\n rootDir: string,\n selections: Readonly<Record<string, ProjectFileSelection>>\n): ReadonlyMap<string, readonly string[]> {\n const bySource = groupSelectionsBySource(selections);\n const selectedFiles = new Map<string, readonly string[]>();\n\n for (const [source, sourceSelections] of bySource) {\n const candidates = collectSourceCandidates(rootDir, source, sourceSelections);\n for (const { id, selection } of sourceSelections) {\n selectedFiles.set(id, Object.freeze(filterProjectFiles(candidates, selection)));\n }\n }\n\n return selectedFiles;\n}\n\nexport function collectProjectFiles(rootDir: string, selection: ProjectFileSelection): string[] {\n return [...requireProjectFileSet(collectProjectFileSets(rootDir, { selection }), \"selection\")];\n}\n\n/** 返回已收集的命名文件集合;缺失表示收集完整性失效,不能解释为空集合。 */\nexport function requireProjectFileSet(\n fileSets: ReadonlyMap<string, readonly string[]>,\n selectionId: string\n): readonly string[] {\n const selectedFiles = fileSets.get(selectionId);\n if (selectedFiles === undefined) {\n throw new Error(`project file collection did not produce selection ${selectionId}`);\n }\n return selectedFiles;\n}\n\nfunction groupSelectionsBySource(\n selections: Readonly<Record<string, ProjectFileSelection>>\n): ReadonlyMap<ProjectFileSource, readonly NamedProjectFileSelection[]> {\n const mutableGroups = new Map<ProjectFileSource, NamedProjectFileSelection[]>();\n const entries = Object.entries(selections).sort(([left], [right]) => compareText(left, right));\n\n for (const [id, selection] of entries) {\n const group = mutableGroups.get(selection.source) ?? [];\n group.push({ id, selection });\n mutableGroups.set(selection.source, group);\n }\n\n return new Map(\n [...mutableGroups].map(([source, group]) => [source, Object.freeze(group)] as const)\n );\n}\n\nfunction collectSourceCandidates(\n rootDir: string,\n source: ProjectFileSource,\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n return sourceCandidateCollectorFor(source)(rootDir, selections);\n}\n\nfunction sourceCandidateCollectorFor(source: ProjectFileSource): SourceCandidateCollector {\n const collector = sourceCandidateCollectors[source];\n if (collector === undefined) return unsupportedProjectFileSource(source);\n return collector;\n}\n\nfunction unsupportedProjectFileSource(source: ProjectFileSource): never {\n throw new TypeError(`unsupported project file source: ${source}`);\n}\n\nfunction collectFilesystemCandidates(\n rootDir: string,\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n return uniqueSorted(\n walkFiles({\n ignoredDirs: commonExcludedDirectoryNames(selections),\n rootDir\n }).map(toSlashPath)\n );\n}\n\nfunction collectGitWorktreeCandidates(\n rootDir: string,\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: rootDir\n });\n if (processFailed(result)) {\n throw new Error(\n `could not enumerate git-worktree files in ${rootDir}: ${gitFailureDetail(result)}`\n );\n }\n\n const include = uniqueSorted(selections.flatMap(({ selection }) => [...selection.include]));\n return uniqueSorted(\n [\n ...splitNulDelimitedGitFileList(result.stdout),\n ...collectSubmoduleWorktreeFiles({ repository: rootDir, scanInputPaths: include })\n ]\n .map(toSlashPath)\n .filter((filePath) => isGitWorktreeFile({ filePath, rootDir }))\n );\n}\n\nfunction isGitWorktreeFile({\n filePath,\n rootDir\n}: Readonly<{ readonly filePath: string; readonly rootDir: string }>): boolean {\n try {\n const stats = lstatSync(resolve(rootDir, filePath));\n return stats.isFile() || stats.isSymbolicLink();\n } catch (error: unknown) {\n if (missingPath(error)) return false;\n throw new Error(\n `could not inspect git-worktree candidate ${filePath} in ${rootDir}: ${errorMessage(error)}`,\n { cause: error }\n );\n }\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction filterProjectFiles(\n candidates: readonly string[],\n selection: ProjectFileSelection\n): string[] {\n return uniqueSorted(candidates.filter((filePath) => isProjectFile(filePath, selection)));\n}\n\nfunction isProjectFile(filePath: string, selection: ProjectFileSelection): boolean {\n const normalized = toSlashPath(filePath);\n return (\n matchesAnyConfigGlob(normalized, selection.include) &&\n !matchesAnyConfigGlob(normalized, selection.exclude)\n );\n}\n\n/**\n * Recognizes only whole-directory exclusions with one literal directory segment. The\n * intersection is a traversal optimization; public semantics remain in `isProjectFile`.\n */\nfunction commonExcludedDirectoryNames(\n selections: readonly NamedProjectFileSelection[]\n): readonly string[] {\n let common: Set<string> | undefined;\n for (const { selection } of selections) {\n const names = new Set(selection.exclude.map(literalExcludedDirectoryName).filter(isString));\n common =\n common === undefined\n ? names\n : new Set([...common].filter((directoryName) => names.has(directoryName)));\n }\n return common === undefined ? [] : [...common].sort();\n}\n\nfunction literalExcludedDirectoryName(configGlob: string): string | undefined {\n const prefix = \"**/\";\n const suffix = \"/**\";\n if (!configGlob.startsWith(prefix) || !configGlob.endsWith(suffix)) return undefined;\n const directoryName = configGlob.slice(prefix.length, -suffix.length);\n if (directoryName.length === 0 || directoryName.includes(\"/\")) return undefined;\n return CONFIG_GLOB_MAGIC.test(directoryName) ? undefined : directoryName;\n}\n\nfunction isString(value: string | undefined): value is string {\n return value !== undefined;\n}\n\nfunction uniqueSorted(files: readonly string[]): string[] {\n return [...new Set(files)].sort(compareText);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
1
+ import { hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
2
2
  export const PROJECT_FILE_SOURCES = Object.freeze(["filesystem", "git-worktree"]);
3
3
  /**
4
4
  * Package-provided Checks 共用的通用文件选择基线。
@@ -62,7 +62,7 @@ export function snapshotProjectFileSelection(selection) {
62
62
  });
63
63
  }
64
64
  export function validProjectFileSelection(value) {
65
- const selection = exactRecord(value, ["exclude", "include", "source"]);
65
+ const selection = snapshotExactClosedRecord(value, ["exclude", "include", "source"]);
66
66
  return (selection !== undefined &&
67
67
  validStringArray(selection.exclude) &&
68
68
  validStringArray(selection.include) &&
@@ -81,19 +81,11 @@ function resolveStringArray(value, fallback) {
81
81
  }
82
82
  function validStringArray(value) {
83
83
  const items = snapshotClosedArray(value);
84
- return items !== undefined && items.every(isString);
84
+ return items?.every(isString) === true;
85
85
  }
86
86
  function isString(value) {
87
87
  return typeof value === "string";
88
88
  }
89
- function exactRecord(value, keys) {
90
- const record = snapshotClosedRecord(value);
91
- return record !== undefined &&
92
- Object.keys(record).length === keys.length &&
93
- keys.every((key) => Object.hasOwn(record, key))
94
- ? record
95
- : undefined;
96
- }
97
89
  function deepFreeze(value) {
98
90
  if (typeof value !== "object" || value === null || Object.isFrozen(value))
99
91
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,cAAc,CAAU,CAAC,CAAC;AAsB3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAyB,UAAU,CAAC;IAC1E,OAAO,EAAE;QACP,cAAc;QACd,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,qBAAqB;QACrB,YAAY;QACZ,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,cAAc;QACd,WAAW;QACX,cAAc;QACd,YAAY;KACb;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,UAAU,2BAA2B,CACzC,KAAc,EACd,QAAQ,GAAyB,2BAA2B;IAE5D,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IACE,SAAS,KAAK,SAAS;QACvB,CAAC,gCAAgC,CAAC,SAAS,EAAE;YAC3C,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;YAC1C,QAAQ,EAAE,EAAE;SACb,CAAC,EACF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,OAAO,4BAA4B,CAAC,2BAA2B,CAAC,CAAC;AACnE,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,4BAA4B,CAC1C,SAA+B;IAE/B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,OAAO,CACL,SAAS,KAAK,SAAS;QACvB,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;QACnC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;QACnC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,QAA2B;IAE3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,IAAuB;IAEvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,MAAM,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\n\nexport const PROJECT_FILE_SOURCES = Object.freeze([\"filesystem\", \"git-worktree\"] as const);\n\n/** 文件选择可使用的显式候选来源。 */\nexport type ProjectFileSource = (typeof PROJECT_FILE_SOURCES)[number];\n\n/** 读取项目文件的 Check 所拥有的文件选择输入。 */\nexport interface ProjectFileSelectionOptions {\n /** 候选文件来源;省略时使用 owning Check 的来源默认值,当前随包 Check 均为 `filesystem`。 */\n readonly source?: ProjectFileSource;\n /** 相对项目根目录且使用 `/` 的 glob;省略时使用 owning Check 的 include 默认值,显式数组完整替换。 */\n readonly include?: readonly string[];\n /** 优先于 `include` 的 glob;省略时使用 owning Check 的 exclude 默认值,显式数组完整替换。 */\n readonly exclude?: readonly string[];\n}\n\n/** Check execution 消费的完整项目文件选择。 */\nexport interface ProjectFileSelection {\n readonly exclude: readonly string[];\n readonly include: readonly string[];\n readonly source: ProjectFileSource;\n}\n\n/**\n * Package-provided Checks 共用的通用文件选择基线。\n *\n * 对象与数组均不可变;需要保留默认排除并追加项目规则时,使用对象与数组 spread 建立新值。\n * 个别 Check 会从此 baseline 派生更精准的默认 include;显式组合此 value 仍表示通配全部路径。\n */\nexport const defaultProjectFileSelection: ProjectFileSelection = deepFreeze({\n exclude: [\n \"**/.cache/**\",\n \"**/.git\",\n \"**/.git/**\",\n \"**/.log/**\",\n \"**/.pytest_cache/**\",\n \"**/.tmp/**\",\n \"**/.venv/**\",\n \"**/.vibe-check/**\",\n \"**/__pycache__/**\",\n \"**/artifacts/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/dist/**\",\n \"**/generated/**\",\n \"**/*.generated.*\",\n \"**/node_modules/**\",\n \"**/target/**\",\n \"**/tmp/**\",\n \"**/vendor/**\",\n \"**/venv/**\"\n ],\n include: [\"**/*\"],\n source: \"filesystem\"\n});\n\n/** 按 owning Check 提供的可信完整 defaults 解析并冻结一份 authoring selection。 */\nexport function resolveProjectFileSelection(\n value: unknown,\n defaults: ProjectFileSelection = defaultProjectFileSelection\n): ProjectFileSelection | undefined {\n const selection = snapshotClosedRecord(value);\n if (\n selection === undefined ||\n !hasRequiredAndOptionalRecordKeys(selection, {\n optional: [\"exclude\", \"include\", \"source\"],\n required: []\n })\n ) {\n return undefined;\n }\n\n const exclude = resolveStringArray(selection.exclude, defaults.exclude);\n const include = resolveStringArray(selection.include, defaults.include);\n const source = selection.source ?? defaults.source;\n if (exclude === undefined || include === undefined || !isProjectFileSource(source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source });\n}\n\nexport function snapshotDefaultProjectFileSelection(): ProjectFileSelection {\n return snapshotProjectFileSelection(defaultProjectFileSelection);\n}\n\n/** 为 owning Check 对可信的完整 selection 建立 detached、冻结快照。 */\nexport function snapshotProjectFileSelection(\n selection: ProjectFileSelection\n): ProjectFileSelection {\n return Object.freeze({\n exclude: Object.freeze([...selection.exclude]),\n include: Object.freeze([...selection.include]),\n source: selection.source\n });\n}\n\nexport function validProjectFileSelection(value: unknown): value is ProjectFileSelection {\n const selection = exactRecord(value, [\"exclude\", \"include\", \"source\"]);\n return (\n selection !== undefined &&\n validStringArray(selection.exclude) &&\n validStringArray(selection.include) &&\n isProjectFileSource(selection.source)\n );\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n\nfunction resolveStringArray(\n value: unknown,\n fallback: readonly string[]\n): readonly string[] | undefined {\n if (value === undefined) return Object.freeze([...fallback]);\n const items = snapshotClosedArray(value);\n if (items === undefined || !items.every(isString)) return undefined;\n return Object.freeze([...items]);\n}\n\nfunction validStringArray(value: unknown): boolean {\n const items = snapshotClosedArray(value);\n return items !== undefined && items.every(isString);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined &&\n Object.keys(record).length === keys.length &&\n keys.every((key) => Object.hasOwn(record, key))\n ? record\n : undefined;\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const nested of Object.values(value)) deepFreeze(nested);\n return Object.freeze(value);\n}\n"]}
1
+ {"version":3,"file":"configuration.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\n\nexport const PROJECT_FILE_SOURCES = Object.freeze([\"filesystem\", \"git-worktree\"] as const);\n\n/** 文件选择可使用的显式候选来源。 */\nexport type ProjectFileSource = (typeof PROJECT_FILE_SOURCES)[number];\n\n/** 读取项目文件的 Check 所拥有的文件选择输入。 */\nexport interface ProjectFileSelectionOptions {\n /** 候选文件来源;省略时使用 owning Check 的来源默认值,当前随包 Check 均为 `filesystem`。 */\n readonly source?: ProjectFileSource;\n /** 相对项目根目录且使用 `/` 的 glob;省略时使用 owning Check 的 include 默认值,显式数组完整替换。 */\n readonly include?: readonly string[];\n /** 优先于 `include` 的 glob;省略时使用 owning Check 的 exclude 默认值,显式数组完整替换。 */\n readonly exclude?: readonly string[];\n}\n\n/** Check execution 消费的完整项目文件选择。 */\nexport interface ProjectFileSelection {\n readonly exclude: readonly string[];\n readonly include: readonly string[];\n readonly source: ProjectFileSource;\n}\n\n/**\n * Package-provided Checks 共用的通用文件选择基线。\n *\n * 对象与数组均不可变;需要保留默认排除并追加项目规则时,使用对象与数组 spread 建立新值。\n * 个别 Check 会从此 baseline 派生更精准的默认 include;显式组合此 value 仍表示通配全部路径。\n */\nexport const defaultProjectFileSelection: ProjectFileSelection = deepFreeze({\n exclude: [\n \"**/.cache/**\",\n \"**/.git\",\n \"**/.git/**\",\n \"**/.log/**\",\n \"**/.pytest_cache/**\",\n \"**/.tmp/**\",\n \"**/.venv/**\",\n \"**/.vibe-check/**\",\n \"**/__pycache__/**\",\n \"**/artifacts/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/dist/**\",\n \"**/generated/**\",\n \"**/*.generated.*\",\n \"**/node_modules/**\",\n \"**/target/**\",\n \"**/tmp/**\",\n \"**/vendor/**\",\n \"**/venv/**\"\n ],\n include: [\"**/*\"],\n source: \"filesystem\"\n});\n\n/** 按 owning Check 提供的可信完整 defaults 解析并冻结一份 authoring selection。 */\nexport function resolveProjectFileSelection(\n value: unknown,\n defaults: ProjectFileSelection = defaultProjectFileSelection\n): ProjectFileSelection | undefined {\n const selection = snapshotClosedRecord(value);\n if (\n selection === undefined ||\n !hasRequiredAndOptionalRecordKeys(selection, {\n optional: [\"exclude\", \"include\", \"source\"],\n required: []\n })\n ) {\n return undefined;\n }\n\n const exclude = resolveStringArray(selection.exclude, defaults.exclude);\n const include = resolveStringArray(selection.include, defaults.include);\n const source = selection.source ?? defaults.source;\n if (exclude === undefined || include === undefined || !isProjectFileSource(source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source });\n}\n\nexport function snapshotDefaultProjectFileSelection(): ProjectFileSelection {\n return snapshotProjectFileSelection(defaultProjectFileSelection);\n}\n\n/** 为 owning Check 对可信的完整 selection 建立 detached、冻结快照。 */\nexport function snapshotProjectFileSelection(\n selection: ProjectFileSelection\n): ProjectFileSelection {\n return Object.freeze({\n exclude: Object.freeze([...selection.exclude]),\n include: Object.freeze([...selection.include]),\n source: selection.source\n });\n}\n\nexport function validProjectFileSelection(value: unknown): value is ProjectFileSelection {\n const selection = snapshotExactClosedRecord(value, [\"exclude\", \"include\", \"source\"]);\n return (\n selection !== undefined &&\n validStringArray(selection.exclude) &&\n validStringArray(selection.include) &&\n isProjectFileSource(selection.source)\n );\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n\nfunction resolveStringArray(\n value: unknown,\n fallback: readonly string[]\n): readonly string[] | undefined {\n if (value === undefined) return Object.freeze([...fallback]);\n const items = snapshotClosedArray(value);\n if (items === undefined || !items.every(isString)) return undefined;\n return Object.freeze([...items]);\n}\n\nfunction validStringArray(value: unknown): boolean {\n const items = snapshotClosedArray(value);\n return items?.every(isString) === true;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const nested of Object.values(value)) deepFreeze(nested);\n return Object.freeze(value);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /** Reads canonical gitlink entries from a named Git tree revision. */
2
- import { processFailed } from "../host-environment/process/command.mjs";
3
- import { runGit } from "../host-environment/git.mjs";
2
+ import { processFailed } from "../host-environment/process.mjs";
3
+ import { gitFailureDetail, runGit } from "../host-environment/git.mjs";
4
4
  import { toSlashPath } from "../host-environment/path.mjs";
5
5
  export function gitlinksAtRevision({ repository, revision }) {
6
6
  const result = runGit({
@@ -8,10 +8,7 @@ export function gitlinksAtRevision({ repository, revision }) {
8
8
  cwd: repository
9
9
  });
10
10
  if (processFailed(result)) {
11
- const detail = result.stderr.trim() ||
12
- result.error?.message ||
13
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
14
- throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${detail}`);
11
+ throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${gitFailureDetail(result)}`);
15
12
  }
16
13
  const gitlinks = [];
17
14
  for (const entry of result.stdout.split("\0")) {
@@ -1 +1 @@
1
- {"version":3,"file":"gitlink-revision.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-revision.ts"],"names":[],"mappings":"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","sourcesContent":["/** Reads canonical gitlink entries from a named Git tree revision. */\n\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\n\nexport type Gitlink = Readonly<{\n readonly path: string;\n readonly sha: string;\n}>;\n\nexport function gitlinksAtRevision({\n repository,\n revision\n}: Readonly<{\n readonly repository: string;\n readonly revision: string;\n}>): readonly Gitlink[] {\n const result = runGit({\n args: [\"ls-tree\", \"-r\", \"-z\", revision],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${detail}`);\n }\n\n const gitlinks: Gitlink[] = [];\n for (const entry of result.stdout.split(\"\\0\")) {\n if (!entry) continue;\n const gitlink = parseGitlinkEntry({ entry, repository, revision });\n if (gitlink !== null) gitlinks.push(gitlink);\n }\n return Object.freeze(gitlinks);\n}\n\nfunction parseGitlinkEntry({\n entry,\n repository,\n revision\n}: Readonly<{\n readonly entry: string;\n readonly repository: string;\n readonly revision: string;\n}>): Gitlink | null {\n const parsed = gitTreeEntryParts(entry);\n if (parsed === undefined) throw invalidTreeOutput(revision, repository);\n const [mode, type, sha] = parsed.metadata;\n if (!validGitTreeMetadata(mode, type, sha)) throw invalidTreeOutput(revision, repository);\n if (mode !== \"160000\") return null;\n if (type !== \"commit\") {\n throw new Error(`invalid gitlink output at ${revision} in ${repository}`);\n }\n return Object.freeze({ path: toSlashPath(parsed.path), sha });\n}\n\nfunction gitTreeEntryParts(entry: string): { metadata: string[]; path: string } | undefined {\n const separator = entry.indexOf(\"\\t\");\n if (separator < 0) return undefined;\n const metadata = entry.slice(0, separator).split(/\\s+/u);\n const path = entry.slice(separator + 1);\n return metadata.length === 3 && path.length > 0 ? { metadata, path } : undefined;\n}\n\nfunction validGitTreeMetadata(\n mode: string | undefined,\n type: string | undefined,\n sha: string | undefined\n): sha is string {\n return mode !== undefined && type !== undefined && sha !== undefined && isFullGitObjectId(sha);\n}\n\nfunction invalidTreeOutput(revision: string, repository: string): Error {\n return new Error(`invalid git tree output at ${revision} in ${repository}`);\n}\n\nfunction isFullGitObjectId(value: string): boolean {\n return /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(value);\n}\n"]}
1
+ {"version":3,"file":"gitlink-revision.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-revision.ts"],"names":[],"mappings":"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","sourcesContent":["/** Reads canonical gitlink entries from a named Git tree revision. */\n\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { gitFailureDetail, runGit } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\n\nexport type Gitlink = Readonly<{\n readonly path: string;\n readonly sha: string;\n}>;\n\nexport function gitlinksAtRevision({\n repository,\n revision\n}: Readonly<{\n readonly repository: string;\n readonly revision: string;\n}>): readonly Gitlink[] {\n const result = runGit({\n args: [\"ls-tree\", \"-r\", \"-z\", revision],\n cwd: repository\n });\n if (processFailed(result)) {\n throw new Error(\n `could not inspect gitlinks at ${revision} in ${repository}: ${gitFailureDetail(result)}`\n );\n }\n\n const gitlinks: Gitlink[] = [];\n for (const entry of result.stdout.split(\"\\0\")) {\n if (!entry) continue;\n const gitlink = parseGitlinkEntry({ entry, repository, revision });\n if (gitlink !== null) gitlinks.push(gitlink);\n }\n return Object.freeze(gitlinks);\n}\n\nfunction parseGitlinkEntry({\n entry,\n repository,\n revision\n}: Readonly<{\n readonly entry: string;\n readonly repository: string;\n readonly revision: string;\n}>): Gitlink | null {\n const parsed = gitTreeEntryParts(entry);\n if (parsed === undefined) throw invalidTreeOutput(revision, repository);\n const [mode, type, sha] = parsed.metadata;\n if (!validGitTreeMetadata(mode, type, sha)) throw invalidTreeOutput(revision, repository);\n if (mode !== \"160000\") return null;\n if (type !== \"commit\") {\n throw new Error(`invalid gitlink output at ${revision} in ${repository}`);\n }\n return Object.freeze({ path: toSlashPath(parsed.path), sha });\n}\n\nfunction gitTreeEntryParts(entry: string): { metadata: string[]; path: string } | undefined {\n const separator = entry.indexOf(\"\\t\");\n if (separator < 0) return undefined;\n const metadata = entry.slice(0, separator).split(/\\s+/u);\n const path = entry.slice(separator + 1);\n return metadata.length === 3 && path.length > 0 ? { metadata, path } : undefined;\n}\n\nfunction validGitTreeMetadata(\n mode: string | undefined,\n type: string | undefined,\n sha: string | undefined\n): sha is string {\n return mode !== undefined && type !== undefined && sha !== undefined && isFullGitObjectId(sha);\n}\n\nfunction invalidTreeOutput(revision: string, repository: string): Error {\n return new Error(`invalid git tree output at ${revision} in ${repository}`);\n}\n\nfunction isFullGitObjectId(value: string): boolean {\n return /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(value);\n}\n"]}
@@ -2,39 +2,55 @@
2
2
  import { realpathSync, statSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { errorMessage } from "../host-environment/error-message.mjs";
5
- import { processFailed } from "../host-environment/process/command.mjs";
5
+ import { processFailed } from "../host-environment/process.mjs";
6
6
  import { runGit } from "../host-environment/git.mjs";
7
7
  export function canonicalRepositoryPath(repository) {
8
8
  return realpathSync(resolve(repository));
9
9
  }
10
10
  export function inspectGitlinkWorktree({ gitlinkPath, repository }) {
11
+ const localWorktree = inspectLocalGitlinkWorktree({ gitlinkPath, repository });
12
+ if (localWorktree.kind !== "found")
13
+ return localWorktree;
14
+ return inspectGitRepositoryRoot({
15
+ gitlinkPath,
16
+ canonicalSubmoduleRepository: localWorktree.repository
17
+ });
18
+ }
19
+ function inspectLocalGitlinkWorktree({ gitlinkPath, repository }) {
11
20
  const submoduleRepository = resolve(repository, gitlinkPath);
12
- let canonicalSubmoduleRepository;
13
21
  try {
14
22
  if (!statSync(submoduleRepository).isDirectory())
15
23
  return { kind: "missing" };
16
- canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);
24
+ return { kind: "found", repository: canonicalRepositoryPath(submoduleRepository) };
17
25
  }
18
26
  catch (error) {
19
27
  return missingPath(error)
20
28
  ? { kind: "missing" }
21
29
  : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);
22
30
  }
31
+ }
32
+ function inspectGitRepositoryRoot({ gitlinkPath, canonicalSubmoduleRepository }) {
23
33
  const topLevelResult = runGit({
24
34
  args: ["rev-parse", "--show-toplevel"],
25
35
  cwd: canonicalSubmoduleRepository
26
36
  });
27
37
  if (processFailed(topLevelResult)) {
28
- const topLevelFailureDetail = topLevelResult.error?.message ||
29
- topLevelResult.stderr.trim() ||
30
- `exit ${topLevelResult.status}`;
38
+ const processErrorMessage = topLevelResult.error?.message;
39
+ const stderr = topLevelResult.stderr.trim();
40
+ let topLevelFailureDetail = `exit ${topLevelResult.status}`;
41
+ if (processErrorMessage !== undefined && processErrorMessage.length > 0) {
42
+ topLevelFailureDetail = processErrorMessage;
43
+ }
44
+ else if (stderr.length > 0) {
45
+ topLevelFailureDetail = stderr;
46
+ }
31
47
  return {
32
48
  kind: "inspection-failed",
33
49
  error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`
34
50
  };
35
51
  }
36
52
  const topLevel = topLevelResult.stdout.trim();
37
- if (!topLevel) {
53
+ if (topLevel.length === 0) {
38
54
  return {
39
55
  kind: "inspection-failed",
40
56
  error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`
@@ -1 +1 @@
1
- {"version":3,"file":"gitlink-worktree.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-worktree.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Git worktree checks for gitlink traversal. */\n\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\n\nexport type GitlinkWorktreeInspection =\n | { readonly kind: \"initialized\"; readonly repository: string }\n | { readonly kind: \"inspection-failed\"; readonly error: string }\n | { readonly kind: \"missing\" }\n | { readonly kind: \"not-independent\" };\n\nexport function canonicalRepositoryPath(repository: string): string {\n return realpathSync(resolve(repository));\n}\n\nexport function inspectGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection {\n const submoduleRepository = resolve(repository, gitlinkPath);\n let canonicalSubmoduleRepository: string;\n try {\n if (!statSync(submoduleRepository).isDirectory()) return { kind: \"missing\" };\n canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);\n } catch (error: unknown) {\n return missingPath(error)\n ? { kind: \"missing\" }\n : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);\n }\n\n const topLevelResult = runGit({\n args: [\"rev-parse\", \"--show-toplevel\"],\n cwd: canonicalSubmoduleRepository\n });\n if (processFailed(topLevelResult)) {\n const topLevelFailureDetail =\n topLevelResult.error?.message ||\n topLevelResult.stderr.trim() ||\n `exit ${topLevelResult.status}`;\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`\n };\n }\n\n const topLevel = topLevelResult.stdout.trim();\n if (!topLevel) {\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`\n };\n }\n\n try {\n return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===\n canonicalSubmoduleRepository\n ? { kind: \"initialized\", repository: canonicalSubmoduleRepository }\n : { kind: \"not-independent\" };\n } catch (error: unknown) {\n return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);\n }\n}\n\nexport function resolveDescendableGitlinkRepository({\n gitlinkPath,\n repository,\n visitedRepositories\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string | null {\n const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });\n if (inspection.kind === \"inspection-failed\") {\n throw new Error(inspection.error);\n }\n return inspection.kind === \"initialized\" && !visitedRepositories.has(inspection.repository)\n ? inspection.repository\n : null;\n}\n\nexport function visitRepository({\n repository,\n visitedRepositories\n}: Readonly<{\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): ReadonlySet<string> {\n return new Set([...visitedRepositories, repository]);\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction inspectionFailure(message: string, error: unknown): GitlinkWorktreeInspection {\n return { kind: \"inspection-failed\", error: `${message}: ${errorMessage(error)}` };\n}\n"]}
1
+ {"version":3,"file":"gitlink-worktree.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-worktree.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Git worktree checks for gitlink traversal. */\n\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\n\nexport type GitlinkWorktreeInspection =\n | { readonly kind: \"initialized\"; readonly repository: string }\n | { readonly kind: \"inspection-failed\"; readonly error: string }\n | { readonly kind: \"missing\" }\n | { readonly kind: \"not-independent\" };\n\nexport function canonicalRepositoryPath(repository: string): string {\n return realpathSync(resolve(repository));\n}\n\nexport function inspectGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection {\n const localWorktree = inspectLocalGitlinkWorktree({ gitlinkPath, repository });\n if (localWorktree.kind !== \"found\") return localWorktree;\n return inspectGitRepositoryRoot({\n gitlinkPath,\n canonicalSubmoduleRepository: localWorktree.repository\n });\n}\n\ntype LocalGitlinkWorktree = Readonly<{ readonly kind: \"found\"; readonly repository: string }>;\n\nfunction inspectLocalGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection | LocalGitlinkWorktree {\n const submoduleRepository = resolve(repository, gitlinkPath);\n try {\n if (!statSync(submoduleRepository).isDirectory()) return { kind: \"missing\" };\n return { kind: \"found\", repository: canonicalRepositoryPath(submoduleRepository) };\n } catch (error: unknown) {\n return missingPath(error)\n ? { kind: \"missing\" }\n : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);\n }\n}\n\nfunction inspectGitRepositoryRoot({\n gitlinkPath,\n canonicalSubmoduleRepository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly canonicalSubmoduleRepository: string;\n}>): GitlinkWorktreeInspection {\n const topLevelResult = runGit({\n args: [\"rev-parse\", \"--show-toplevel\"],\n cwd: canonicalSubmoduleRepository\n });\n if (processFailed(topLevelResult)) {\n const processErrorMessage = topLevelResult.error?.message;\n const stderr = topLevelResult.stderr.trim();\n let topLevelFailureDetail = `exit ${topLevelResult.status}`;\n if (processErrorMessage !== undefined && processErrorMessage.length > 0) {\n topLevelFailureDetail = processErrorMessage;\n } else if (stderr.length > 0) {\n topLevelFailureDetail = stderr;\n }\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`\n };\n }\n\n const topLevel = topLevelResult.stdout.trim();\n if (topLevel.length === 0) {\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`\n };\n }\n\n try {\n return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===\n canonicalSubmoduleRepository\n ? { kind: \"initialized\", repository: canonicalSubmoduleRepository }\n : { kind: \"not-independent\" };\n } catch (error: unknown) {\n return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);\n }\n}\n\nexport function resolveDescendableGitlinkRepository({\n gitlinkPath,\n repository,\n visitedRepositories\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string | null {\n const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });\n if (inspection.kind === \"inspection-failed\") {\n throw new Error(inspection.error);\n }\n return inspection.kind === \"initialized\" && !visitedRepositories.has(inspection.repository)\n ? inspection.repository\n : null;\n}\n\nexport function visitRepository({\n repository,\n visitedRepositories\n}: Readonly<{\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): ReadonlySet<string> {\n return new Set([...visitedRepositories, repository]);\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction inspectionFailure(message: string, error: unknown): GitlinkWorktreeInspection {\n return { kind: \"inspection-failed\", error: `${message}: ${errorMessage(error)}` };\n}\n"]}
@@ -0,0 +1,56 @@
1
+ /** Public validation and immutable snapshot boundary for one project-file selection. */
2
+ import { resolve } from "node:path";
3
+ import { snapshotClosedArray, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
4
+ import { collectProjectFiles as collectTrustedProjectFiles } from "./collection.mjs";
5
+ import { PROJECT_FILE_SOURCES } from "./configuration.mjs";
6
+ /**
7
+ * 按一份完整的显式 selection 同步收集 project-root-relative slash paths。
8
+ *
9
+ * 成功结果是冻结的稳定去重排序快照,空数组表示没有匹配路径。非法参数同步抛出
10
+ * `TypeError`;选定 filesystem 或 Git source 的收集失败继续抛出普通 `Error`,不会回退来源。
11
+ */
12
+ export function collectProjectFiles(authoredOptions) {
13
+ const options = parseOptions(authoredOptions);
14
+ return Object.freeze([...collectTrustedProjectFiles(options.projectRoot, options.selection)]);
15
+ }
16
+ function parseOptions(value) {
17
+ const options = snapshotExactClosedRecord(value, ["projectRoot", "selection"]);
18
+ if (options === undefined) {
19
+ throw new TypeError("collectProjectFiles requires an options record with exactly projectRoot and selection");
20
+ }
21
+ const projectRoot = parseProjectRoot(options.projectRoot);
22
+ if (projectRoot === undefined) {
23
+ throw new TypeError("collectProjectFiles projectRoot must be a non-empty string without U+0000");
24
+ }
25
+ const selection = parseSelection(options.selection);
26
+ if (selection === undefined) {
27
+ throw new TypeError("collectProjectFiles selection must be a complete record with source, include, and exclude");
28
+ }
29
+ return Object.freeze({ projectRoot, selection });
30
+ }
31
+ function parseProjectRoot(value) {
32
+ return typeof value === "string" && value.length > 0 && !value.includes("\0")
33
+ ? resolve(value)
34
+ : undefined;
35
+ }
36
+ function parseSelection(value) {
37
+ const selection = snapshotExactClosedRecord(value, ["source", "include", "exclude"]);
38
+ if (selection === undefined)
39
+ return undefined;
40
+ const include = snapshotStringArray(selection.include);
41
+ const exclude = snapshotStringArray(selection.exclude);
42
+ if (include === undefined || exclude === undefined || !isProjectFileSource(selection.source)) {
43
+ return undefined;
44
+ }
45
+ return Object.freeze({ exclude, include, source: selection.source });
46
+ }
47
+ function snapshotStringArray(value) {
48
+ const items = snapshotClosedArray(value);
49
+ return items?.every((item) => typeof item === "string") === true
50
+ ? Object.freeze([...items])
51
+ : undefined;
52
+ }
53
+ function isProjectFileSource(value) {
54
+ return PROJECT_FILE_SOURCES.some((source) => source === value);
55
+ }
56
+ //# sourceMappingURL=public-collection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-collection.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/public-collection.ts"],"names":[],"mappings":"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","sourcesContent":["/** Public validation and immutable snapshot boundary for one project-file selection. */\n\nimport { resolve } from \"node:path\";\n\nimport {\n snapshotClosedArray,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { collectProjectFiles as collectTrustedProjectFiles } from \"./collection.ts\";\nimport { PROJECT_FILE_SOURCES } from \"./configuration.ts\";\nimport type { ProjectFileSelection, ProjectFileSource } from \"./configuration.ts\";\n\n/** 调用方请求一次项目文件收集时必须完整提供的 root 与 selection。 */\nexport interface CollectProjectFilesOptions {\n /** 显式 project root;relative path 相对当前工作目录解析,不能为空或含 U+0000。 */\n readonly projectRoot: string;\n /** 完整的显式 selection;本工具不推断任何 Check 默认值。 */\n readonly selection: ProjectFileSelection;\n}\n\ntype ResolvedCollectProjectFilesOptions = Readonly<{\n readonly projectRoot: string;\n readonly selection: ProjectFileSelection;\n}>;\n\n/**\n * 按一份完整的显式 selection 同步收集 project-root-relative slash paths。\n *\n * 成功结果是冻结的稳定去重排序快照,空数组表示没有匹配路径。非法参数同步抛出\n * `TypeError`;选定 filesystem 或 Git source 的收集失败继续抛出普通 `Error`,不会回退来源。\n */\nexport function collectProjectFiles(\n authoredOptions: CollectProjectFilesOptions\n): readonly string[] {\n const options = parseOptions(authoredOptions);\n return Object.freeze([...collectTrustedProjectFiles(options.projectRoot, options.selection)]);\n}\n\nfunction parseOptions(value: unknown): ResolvedCollectProjectFilesOptions {\n const options = snapshotExactClosedRecord(value, [\"projectRoot\", \"selection\"]);\n if (options === undefined) {\n throw new TypeError(\n \"collectProjectFiles requires an options record with exactly projectRoot and selection\"\n );\n }\n\n const projectRoot = parseProjectRoot(options.projectRoot);\n if (projectRoot === undefined) {\n throw new TypeError(\n \"collectProjectFiles projectRoot must be a non-empty string without U+0000\"\n );\n }\n\n const selection = parseSelection(options.selection);\n if (selection === undefined) {\n throw new TypeError(\n \"collectProjectFiles selection must be a complete record with source, include, and exclude\"\n );\n }\n\n return Object.freeze({ projectRoot, selection });\n}\n\nfunction parseProjectRoot(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 && !value.includes(\"\\0\")\n ? resolve(value)\n : undefined;\n}\n\nfunction parseSelection(value: unknown): ProjectFileSelection | undefined {\n const selection = snapshotExactClosedRecord(value, [\"source\", \"include\", \"exclude\"]);\n if (selection === undefined) return undefined;\n\n const include = snapshotStringArray(selection.include);\n const exclude = snapshotStringArray(selection.exclude);\n if (include === undefined || exclude === undefined || !isProjectFileSource(selection.source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source: selection.source });\n}\n\nfunction snapshotStringArray(value: unknown): readonly string[] | undefined {\n const items = snapshotClosedArray(value);\n return items?.every((item): item is string => typeof item === \"string\") === true\n ? Object.freeze([...items])\n : undefined;\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /** Path and Git-output projections shared by revision traversal helpers. */
2
2
  import { toSlashPath } from "../host-environment/path.mjs";
3
- import { matchesAnyConfigGlob } from "./config-glob.mjs";
3
+ import { matchesAnyConfigGlob } from "../../data-boundary/config-glob.mjs";
4
4
  export function uniqueSortedPaths(files) {
5
5
  return [...new Set(files.map(toSlashPath))].sort();
6
6
  }
@@ -13,7 +13,7 @@ export function joinSlash({ path, prefix }) {
13
13
  return prefix ? `${toSlashPath(prefix)}/${toSlashPath(path)}` : toSlashPath(path);
14
14
  }
15
15
  export function nonEmptyGitOutput(stdout) {
16
- const value = (stdout || "").trim();
17
- return value || null;
16
+ const value = (stdout ?? "").trim();
17
+ return value.length > 0 ? value : null;
18
18
  }
19
19
  //# sourceMappingURL=revision-paths.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"revision-paths.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-paths.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,cAAc,EAKd;IACA,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACuD;IAC7D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IACjE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC","sourcesContent":["/** Path and Git-output projections shared by revision traversal helpers. */\n\nimport { toSlashPath } from \"../host-environment/path.ts\";\nimport { matchesAnyConfigGlob } from \"./config-glob.ts\";\n\nexport function uniqueSortedPaths(files: readonly string[]): string[] {\n return [...new Set(files.map(toSlashPath))].sort();\n}\n\nexport function prefixAndFilter({\n files,\n prefix,\n scanInputPaths\n}: Readonly<{\n readonly files: readonly string[];\n readonly prefix: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n return files\n .map((file) => joinSlash({ path: file, prefix }))\n .filter((file) => scanInputPaths.length === 0 || matchesAnyConfigGlob(file, scanInputPaths));\n}\n\nexport function joinSlash({\n path,\n prefix\n}: Readonly<{ readonly path: string; readonly prefix: string }>): string {\n return prefix ? `${toSlashPath(prefix)}/${toSlashPath(path)}` : toSlashPath(path);\n}\n\nexport function nonEmptyGitOutput(stdout: string | null | undefined): string | null {\n const value = (stdout || \"\").trim();\n return value || null;\n}\n"]}
1
+ {"version":3,"file":"revision-paths.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-paths.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,cAAc,EAKd;IACA,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACuD;IAC7D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IACjE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC","sourcesContent":["/** Path and Git-output projections shared by revision traversal helpers. */\n\nimport { toSlashPath } from \"../host-environment/path.ts\";\nimport { matchesAnyConfigGlob } from \"../../data-boundary/config-glob.ts\";\n\nexport function uniqueSortedPaths(files: readonly string[]): string[] {\n return [...new Set(files.map(toSlashPath))].sort();\n}\n\nexport function prefixAndFilter({\n files,\n prefix,\n scanInputPaths\n}: Readonly<{\n readonly files: readonly string[];\n readonly prefix: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n return files\n .map((file) => joinSlash({ path: file, prefix }))\n .filter((file) => scanInputPaths.length === 0 || matchesAnyConfigGlob(file, scanInputPaths));\n}\n\nexport function joinSlash({\n path,\n prefix\n}: Readonly<{ readonly path: string; readonly prefix: string }>): string {\n return prefix ? `${toSlashPath(prefix)}/${toSlashPath(path)}` : toSlashPath(path);\n}\n\nexport function nonEmptyGitOutput(stdout: string | null | undefined): string | null {\n const value = (stdout ?? \"\").trim();\n return value.length > 0 ? value : null;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /** Enumerates files from initialized, non-cyclic submodule working trees. */
2
- import { processFailed } from "../host-environment/process/command.mjs";
3
- import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
2
+ import { processFailed } from "../host-environment/process.mjs";
3
+ import { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
4
4
  import { canonicalRepositoryPath, resolveDescendableGitlinkRepository, visitRepository } from "./gitlink-worktree.mjs";
5
5
  import { gitlinksAtRevision } from "./gitlink-revision.mjs";
6
6
  import { joinSlash, nonEmptyGitOutput, prefixAndFilter, uniqueSortedPaths } from "./revision-paths.mjs";
@@ -16,7 +16,7 @@ export function collectSubmoduleWorktreeFiles({ repository, scanInputPaths }) {
16
16
  repository,
17
17
  visitedRepositories
18
18
  });
19
- if (!submoduleRepository)
19
+ if (submoduleRepository === null)
20
20
  continue;
21
21
  files.push(...collectWorktreeFiles({
22
22
  prefix: gitlink.path,
@@ -36,10 +36,7 @@ function collectWorktreeFiles({ prefix, repository, scanInputPaths, visitedRepos
36
36
  cwd: repository
37
37
  });
38
38
  if (processFailed(result)) {
39
- const detail = result.stderr.trim() ||
40
- result.error?.message ||
41
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
42
- throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);
39
+ throw new Error(`could not enumerate git-worktree files in ${repository}: ${gitFailureDetail(result)}`);
43
40
  }
44
41
  const files = prefixAndFilter({
45
42
  files: splitNulDelimitedGitFileList(result.stdout),
@@ -66,7 +63,7 @@ function collectNestedWorktreeFiles({ prefix, repository, revision, scanInputPat
66
63
  repository,
67
64
  visitedRepositories
68
65
  });
69
- if (!submoduleRepository)
66
+ if (submoduleRepository === null)
70
67
  continue;
71
68
  files.push(...collectWorktreeFiles({
72
69
  prefix: joinSlash({ path: gitlink.path, prefix }),
@@ -88,15 +85,14 @@ function worktreeRevision(repository) {
88
85
  return revision;
89
86
  throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);
90
87
  }
91
- const headDoesNotExist = result.error === undefined &&
88
+ if (headDoesNotExist(result))
89
+ return null;
90
+ throw new Error(`could not inspect git-worktree revision in ${repository}: ${gitFailureDetail(result)}`);
91
+ }
92
+ function headDoesNotExist(result) {
93
+ return (result.error === undefined &&
92
94
  result.signal === null &&
93
95
  result.status === 1 &&
94
- result.stderr.trim() === "";
95
- if (headDoesNotExist)
96
- return null;
97
- const detail = result.stderr.trim() ||
98
- result.error?.message ||
99
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
100
- throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);
96
+ result.stderr.trim() === "");
101
97
  }
102
98
  //# sourceMappingURL=revision-worktree-files.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"revision-worktree-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-worktree-files.ts"],"names":[],"mappings":"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","sourcesContent":["/** Enumerates files from initialized, non-cyclic submodule working trees. */\n\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport {\n canonicalRepositoryPath,\n resolveDescendableGitlinkRepository,\n visitRepository\n} from \"./gitlink-worktree.ts\";\nimport { gitlinksAtRevision } from \"./gitlink-revision.ts\";\nimport {\n joinSlash,\n nonEmptyGitOutput,\n prefixAndFilter,\n uniqueSortedPaths\n} from \"./revision-paths.ts\";\n\nexport function collectSubmoduleWorktreeFiles({\n repository,\n scanInputPaths\n}: Readonly<{\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n const files: string[] = [];\n const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);\n const revision = worktreeRevision(repository);\n if (revision === null) return files;\n\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: gitlink.path,\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return uniqueSortedPaths(files);\n}\n\nfunction collectWorktreeFiles({\n prefix,\n repository,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);\n }\n\n const files = prefixAndFilter({\n files: splitNulDelimitedGitFileList(result.stdout),\n prefix,\n scanInputPaths\n });\n const revision = worktreeRevision(repository);\n if (revision === null) return uniqueSortedPaths(files);\n files.push(\n ...collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n })\n );\n return uniqueSortedPaths(files);\n}\n\nfunction collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly revision: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const files: string[] = [];\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: joinSlash({ path: gitlink.path, prefix }),\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return files;\n}\n\nfunction worktreeRevision(repository: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], cwd: repository });\n if (!processFailed(result)) {\n const revision = nonEmptyGitOutput(result.stdout);\n if (revision !== null) return revision;\n throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);\n }\n const headDoesNotExist =\n result.error === undefined &&\n result.signal === null &&\n result.status === 1 &&\n result.stderr.trim() === \"\";\n if (headDoesNotExist) return null;\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);\n}\n"]}
1
+ {"version":3,"file":"revision-worktree-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-worktree-files.ts"],"names":[],"mappings":"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","sourcesContent":["/** Enumerates files from initialized, non-cyclic submodule working trees. */\n\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport {\n canonicalRepositoryPath,\n resolveDescendableGitlinkRepository,\n visitRepository\n} from \"./gitlink-worktree.ts\";\nimport { gitlinksAtRevision } from \"./gitlink-revision.ts\";\nimport {\n joinSlash,\n nonEmptyGitOutput,\n prefixAndFilter,\n uniqueSortedPaths\n} from \"./revision-paths.ts\";\n\nexport function collectSubmoduleWorktreeFiles({\n repository,\n scanInputPaths\n}: Readonly<{\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n const files: string[] = [];\n const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);\n const revision = worktreeRevision(repository);\n if (revision === null) return files;\n\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (submoduleRepository === null) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: gitlink.path,\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return uniqueSortedPaths(files);\n}\n\nfunction collectWorktreeFiles({\n prefix,\n repository,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: repository\n });\n if (processFailed(result)) {\n throw new Error(\n `could not enumerate git-worktree files in ${repository}: ${gitFailureDetail(result)}`\n );\n }\n\n const files = prefixAndFilter({\n files: splitNulDelimitedGitFileList(result.stdout),\n prefix,\n scanInputPaths\n });\n const revision = worktreeRevision(repository);\n if (revision === null) return uniqueSortedPaths(files);\n files.push(\n ...collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n })\n );\n return uniqueSortedPaths(files);\n}\n\nfunction collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly revision: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const files: string[] = [];\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (submoduleRepository === null) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: joinSlash({ path: gitlink.path, prefix }),\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return files;\n}\n\nfunction worktreeRevision(repository: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], cwd: repository });\n if (!processFailed(result)) {\n const revision = nonEmptyGitOutput(result.stdout);\n if (revision !== null) return revision;\n throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);\n }\n if (headDoesNotExist(result)) return null;\n throw new Error(\n `could not inspect git-worktree revision in ${repository}: ${gitFailureDetail(result)}`\n );\n}\n\nfunction headDoesNotExist(result: ReturnType<typeof runGit>): boolean {\n return (\n result.error === undefined &&\n result.signal === null &&\n result.status === 1 &&\n result.stderr.trim() === \"\"\n );\n}\n"]}
@@ -0,0 +1,15 @@
1
+ const UTF8_DECODER = new TextDecoder("utf-8", { fatal: true });
2
+ /** Classifies already-read bytes without retaining or publishing their content on non-text branches. */
3
+ export function classifySecretDetectionBytes(bytes, maximumFileBytes) {
4
+ if (bytes.byteLength > maximumFileBytes)
5
+ return Object.freeze({ kind: "coverage-gap", reason: "file-byte-limit" });
6
+ if (bytes.includes(0))
7
+ return Object.freeze({ kind: "coverage-gap", reason: "contains-nul" });
8
+ try {
9
+ return Object.freeze({ content: UTF8_DECODER.decode(bytes), kind: "text" });
10
+ }
11
+ catch {
12
+ return Object.freeze({ kind: "coverage-gap", reason: "invalid-utf8" });
13
+ }
14
+ }
15
+ //# sourceMappingURL=classification.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.mjs","sourceRoot":"","sources":["../../../../src/package-checks/secret-detection/classification.ts"],"names":[],"mappings":"AAcA,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/D,wGAAwG;AACxG,MAAM,UAAU,4BAA4B,CAC1C,KAAiB,EACjB,gBAAwB;IAExB,IAAI,KAAK,CAAC,UAAU,GAAG,gBAAgB;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC","sourcesContent":["/** A bounded, non-secret classification result for one explicitly selected file. */\nexport type SecretDetectionInputClassification = Readonly<\n | { readonly kind: \"coverage-gap\"; readonly reason: SecretDetectionCoverageGapReason }\n | { readonly content: string; readonly kind: \"text\" }\n>;\n\n/** Deterministic reasons why an explicitly selected file did not receive detector coverage. */\nexport type SecretDetectionCoverageGapReason =\n | \"contains-nul\"\n | \"file-count-limit\"\n | \"file-byte-limit\"\n | \"invalid-utf8\"\n | \"total-byte-limit\";\n\nconst UTF8_DECODER = new TextDecoder(\"utf-8\", { fatal: true });\n\n/** Classifies already-read bytes without retaining or publishing their content on non-text branches. */\nexport function classifySecretDetectionBytes(\n bytes: Uint8Array,\n maximumFileBytes: number\n): SecretDetectionInputClassification {\n if (bytes.byteLength > maximumFileBytes)\n return Object.freeze({ kind: \"coverage-gap\", reason: \"file-byte-limit\" });\n if (bytes.includes(0)) return Object.freeze({ kind: \"coverage-gap\", reason: \"contains-nul\" });\n try {\n return Object.freeze({ content: UTF8_DECODER.decode(bytes), kind: \"text\" });\n } catch {\n return Object.freeze({ kind: \"coverage-gap\", reason: \"invalid-utf8\" });\n }\n}\n"]}