@zxyycom/vibe-check 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/README.md +36 -5
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +1 -1
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  15. package/dist/esm/check-settlement/record-store.mjs +1 -1
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  18. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  19. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  20. package/dist/esm/data-boundary/closed-values.mjs +28 -4
  21. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  22. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  23. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  24. package/dist/esm/data-boundary/project-path.mjs +19 -0
  25. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  26. package/dist/esm/index.mjs +12 -5
  27. package/dist/esm/index.mjs.map +1 -1
  28. package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
  29. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  30. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  31. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  32. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
  33. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
  34. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  35. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  36. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  37. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  38. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  39. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  40. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  41. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  42. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  43. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  44. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
  45. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  46. package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
  47. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  48. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
  50. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  54. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  55. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  56. package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
  57. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  58. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
  59. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
  60. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  61. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  62. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  63. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  64. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  65. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  66. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  67. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  68. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
  69. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  70. package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
  71. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  72. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
  73. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
  74. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
  75. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
  76. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
  77. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
  78. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
  79. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
  80. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
  81. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
  82. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
  83. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
  84. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
  85. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
  86. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
  87. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
  88. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
  89. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
  90. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
  91. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
  92. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
  93. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
  94. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
  95. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
  96. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
  97. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
  98. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
  99. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
  100. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
  101. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
  102. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
  103. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
  104. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
  105. package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
  106. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  107. package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
  108. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  109. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
  110. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
  111. package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
  112. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  113. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  114. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  115. package/dist/esm/package-checks/host-environment/git.mjs +11 -0
  116. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  117. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  118. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  119. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  120. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  121. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  122. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  123. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  124. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  125. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  126. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  127. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  128. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  129. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  130. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  131. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  132. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  133. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  134. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  135. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  136. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  137. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  138. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  139. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  140. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
  141. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  142. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
  143. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  144. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
  145. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
  146. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  147. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  148. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
  149. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  150. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
  151. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  152. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  153. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
  154. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
  155. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  156. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  157. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  158. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  159. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  160. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  161. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  162. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  163. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  164. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  165. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  166. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  167. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  168. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  169. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  170. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  171. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  172. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  173. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  174. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  175. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  176. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  177. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  178. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  179. package/dist/esm/package-checks/project-files/collection.mjs +23 -19
  180. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  181. package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
  182. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  183. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
  184. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  185. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
  186. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  187. package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
  188. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
  189. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  190. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  191. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
  192. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  193. package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
  194. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
  195. package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
  196. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
  197. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
  198. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
  199. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
  200. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
  201. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
  202. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
  203. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  204. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  205. package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
  206. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  207. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  208. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  209. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  210. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  211. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  212. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
  213. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  214. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
  215. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  216. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  217. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
  218. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  219. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
  220. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  221. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  222. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
  223. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  224. package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
  225. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  226. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
  227. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
  228. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  229. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  230. package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
  231. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  232. package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
  233. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  234. package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
  235. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
  236. package/dist/esm/project-definition/project-changes.mjs +70 -0
  237. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  238. package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
  239. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  240. package/dist/esm/project-definition/project-definition.mjs +22 -15
  241. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  242. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
  243. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
  244. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
  245. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
  246. package/dist/esm/project-run/aggregation.mjs +42 -59
  247. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  248. package/dist/esm/project-run/changes/git.mjs +161 -0
  249. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  250. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  251. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  252. package/dist/esm/project-run/check-execution/callback.mjs +3 -2
  253. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  254. package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
  255. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  256. package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
  257. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  258. package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
  259. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  260. package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
  261. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
  262. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
  263. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  264. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  265. package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
  266. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  267. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  268. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  269. package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
  270. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  271. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  272. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  273. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  274. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  275. package/dist/esm/project-run/completion/completion.mjs +18 -1
  276. package/dist/esm/project-run/completion/completion.mjs.map +1 -1
  277. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  278. package/dist/esm/project-run/controls/validation.mjs +7 -54
  279. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  280. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  281. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  282. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
  283. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
  284. package/dist/esm/project-run/invocation/candidate.mjs +17 -13
  285. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
  286. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  287. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  288. package/dist/esm/project-run/invocation/creation.mjs +7 -3
  289. package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
  290. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  291. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  292. package/dist/esm/project-run/invocation/run.mjs +13 -112
  293. package/dist/esm/project-run/invocation/run.mjs.map +1 -1
  294. package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
  295. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
  296. package/dist/esm/project-run/outputs/status.mjs +12 -12
  297. package/dist/esm/project-run/outputs/status.mjs.map +1 -1
  298. package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
  299. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  300. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
  301. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  302. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
  303. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  304. package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
  305. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  306. package/dist/esm/project-run/project-context.mjs +2 -1
  307. package/dist/esm/project-run/project-context.mjs.map +1 -1
  308. package/dist/esm/project-run/result.mjs +2 -2
  309. package/dist/esm/project-run/result.mjs.map +1 -1
  310. package/dist/esm/project-run/run.mjs.map +1 -1
  311. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  312. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  313. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
  314. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
  315. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
  316. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
  317. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
  318. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
  319. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
  320. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
  321. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  322. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
  323. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
  324. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
  325. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
  326. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
  327. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
  328. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
  329. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
  330. package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
  331. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  332. package/docs/api-mechanics.md +147 -28
  333. package/docs/changelog.md +145 -2
  334. package/docs/checks/duplicate-detection.md +22 -3
  335. package/docs/checks/file-metrics.md +25 -6
  336. package/docs/checks/function-metrics.md +21 -2
  337. package/docs/checks/json-schema-validation.md +25 -4
  338. package/docs/checks/json-validation.md +24 -5
  339. package/docs/checks/maintenance-reminders.md +30 -6
  340. package/docs/checks/markdown-link-validation.md +24 -4
  341. package/docs/checks/markdown-lint.md +167 -0
  342. package/docs/checks/secret-detection.md +31 -7
  343. package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
  344. package/docs/guides/building-project-gate.md +706 -0
  345. package/docs/guides/callbacks.md +81 -22
  346. package/docs/guides/check-dependencies.md +41 -10
  347. package/docs/guides/collecting-project-files.md +7 -7
  348. package/docs/guides/command-check.md +155 -0
  349. package/docs/guides/data-boundaries.md +140 -0
  350. package/docs/guides/extending-check-lifecycle.md +77 -25
  351. package/docs/guides/finding-waivers.md +43 -1
  352. package/docs/guides/learned-scheduling.md +1 -1
  353. package/docs/guides/run-outputs.md +35 -9
  354. package/docs/guides/scheduling.md +15 -15
  355. package/docs/output.md +6 -5
  356. package/package.json +2 -1
  357. package/src/check/check.ts +332 -92
  358. package/src/check/flag-enablement.ts +76 -0
  359. package/src/check/handoff-provider-identity.ts +34 -0
  360. package/src/check/inherited-collection.ts +1 -1
  361. package/src/check/project-changes.ts +14 -0
  362. package/src/check/project-context.ts +11 -0
  363. package/src/check-settlement/facts.ts +1 -1
  364. package/src/check-settlement/record-store.ts +1 -1
  365. package/src/data-boundary/canonical-data.ts +36 -9
  366. package/src/data-boundary/canonical-json.ts +18 -1
  367. package/src/data-boundary/closed-values.ts +26 -6
  368. package/src/data-boundary/config-glob.ts +17 -0
  369. package/src/data-boundary/project-path.ts +21 -0
  370. package/src/index.ts +72 -11
  371. package/src/machine-output/v4/atomic-publication.ts +3 -1
  372. package/src/package-checks/check-authoring.ts +136 -0
  373. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
  374. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
  375. package/src/package-checks/command-check/command-check.ts +152 -0
  376. package/src/package-checks/command-check/contract.ts +168 -0
  377. package/src/package-checks/command-check/execution.ts +211 -0
  378. package/src/package-checks/command-check/options.ts +331 -0
  379. package/src/package-checks/command-check/transcript.ts +35 -0
  380. package/src/package-checks/duplicate-detection/default-check.ts +37 -6
  381. package/src/package-checks/duplicate-detection/execution.ts +2 -4
  382. package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
  383. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  384. package/src/package-checks/duplicate-detection/options.ts +6 -3
  385. package/src/package-checks/duplicate-detection/records.ts +1 -1
  386. package/src/package-checks/file-metrics/constructor.ts +29 -6
  387. package/src/package-checks/file-metrics/execution.ts +2 -4
  388. package/src/package-checks/file-metrics/finding-messages.ts +1 -1
  389. package/src/package-checks/file-metrics/options.ts +6 -3
  390. package/src/package-checks/file-metrics/records.ts +1 -1
  391. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  392. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  393. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  394. package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
  395. package/src/package-checks/function-metrics/analysis.ts +7 -2
  396. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
  397. package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
  398. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
  399. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
  400. package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
  401. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
  402. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
  403. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
  404. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
  405. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
  406. package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
  407. package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
  408. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
  409. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
  410. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
  411. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
  412. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
  413. package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
  414. package/src/package-checks/function-metrics/constructor.ts +30 -7
  415. package/src/package-checks/function-metrics/execution.ts +2 -4
  416. package/src/package-checks/function-metrics/finding-messages.ts +2 -2
  417. package/src/package-checks/function-metrics/measurement.ts +3 -1
  418. package/src/package-checks/function-metrics/options.ts +6 -3
  419. package/src/package-checks/function-metrics/records.ts +1 -1
  420. package/src/package-checks/host-environment/git.ts +11 -0
  421. package/src/package-checks/host-environment/path.ts +1 -20
  422. package/src/package-checks/host-environment/process/contract.ts +17 -9
  423. package/src/package-checks/host-environment/process/result.ts +48 -20
  424. package/src/package-checks/host-environment/process/runner.ts +8 -4
  425. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  426. package/src/package-checks/json-schema-validation/options.ts +4 -1
  427. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  428. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  429. package/src/package-checks/json-validation/default-check.ts +27 -6
  430. package/src/package-checks/json-validation/options.ts +4 -1
  431. package/src/package-checks/local-cache-options.ts +40 -0
  432. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  433. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  434. package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
  435. package/src/package-checks/markdown-link-validation/execution.ts +1 -1
  436. package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
  437. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  438. package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
  439. package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
  440. package/src/package-checks/markdown-link-validation/options.ts +6 -7
  441. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
  442. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  443. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  444. package/src/package-checks/markdown-lint/execution.ts +266 -0
  445. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  446. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  447. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  448. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  449. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  450. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  451. package/src/package-checks/markdown-lint/options.ts +82 -0
  452. package/src/package-checks/markdown-lint/records.ts +132 -0
  453. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  454. package/src/package-checks/project-files/collection.ts +38 -22
  455. package/src/package-checks/project-files/config-glob.ts +1 -17
  456. package/src/package-checks/project-files/configuration.ts +1 -1
  457. package/src/package-checks/project-files/gitlink-revision.ts +4 -6
  458. package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
  459. package/src/package-checks/project-files/public-collection.ts +1 -1
  460. package/src/package-checks/project-files/revision-paths.ts +3 -3
  461. package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
  462. package/src/package-checks/secret-detection/default-check.ts +29 -6
  463. package/src/package-checks/secret-detection/execution.ts +2 -2
  464. package/src/package-checks/secret-detection/input-preparation.ts +64 -7
  465. package/src/package-checks/secret-detection/options.ts +5 -2
  466. package/src/package-checks/secret-detection/records.ts +1 -1
  467. package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
  468. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  469. package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
  470. package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
  471. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  472. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
  473. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
  474. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
  475. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
  476. package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
  477. package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
  478. package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
  479. package/src/project-definition/check-tree/authoring.ts +15 -8
  480. package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
  481. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  482. package/src/project-definition/check-tree/materialization.ts +12 -8
  483. package/src/project-definition/check-tree/resolution.ts +13 -15
  484. package/src/project-definition/declarative-snapshot.ts +9 -2
  485. package/src/project-definition/project-changes.ts +112 -0
  486. package/src/project-definition/project-definition-validation.ts +58 -10
  487. package/src/project-definition/project-definition.ts +41 -68
  488. package/src/project-definition/scheduler-policy.ts +6 -3
  489. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
  490. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
  491. package/src/project-run/aggregation.ts +51 -74
  492. package/src/project-run/changes/git.ts +206 -0
  493. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  494. package/src/project-run/check-execution/callback.ts +3 -2
  495. package/src/project-run/check-execution/dependencies.ts +120 -6
  496. package/src/project-run/check-execution/execution-finalization.ts +6 -4
  497. package/src/project-run/check-execution/execution-settlement.ts +88 -29
  498. package/src/project-run/check-execution/flag-controls.ts +22 -8
  499. package/src/project-run/check-execution/lifecycle.ts +14 -6
  500. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  501. package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
  502. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  503. package/src/project-run/check-execution/resolved-checks.ts +40 -219
  504. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  505. package/src/project-run/check-execution/terminal-result.ts +108 -29
  506. package/src/project-run/completion/completion.ts +17 -3
  507. package/src/project-run/controls/contract.ts +6 -16
  508. package/src/project-run/controls/validation.ts +7 -60
  509. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  510. package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
  511. package/src/project-run/invocation/candidate.ts +28 -15
  512. package/src/project-run/invocation/candidates.ts +56 -0
  513. package/src/project-run/invocation/creation.ts +7 -3
  514. package/src/project-run/invocation/execution.ts +136 -0
  515. package/src/project-run/invocation/run.ts +15 -179
  516. package/src/project-run/invocation/scheduler.ts +13 -6
  517. package/src/project-run/outputs/status.ts +15 -15
  518. package/src/project-run/progress-rendering/presentation.ts +35 -13
  519. package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
  520. package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
  521. package/src/project-run/progress-rendering/renderer.ts +10 -4
  522. package/src/project-run/project-context.ts +8 -4
  523. package/src/project-run/result.ts +5 -5
  524. package/src/project-run/run.ts +1 -1
  525. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  526. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
  527. package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
  528. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
  529. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
  530. package/src/project-run/task-scheduler/execution-state.ts +4 -4
  531. package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
  532. package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
  533. package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
  534. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
  535. package/src/project-run/task-scheduler/scheduler.ts +23 -6
  536. package/types/check/check.d.ts +178 -67
  537. package/types/check/flag-enablement.d.ts +42 -0
  538. package/types/check/handoff-provider-identity.d.ts +12 -0
  539. package/types/check/project-changes.d.ts +13 -0
  540. package/types/check/project-context.d.ts +10 -0
  541. package/types/check-settlement/facts.d.ts +1 -1
  542. package/types/data-boundary/canonical-data.d.ts +28 -5
  543. package/types/data-boundary/canonical-json.d.ts +18 -1
  544. package/types/data-boundary/closed-values.d.ts +17 -1
  545. package/types/data-boundary/config-glob.d.ts +5 -0
  546. package/types/data-boundary/project-path.d.ts +4 -0
  547. package/types/index.d.ts +27 -11
  548. package/types/package-checks/check-authoring.d.ts +45 -0
  549. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
  550. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
  551. package/types/package-checks/command-check/command-check.d.ts +48 -0
  552. package/types/package-checks/command-check/contract.d.ts +108 -0
  553. package/types/package-checks/command-check/execution.d.ts +7 -0
  554. package/types/package-checks/command-check/options.d.ts +11 -0
  555. package/types/package-checks/command-check/transcript.d.ts +8 -0
  556. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  557. package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
  558. package/types/package-checks/duplicate-detection/options.d.ts +4 -3
  559. package/types/package-checks/duplicate-detection/records.d.ts +1 -1
  560. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  561. package/types/package-checks/file-metrics/options.d.ts +4 -3
  562. package/types/package-checks/file-metrics/records.d.ts +1 -1
  563. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  564. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  565. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
  566. package/types/package-checks/function-metrics/constructor.d.ts +5 -2
  567. package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
  568. package/types/package-checks/function-metrics/options.d.ts +4 -3
  569. package/types/package-checks/function-metrics/records.d.ts +1 -1
  570. package/types/package-checks/host-environment/git.d.ts +2 -0
  571. package/types/package-checks/host-environment/path.d.ts +1 -3
  572. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  573. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  574. package/types/package-checks/json-schema-validation/options.d.ts +2 -1
  575. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  576. package/types/package-checks/json-validation/options.d.ts +2 -1
  577. package/types/package-checks/local-cache-options.d.ts +9 -0
  578. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  579. package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
  580. package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
  581. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  582. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  583. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  584. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  585. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  586. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  587. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  588. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  589. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  590. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  591. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  592. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  593. package/types/package-checks/secret-detection/default-check.d.ts +4 -1
  594. package/types/package-checks/secret-detection/options.d.ts +3 -2
  595. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  596. package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
  597. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  598. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
  599. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
  600. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
  601. package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
  602. package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
  603. package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
  604. package/types/project-definition/check-tree/authoring.d.ts +5 -3
  605. package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
  606. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  607. package/types/project-definition/check-tree/resolution.d.ts +6 -4
  608. package/types/project-definition/declarative-snapshot.d.ts +4 -1
  609. package/types/project-definition/project-changes.d.ts +30 -0
  610. package/types/project-definition/project-definition.d.ts +15 -30
  611. package/types/project-definition/scheduler-policy.d.ts +3 -3
  612. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
  613. package/types/project-run/aggregation.d.ts +8 -6
  614. package/types/project-run/changes/git.d.ts +14 -0
  615. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  616. package/types/project-run/check-execution/dependencies.d.ts +3 -0
  617. package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
  618. package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
  619. package/types/project-run/check-execution/flag-controls.d.ts +1 -1
  620. package/types/project-run/check-execution/lifecycle.d.ts +9 -5
  621. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  622. package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
  623. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  624. package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
  625. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  626. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  627. package/types/project-run/completion/completion.d.ts +3 -1
  628. package/types/project-run/controls/contract.d.ts +6 -16
  629. package/types/project-run/invocation/candidates.d.ts +8 -0
  630. package/types/project-run/invocation/execution.d.ts +5 -0
  631. package/types/project-run/invocation/run.d.ts +2 -2
  632. package/types/project-run/outputs/status.d.ts +4 -4
  633. package/types/project-run/progress-rendering/presentation.d.ts +4 -3
  634. package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
  635. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
  636. package/types/project-run/progress-rendering/renderer.d.ts +4 -2
  637. package/types/project-run/project-context.d.ts +3 -3
  638. package/types/project-run/result.d.ts +3 -3
  639. package/types/project-run/run.d.ts +1 -1
  640. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  641. package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
  642. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
  643. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
  644. package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
  645. package/dist/esm/check/finding-presentation.mjs.map +0 -1
  646. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  647. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
  648. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
  649. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
  650. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
  651. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
  652. package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
  653. package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
  654. package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
  655. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  656. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  657. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  658. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
  659. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  660. /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
  661. /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
  662. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
  663. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
  664. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
  665. /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
  666. /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
  667. /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
  668. /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
  669. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
  670. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
@@ -3,11 +3,11 @@
3
3
  import { lstatSync } from "node:fs";
4
4
  import { resolve } from "node:path";
5
5
 
6
- import { matchesAnyConfigGlob } from "./config-glob.ts";
6
+ import { matchesAnyConfigGlob } from "../../data-boundary/config-glob.ts";
7
7
  import { collectSubmoduleWorktreeFiles } from "./revision-worktree-files.ts";
8
8
  import { errorMessage } from "../host-environment/error-message.ts";
9
9
  import { processFailed } from "../host-environment/process.ts";
10
- import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.ts";
10
+ import { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from "../host-environment/git.ts";
11
11
  import { toSlashPath } from "../host-environment/path.ts";
12
12
  import { walkFiles } from "../host-environment/filesystem.ts";
13
13
  import type { ProjectFileSelection, ProjectFileSource } from "./configuration.ts";
@@ -17,6 +17,16 @@ type NamedProjectFileSelection = Readonly<{
17
17
  readonly selection: ProjectFileSelection;
18
18
  }>;
19
19
 
20
+ type SourceCandidateCollector = (
21
+ rootDir: string,
22
+ selections: readonly NamedProjectFileSelection[]
23
+ ) => readonly string[];
24
+
25
+ const sourceCandidateCollectors = Object.freeze({
26
+ filesystem: collectFilesystemCandidates,
27
+ "git-worktree": collectGitWorktreeCandidates
28
+ }) satisfies Readonly<Partial<Record<ProjectFileSource, SourceCandidateCollector>>>;
29
+
20
30
  const CONFIG_GLOB_MAGIC = /[\\*?[\]{}()!+@]/u;
21
31
 
22
32
  /**
@@ -77,21 +87,29 @@ function collectSourceCandidates(
77
87
  source: ProjectFileSource,
78
88
  selections: readonly NamedProjectFileSelection[]
79
89
  ): readonly string[] {
80
- switch (source) {
81
- case "filesystem":
82
- return uniqueSorted(
83
- walkFiles({
84
- ignoredDirs: commonExcludedDirectoryNames(selections),
85
- rootDir
86
- }).map(toSlashPath)
87
- );
88
- case "git-worktree":
89
- return collectGitWorktreeCandidates(rootDir, selections);
90
- default: {
91
- const unsupportedSource: never = source;
92
- throw new TypeError(`unsupported project file source: ${String(unsupportedSource)}`);
93
- }
94
- }
90
+ return sourceCandidateCollectorFor(source)(rootDir, selections);
91
+ }
92
+
93
+ function sourceCandidateCollectorFor(source: ProjectFileSource): SourceCandidateCollector {
94
+ const collector = sourceCandidateCollectors[source];
95
+ if (collector === undefined) return unsupportedProjectFileSource(source);
96
+ return collector;
97
+ }
98
+
99
+ function unsupportedProjectFileSource(source: ProjectFileSource): never {
100
+ throw new TypeError(`unsupported project file source: ${source}`);
101
+ }
102
+
103
+ function collectFilesystemCandidates(
104
+ rootDir: string,
105
+ selections: readonly NamedProjectFileSelection[]
106
+ ): readonly string[] {
107
+ return uniqueSorted(
108
+ walkFiles({
109
+ ignoredDirs: commonExcludedDirectoryNames(selections),
110
+ rootDir
111
+ }).map(toSlashPath)
112
+ );
95
113
  }
96
114
 
97
115
  function collectGitWorktreeCandidates(
@@ -103,11 +121,9 @@ function collectGitWorktreeCandidates(
103
121
  cwd: rootDir
104
122
  });
105
123
  if (processFailed(result)) {
106
- const detail =
107
- result.stderr.trim() ||
108
- result.error?.message ||
109
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
110
- throw new Error(`could not enumerate git-worktree files in ${rootDir}: ${detail}`);
124
+ throw new Error(
125
+ `could not enumerate git-worktree files in ${rootDir}: ${gitFailureDetail(result)}`
126
+ );
111
127
  }
112
128
 
113
129
  const include = uniqueSorted(selections.flatMap(({ selection }) => [...selection.include]));
@@ -1,17 +1 @@
1
- import { minimatch } from "minimatch";
2
-
3
- import { toSlashPath } from "../host-environment/path.ts";
4
-
5
- /**
6
- * Product config glob 的唯一 matcher boundary。
7
- * Candidate 使用 slash form;dot path 只由显式 glob 决定,不附加隐式忽略规则。
8
- */
9
- export function matchesAnyConfigGlob(
10
- candidatePath: string,
11
- configGlobs: readonly string[]
12
- ): boolean {
13
- const normalizedCandidatePath = toSlashPath(candidatePath);
14
- return configGlobs.some((configGlob) =>
15
- minimatch(normalizedCandidatePath, configGlob, { dot: true })
16
- );
17
- }
1
+ export { matchesAnyConfigGlob } from "../../data-boundary/config-glob.ts";
@@ -127,7 +127,7 @@ function resolveStringArray(
127
127
 
128
128
  function validStringArray(value: unknown): boolean {
129
129
  const items = snapshotClosedArray(value);
130
- return items !== undefined && items.every(isString);
130
+ return items?.every(isString) === true;
131
131
  }
132
132
 
133
133
  function isString(value: unknown): value is string {
@@ -1,7 +1,7 @@
1
1
  /** Reads canonical gitlink entries from a named Git tree revision. */
2
2
 
3
3
  import { processFailed } from "../host-environment/process.ts";
4
- import { runGit } from "../host-environment/git.ts";
4
+ import { gitFailureDetail, runGit } from "../host-environment/git.ts";
5
5
  import { toSlashPath } from "../host-environment/path.ts";
6
6
 
7
7
  export type Gitlink = Readonly<{
@@ -21,11 +21,9 @@ export function gitlinksAtRevision({
21
21
  cwd: repository
22
22
  });
23
23
  if (processFailed(result)) {
24
- const detail =
25
- result.stderr.trim() ||
26
- result.error?.message ||
27
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
28
- throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${detail}`);
24
+ throw new Error(
25
+ `could not inspect gitlinks at ${revision} in ${repository}: ${gitFailureDetail(result)}`
26
+ );
29
27
  }
30
28
 
31
29
  const gitlinks: Gitlink[] = [];
@@ -24,26 +24,54 @@ export function inspectGitlinkWorktree({
24
24
  readonly gitlinkPath: string;
25
25
  readonly repository: string;
26
26
  }>): GitlinkWorktreeInspection {
27
+ const localWorktree = inspectLocalGitlinkWorktree({ gitlinkPath, repository });
28
+ if (localWorktree.kind !== "found") return localWorktree;
29
+ return inspectGitRepositoryRoot({
30
+ gitlinkPath,
31
+ canonicalSubmoduleRepository: localWorktree.repository
32
+ });
33
+ }
34
+
35
+ type LocalGitlinkWorktree = Readonly<{ readonly kind: "found"; readonly repository: string }>;
36
+
37
+ function inspectLocalGitlinkWorktree({
38
+ gitlinkPath,
39
+ repository
40
+ }: Readonly<{
41
+ readonly gitlinkPath: string;
42
+ readonly repository: string;
43
+ }>): GitlinkWorktreeInspection | LocalGitlinkWorktree {
27
44
  const submoduleRepository = resolve(repository, gitlinkPath);
28
- let canonicalSubmoduleRepository: string;
29
45
  try {
30
46
  if (!statSync(submoduleRepository).isDirectory()) return { kind: "missing" };
31
- canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);
47
+ return { kind: "found", repository: canonicalRepositoryPath(submoduleRepository) };
32
48
  } catch (error: unknown) {
33
49
  return missingPath(error)
34
50
  ? { kind: "missing" }
35
51
  : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);
36
52
  }
53
+ }
37
54
 
55
+ function inspectGitRepositoryRoot({
56
+ gitlinkPath,
57
+ canonicalSubmoduleRepository
58
+ }: Readonly<{
59
+ readonly gitlinkPath: string;
60
+ readonly canonicalSubmoduleRepository: string;
61
+ }>): GitlinkWorktreeInspection {
38
62
  const topLevelResult = runGit({
39
63
  args: ["rev-parse", "--show-toplevel"],
40
64
  cwd: canonicalSubmoduleRepository
41
65
  });
42
66
  if (processFailed(topLevelResult)) {
43
- const topLevelFailureDetail =
44
- topLevelResult.error?.message ||
45
- topLevelResult.stderr.trim() ||
46
- `exit ${topLevelResult.status}`;
67
+ const processErrorMessage = topLevelResult.error?.message;
68
+ const stderr = topLevelResult.stderr.trim();
69
+ let topLevelFailureDetail = `exit ${topLevelResult.status}`;
70
+ if (processErrorMessage !== undefined && processErrorMessage.length > 0) {
71
+ topLevelFailureDetail = processErrorMessage;
72
+ } else if (stderr.length > 0) {
73
+ topLevelFailureDetail = stderr;
74
+ }
47
75
  return {
48
76
  kind: "inspection-failed",
49
77
  error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`
@@ -51,7 +79,7 @@ export function inspectGitlinkWorktree({
51
79
  }
52
80
 
53
81
  const topLevel = topLevelResult.stdout.trim();
54
- if (!topLevel) {
82
+ if (topLevel.length === 0) {
55
83
  return {
56
84
  kind: "inspection-failed",
57
85
  error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`
@@ -82,7 +82,7 @@ function parseSelection(value: unknown): ProjectFileSelection | undefined {
82
82
 
83
83
  function snapshotStringArray(value: unknown): readonly string[] | undefined {
84
84
  const items = snapshotClosedArray(value);
85
- return items !== undefined && items.every((item): item is string => typeof item === "string")
85
+ return items?.every((item): item is string => typeof item === "string") === true
86
86
  ? Object.freeze([...items])
87
87
  : undefined;
88
88
  }
@@ -1,7 +1,7 @@
1
1
  /** Path and Git-output projections shared by revision traversal helpers. */
2
2
 
3
3
  import { toSlashPath } from "../host-environment/path.ts";
4
- import { matchesAnyConfigGlob } from "./config-glob.ts";
4
+ import { matchesAnyConfigGlob } from "../../data-boundary/config-glob.ts";
5
5
 
6
6
  export function uniqueSortedPaths(files: readonly string[]): string[] {
7
7
  return [...new Set(files.map(toSlashPath))].sort();
@@ -29,6 +29,6 @@ export function joinSlash({
29
29
  }
30
30
 
31
31
  export function nonEmptyGitOutput(stdout: string | null | undefined): string | null {
32
- const value = (stdout || "").trim();
33
- return value || null;
32
+ const value = (stdout ?? "").trim();
33
+ return value.length > 0 ? value : null;
34
34
  }
@@ -1,7 +1,7 @@
1
1
  /** Enumerates files from initialized, non-cyclic submodule working trees. */
2
2
 
3
3
  import { processFailed } from "../host-environment/process.ts";
4
- import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.ts";
4
+ import { gitFailureDetail, runGit, splitNulDelimitedGitFileList } from "../host-environment/git.ts";
5
5
  import {
6
6
  canonicalRepositoryPath,
7
7
  resolveDescendableGitlinkRepository,
@@ -33,7 +33,7 @@ export function collectSubmoduleWorktreeFiles({
33
33
  repository,
34
34
  visitedRepositories
35
35
  });
36
- if (!submoduleRepository) continue;
36
+ if (submoduleRepository === null) continue;
37
37
  files.push(
38
38
  ...collectWorktreeFiles({
39
39
  prefix: gitlink.path,
@@ -65,11 +65,9 @@ function collectWorktreeFiles({
65
65
  cwd: repository
66
66
  });
67
67
  if (processFailed(result)) {
68
- const detail =
69
- result.stderr.trim() ||
70
- result.error?.message ||
71
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
72
- throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);
68
+ throw new Error(
69
+ `could not enumerate git-worktree files in ${repository}: ${gitFailureDetail(result)}`
70
+ );
73
71
  }
74
72
 
75
73
  const files = prefixAndFilter({
@@ -111,7 +109,7 @@ function collectNestedWorktreeFiles({
111
109
  repository,
112
110
  visitedRepositories
113
111
  });
114
- if (!submoduleRepository) continue;
112
+ if (submoduleRepository === null) continue;
115
113
  files.push(
116
114
  ...collectWorktreeFiles({
117
115
  prefix: joinSlash({ path: gitlink.path, prefix }),
@@ -134,15 +132,17 @@ function worktreeRevision(repository: string): string | null {
134
132
  if (revision !== null) return revision;
135
133
  throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);
136
134
  }
137
- const headDoesNotExist =
135
+ if (headDoesNotExist(result)) return null;
136
+ throw new Error(
137
+ `could not inspect git-worktree revision in ${repository}: ${gitFailureDetail(result)}`
138
+ );
139
+ }
140
+
141
+ function headDoesNotExist(result: ReturnType<typeof runGit>): boolean {
142
+ return (
138
143
  result.error === undefined &&
139
144
  result.signal === null &&
140
145
  result.status === 1 &&
141
- result.stderr.trim() === "";
142
- if (headDoesNotExist) return null;
143
- const detail =
144
- result.stderr.trim() ||
145
- result.error?.message ||
146
- (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
147
- throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);
146
+ result.stderr.trim() === ""
147
+ );
148
148
  }
@@ -1,4 +1,8 @@
1
1
  import { defineCheck, type TypedCheckWithOptions } from "../../check/check.ts";
2
+ import {
3
+ resolvePackageCheckAuthoringInput,
4
+ type PackageCheckIdentityInput
5
+ } from "../check-authoring.ts";
2
6
  import { executeSecretDetection, SECRET_DETECTION_CHECK_DEFINITION } from "./execution.ts";
3
7
  import { parseSecretDetectionData } from "./final-data.ts";
4
8
  import type { ResolvedSecretDetectionOptions, SecretDetectionOptions } from "./options.ts";
@@ -13,23 +17,42 @@ import { validSecretDetectionOptions } from "./options-validation.ts";
13
17
  * @throws {TypeError} files 缺失、策略不完整或输入含未知字段时抛出。
14
18
  */
15
19
  export function secretDetection(
16
- options: SecretDetectionOptions
20
+ options: SecretDetectionOptions<"secret-detection">
17
21
  ): TypedCheckWithOptions<
18
22
  "secret-detection",
19
23
  ResolvedSecretDetectionOptions,
20
24
  typeof parseSecretDetectionData
21
- > {
22
- const resolvedOptions = resolveSecretDetectionOptions(options);
25
+ >;
26
+ export function secretDetection<const Id extends string>(
27
+ options: SecretDetectionOptions<Id> & PackageCheckIdentityInput<Id>
28
+ ): TypedCheckWithOptions<Id, ResolvedSecretDetectionOptions, typeof parseSecretDetectionData>;
29
+ export function secretDetection(
30
+ options: SecretDetectionOptions
31
+ ): TypedCheckWithOptions<string, ResolvedSecretDetectionOptions, typeof parseSecretDetectionData>;
32
+ export function secretDetection(
33
+ options: SecretDetectionOptions
34
+ ): TypedCheckWithOptions<string, ResolvedSecretDetectionOptions, typeof parseSecretDetectionData> {
35
+ const input = resolvePackageCheckAuthoringInput(
36
+ options,
37
+ ["files", "maximumFileBytes", "maximumTotalBytes", "maximumFileCount", "findingWaivers"],
38
+ SECRET_DETECTION_CHECK_DEFINITION
39
+ );
40
+ if (input === undefined) {
41
+ throw new TypeError(
42
+ "secretDetection options must declare the documented closed explicit file policy"
43
+ );
44
+ }
45
+ const resolvedOptions = resolveSecretDetectionOptions(input.domainOptions);
23
46
  if (resolvedOptions === undefined) {
24
47
  throw new TypeError(
25
48
  "secretDetection options must declare the documented closed explicit file policy"
26
49
  );
27
50
  }
28
51
  return defineCheck({
29
- ...SECRET_DETECTION_CHECK_DEFINITION,
30
- execution: executeSecretDetection,
52
+ ...input.definition,
53
+ execute: executeSecretDetection,
31
54
  parseData: parseSecretDetectionData,
32
- preflight: (preparedOptions) =>
55
+ prepare: (preparedOptions) =>
33
56
  validSecretDetectionOptions(preparedOptions)
34
57
  ? { status: "success", preparedOptions }
35
58
  : {
@@ -1,6 +1,6 @@
1
1
  import type { CheckExecutionContext, CheckMessage, CheckResult } from "../../check/check.ts";
2
- import { appendCheckMessages } from "../../check/finding-presentation.ts";
3
- import { reconcileFindingWaivers } from "../../finding-waivers/reconciliation.ts";
2
+ import { appendCheckMessages } from "../../package-tools/finding-presentation/finding-presentation.ts";
3
+ import { reconcileFindingWaivers } from "../../package-tools/finding-waivers/reconciliation.ts";
4
4
  import { reportFindingWaiverAudits } from "../code-quality-findings/finding-waiver-evidence.ts";
5
5
  import { collectProjectFiles } from "../project-files/collection.ts";
6
6
  import type { SecretDetectionFinalData } from "./final-data.ts";
@@ -1,4 +1,12 @@
1
- import { closeSync, constants, fstatSync, openSync, readSync } from "node:fs";
1
+ import {
2
+ closeSync,
3
+ constants,
4
+ fstatSync,
5
+ lstatSync,
6
+ openSync,
7
+ readSync,
8
+ type BigIntStats
9
+ } from "node:fs";
2
10
  import { resolve } from "node:path";
3
11
 
4
12
  import type { CheckExecutionContext } from "../../check/check.ts";
@@ -147,7 +155,7 @@ function readBoundedRegularFile(input: {
147
155
  readonly filePath: string;
148
156
  readonly options: ResolvedSecretDetectionOptions;
149
157
  }): BoundedRegularFileRead {
150
- const descriptor = openRegularFileWithoutFollowingSymlink(input.filePath);
158
+ const descriptor = openIdentityCheckedRegularFile(input.filePath);
151
159
  if (descriptor === undefined) return Object.freeze({ kind: "unavailable" });
152
160
  try {
153
161
  const byteLength = regularFileByteLength(descriptor);
@@ -175,17 +183,66 @@ function closeDescriptor(descriptor: number): void {
175
183
  }
176
184
  }
177
185
 
178
- function openRegularFileWithoutFollowingSymlink(filePath: string): number | undefined {
179
- if (!supportsNoFollowDescriptorOpen()) return undefined;
186
+ interface RegularFileIdentity {
187
+ readonly device: bigint;
188
+ readonly inode: bigint;
189
+ }
190
+
191
+ function openIdentityCheckedRegularFile(filePath: string): number | undefined {
192
+ const expectedIdentity = regularFileIdentityAtPath(filePath);
193
+ if (expectedIdentity === undefined) return undefined;
194
+ const openFlags = finalLeafOpenFlags();
195
+ if (openFlags === undefined) return undefined;
196
+
197
+ let descriptor: number;
198
+ try {
199
+ descriptor = openSync(filePath, openFlags);
200
+ } catch {
201
+ return undefined;
202
+ }
203
+
204
+ const openedIdentity = regularFileIdentityOnDescriptor(descriptor);
205
+ if (openedIdentity !== undefined && sameRegularFileIdentity(expectedIdentity, openedIdentity)) {
206
+ return descriptor;
207
+ }
208
+ closeDescriptor(descriptor);
209
+ return undefined;
210
+ }
211
+
212
+ function finalLeafOpenFlags(): number | undefined {
213
+ if (process.platform === "win32") return constants.O_RDONLY;
214
+ return typeof constants.O_NOFOLLOW === "number" && constants.O_NOFOLLOW !== 0
215
+ ? constants.O_RDONLY | constants.O_NOFOLLOW
216
+ : undefined;
217
+ }
218
+
219
+ function regularFileIdentityAtPath(filePath: string): RegularFileIdentity | undefined {
180
220
  try {
181
- return openSync(filePath, constants.O_RDONLY | constants.O_NOFOLLOW);
221
+ return regularFileIdentity(lstatSync(filePath, { bigint: true }));
182
222
  } catch {
183
223
  return undefined;
184
224
  }
185
225
  }
186
226
 
187
- function supportsNoFollowDescriptorOpen(): boolean {
188
- return process.platform !== "win32" && constants.O_NOFOLLOW !== 0;
227
+ function regularFileIdentityOnDescriptor(descriptor: number): RegularFileIdentity | undefined {
228
+ try {
229
+ return regularFileIdentity(fstatSync(descriptor, { bigint: true }));
230
+ } catch {
231
+ return undefined;
232
+ }
233
+ }
234
+
235
+ function regularFileIdentity(details: BigIntStats): RegularFileIdentity | undefined {
236
+ return details.isFile() && details.dev > 0n && details.ino > 0n
237
+ ? Object.freeze({ device: details.dev, inode: details.ino })
238
+ : undefined;
239
+ }
240
+
241
+ function sameRegularFileIdentity(
242
+ expected: RegularFileIdentity,
243
+ opened: RegularFileIdentity
244
+ ): boolean {
245
+ return expected.device === opened.device && expected.inode === opened.inode;
189
246
  }
190
247
 
191
248
  function regularFileByteLength(descriptor: number): number | undefined {
@@ -1,8 +1,11 @@
1
- import type { FindingWaiver } from "../../finding-waivers/reconciliation.ts";
1
+ import type { PackageCheckAuthoringOptions } from "../check-authoring.ts";
2
+ import type { FindingWaiver } from "../../package-tools/finding-waivers/reconciliation.ts";
2
3
  import type { ProjectFileSelection } from "../project-files/configuration.ts";
3
4
 
4
5
  /** `secretDetection(options)` 的明确 authoring policy。 */
5
- export interface SecretDetectionOptions {
6
+ export interface SecretDetectionOptions<
7
+ Id extends string = string
8
+ > extends PackageCheckAuthoringOptions<Id> {
6
9
  /** 必填的完整 project-file policy;只有它选中的 path 可以被读取或传给 detector。 */
7
10
  readonly files: ProjectFileSelection;
8
11
  /** 单个输入允许的最大 raw byte 数;超过时形成不可豁免的 coverage gap。 */
@@ -1,4 +1,4 @@
1
- import type { MaterializedFindingWaiver } from "../../finding-waivers/reconciliation.ts";
1
+ import type { MaterializedFindingWaiver } from "../../package-tools/finding-waivers/reconciliation.ts";
2
2
  import type {
3
3
  FindingWaiverRecordAudit,
4
4
  FindingWaiverAuditRecordData
@@ -81,10 +81,9 @@ export function adaptSecretlintMessages(
81
81
  function isPrivateKeyMessage(value: unknown): boolean {
82
82
  const message = snapshotClosedRecord(value);
83
83
  return (
84
- message !== undefined &&
85
- message.type === "message" &&
86
- message.ruleId === secretDetectionPrivateKeyRuleId &&
87
- message.severity === "error"
84
+ message?.type === "message" &&
85
+ message?.ruleId === secretDetectionPrivateKeyRuleId &&
86
+ message?.severity === "error"
88
87
  );
89
88
  }
90
89
 
@@ -0,0 +1,54 @@
1
+ import type {
2
+ AdmissionPolicy,
3
+ CustomAdmissionPreparationContext,
4
+ CustomAdmissionStrategy,
5
+ PreparedCustomAdmissionStrategy
6
+ } from "../../project-definition/scheduler-policy.ts";
7
+
8
+ type ExactAdmissionPolicy<T extends AdmissionPolicy> =
9
+ T extends Readonly<{ readonly kind: "static" }>
10
+ ? T & Record<Exclude<keyof T, "kind">, never>
11
+ : T extends Readonly<{ readonly kind: "custom" }>
12
+ ? T &
13
+ Record<Exclude<keyof T, "kind" | "strategy">, never> &
14
+ Readonly<{
15
+ readonly strategy: ExactCustomAdmissionStrategy<T["strategy"]>;
16
+ }>
17
+ : never;
18
+
19
+ type ExactCustomAdmissionStrategy<T extends CustomAdmissionStrategy> =
20
+ T extends Readonly<{ readonly kind: "simple" }>
21
+ ? T & Record<Exclude<keyof T, "kind" | "decide">, never>
22
+ : T extends Readonly<{ readonly kind: "prepared" }>
23
+ ? T &
24
+ Record<Exclude<keyof T, "kind" | "prepare">, never> &
25
+ Readonly<{ readonly prepare: ExactCustomPreparation<T["prepare"]> }>
26
+ : never;
27
+
28
+ type ExactCustomPreparation<T> = T extends (
29
+ this: void,
30
+ context: CustomAdmissionPreparationContext
31
+ ) => infer Result
32
+ ? (this: void, context: CustomAdmissionPreparationContext) => ExactCustomPreparationResult<Result>
33
+ : never;
34
+
35
+ type ExactCustomPreparationResult<T> =
36
+ T extends Promise<unknown>
37
+ ? Promise<ExactPreparedCustomAdmissionStrategy<Awaited<T>>>
38
+ : ExactPreparedCustomAdmissionStrategy<T>;
39
+
40
+ type ExactPreparedCustomAdmissionStrategy<T> = T extends PreparedCustomAdmissionStrategy
41
+ ? T & Record<Exclude<keyof T, "decide" | "terminalEffect">, never>
42
+ : never;
43
+
44
+ /**
45
+ * 保留 closed admission policy literal 的 TypeScript inference,不创建额外运行语义。
46
+ *
47
+ * @remarks inline policy 与此 helper 的结果完全等价。custom simple `decide` 同步运行;prepared
48
+ * strategy 为每个 graph-ready Run 解析独立 closure,调用方负责其 trusted host callback 的可重入性。
49
+ */
50
+ export function defineAdmissionPolicy<const T extends AdmissionPolicy>(
51
+ policy: ExactAdmissionPolicy<T>
52
+ ): T {
53
+ return policy;
54
+ }
@@ -7,8 +7,8 @@ import {
7
7
  canonicalizeJsonObject,
8
8
  canonicalJsonBytes,
9
9
  type CanonicalJsonObject
10
- } from "../data-boundary/canonical-data.ts";
11
- import { hasExactPlainRecordKeys, snapshotClosedRecord } from "../data-boundary/closed-values.ts";
10
+ } from "../../data-boundary/canonical-data.ts";
11
+ import { snapshotExactClosedRecord } from "../../data-boundary/closed-values.ts";
12
12
 
13
13
  const CACHE_API_VERSION = "caller-keyed-json-v1";
14
14
  const CACHE_ENVELOPE_KEYS = ["cacheFormatVersion", "identityDigest", "payload"] as const;
@@ -113,18 +113,15 @@ type ParsedOptions<T extends object> = Readonly<{
113
113
  }>;
114
114
 
115
115
  function parseOptions<T extends object>(value: CacheJsonByKeyOptions<T>): ParsedOptions<T> {
116
- const record = snapshotClosedRecord(value);
117
- if (
118
- record === undefined ||
119
- !hasExactPlainRecordKeys(record, [
120
- "compute",
121
- "directory",
122
- "key",
123
- "namespace",
124
- "parse",
125
- "version"
126
- ])
127
- ) {
116
+ const record = snapshotExactClosedRecord(value, [
117
+ "compute",
118
+ "directory",
119
+ "key",
120
+ "namespace",
121
+ "parse",
122
+ "version"
123
+ ]);
124
+ if (record === undefined) {
128
125
  throw new TypeError("cacheJsonByKey options must be a closed object");
129
126
  }
130
127
  const { compute, directory, key, namespace, parse, version } = record;
@@ -219,9 +216,8 @@ function parseEnvelope(
219
216
  value: unknown,
220
217
  identityDigest: string
221
218
  ): Readonly<{ readonly payload: CanonicalJsonObject }> | undefined {
222
- const record = snapshotClosedRecord(value);
223
- if (record === undefined || !hasExactPlainRecordKeys(record, CACHE_ENVELOPE_KEYS))
224
- return undefined;
219
+ const record = snapshotExactClosedRecord(value, CACHE_ENVELOPE_KEYS);
220
+ if (record === undefined) return undefined;
225
221
  if (record.cacheFormatVersion !== CACHE_API_VERSION || record.identityDigest !== identityDigest) {
226
222
  return undefined;
227
223
  }
@@ -1,4 +1,6 @@
1
- import type { CheckMessage, CheckResult } from "./check.ts";
1
+ import type { CheckResult } from "../../check/check.ts";
2
+
3
+ type CheckMessage = NonNullable<CheckResult["messages"]>[number];
2
4
 
3
5
  /**
4
6
  * 将 Check-owned Finding 投影为有界 terminal messages 所需的超限上下文。