audit-tools 0.52.2 → 0.52.4

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 (447) hide show
  1. package/README.md +31 -1
  2. package/dist/audit/cli/args.d.ts.map +1 -1
  3. package/dist/audit/cli/args.js +6 -2
  4. package/dist/audit/cli/args.js.map +1 -1
  5. package/dist/audit/cli/argumentContract.d.ts +11 -0
  6. package/dist/audit/cli/argumentContract.d.ts.map +1 -0
  7. package/dist/audit/cli/argumentContract.js +45 -0
  8. package/dist/audit/cli/argumentContract.js.map +1 -0
  9. package/dist/audit/cli/auditReviewBindings.d.ts +49 -0
  10. package/dist/audit/cli/auditReviewBindings.d.ts.map +1 -0
  11. package/dist/audit/cli/auditReviewBindings.js +61 -0
  12. package/dist/audit/cli/auditReviewBindings.js.map +1 -0
  13. package/dist/audit/cli/auditStep.d.ts +1 -27
  14. package/dist/audit/cli/auditStep.d.ts.map +1 -1
  15. package/dist/audit/cli/auditStep.js +7 -32
  16. package/dist/audit/cli/auditStep.js.map +1 -1
  17. package/dist/audit/cli/charterComparisonPrompt.d.ts +2 -0
  18. package/dist/audit/cli/charterComparisonPrompt.d.ts.map +1 -1
  19. package/dist/audit/cli/charterComparisonPrompt.js +9 -0
  20. package/dist/audit/cli/charterComparisonPrompt.js.map +1 -1
  21. package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
  22. package/dist/audit/cli/charterExtractionPrompt.js +17 -3
  23. package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
  24. package/dist/audit/cli/conceptualDispatch.d.ts +1 -1
  25. package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
  26. package/dist/audit/cli/conceptualDispatch.js +15 -2
  27. package/dist/audit/cli/conceptualDispatch.js.map +1 -1
  28. package/dist/audit/cli/confirmIntentStep.d.ts.map +1 -1
  29. package/dist/audit/cli/confirmIntentStep.js +17 -21
  30. package/dist/audit/cli/confirmIntentStep.js.map +1 -1
  31. package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
  32. package/dist/audit/cli/dispatch/hostHandoff.js +233 -231
  33. package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
  34. package/dist/audit/cli/explainTaskCommand.d.ts.map +1 -1
  35. package/dist/audit/cli/explainTaskCommand.js +3 -1
  36. package/dist/audit/cli/explainTaskCommand.js.map +1 -1
  37. package/dist/audit/cli/fanoutLanes.d.ts +10 -14
  38. package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
  39. package/dist/audit/cli/fanoutLanes.js +50 -16
  40. package/dist/audit/cli/fanoutLanes.js.map +1 -1
  41. package/dist/audit/cli/functionalPreflight.d.ts +96 -0
  42. package/dist/audit/cli/functionalPreflight.d.ts.map +1 -0
  43. package/dist/audit/cli/functionalPreflight.js +103 -0
  44. package/dist/audit/cli/functionalPreflight.js.map +1 -0
  45. package/dist/audit/cli/laneSubmissions.d.ts +5 -1
  46. package/dist/audit/cli/laneSubmissions.d.ts.map +1 -1
  47. package/dist/audit/cli/laneSubmissions.js +45 -34
  48. package/dist/audit/cli/laneSubmissions.js.map +1 -1
  49. package/dist/audit/cli/nextStepCommand.d.ts +1 -9
  50. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  51. package/dist/audit/cli/nextStepCommand.js +104 -39
  52. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  53. package/dist/audit/cli/nextStepHelpers.d.ts +10 -25
  54. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  55. package/dist/audit/cli/nextStepHelpers.js +57 -67
  56. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  57. package/dist/audit/cli/prompts.d.ts.map +1 -1
  58. package/dist/audit/cli/prompts.js +9 -4
  59. package/dist/audit/cli/prompts.js.map +1 -1
  60. package/dist/audit/cli/recoverSubmissionCommand.d.ts.map +1 -1
  61. package/dist/audit/cli/recoverSubmissionCommand.js +8 -1
  62. package/dist/audit/cli/recoverSubmissionCommand.js.map +1 -1
  63. package/dist/audit/cli/reviewRun.js +1 -1
  64. package/dist/audit/cli/reviewRun.js.map +1 -1
  65. package/dist/audit/cli/reviewSubmission.d.ts +24 -0
  66. package/dist/audit/cli/reviewSubmission.d.ts.map +1 -0
  67. package/dist/audit/cli/reviewSubmission.js +97 -0
  68. package/dist/audit/cli/reviewSubmission.js.map +1 -0
  69. package/dist/audit/cli/sampleRunCommand.d.ts +3 -3
  70. package/dist/audit/cli/steps.d.ts +18 -18
  71. package/dist/audit/cli/steps.d.ts.map +1 -1
  72. package/dist/audit/cli/steps.js +1 -0
  73. package/dist/audit/cli/steps.js.map +1 -1
  74. package/dist/audit/cli/unacceptResultsCommand.d.ts.map +1 -1
  75. package/dist/audit/cli/unacceptResultsCommand.js +2 -1
  76. package/dist/audit/cli/unacceptResultsCommand.js.map +1 -1
  77. package/dist/audit/cli.d.ts +2 -1
  78. package/dist/audit/cli.d.ts.map +1 -1
  79. package/dist/audit/cli.js +27 -19
  80. package/dist/audit/cli.js.map +1 -1
  81. package/dist/audit/contracts/findingContractPrompt.d.ts +1 -1
  82. package/dist/audit/contracts/findingContractPrompt.d.ts.map +1 -1
  83. package/dist/audit/contracts/findingContractPrompt.js +6 -4
  84. package/dist/audit/contracts/findingContractPrompt.js.map +1 -1
  85. package/dist/audit/contracts/workerSchemas.d.ts +10 -10
  86. package/dist/audit/contracts/wrapperResponse.d.ts +34 -34
  87. package/dist/audit/extractors/commentDecomposition.d.ts +14 -0
  88. package/dist/audit/extractors/commentDecomposition.d.ts.map +1 -1
  89. package/dist/audit/extractors/commentDecomposition.js +2 -1
  90. package/dist/audit/extractors/commentDecomposition.js.map +1 -1
  91. package/dist/audit/extractors/graph.d.ts +1 -1
  92. package/dist/audit/extractors/graph.d.ts.map +1 -1
  93. package/dist/audit/extractors/graph.js +12 -7
  94. package/dist/audit/extractors/graph.js.map +1 -1
  95. package/dist/audit/extractors/graphPythonImports.d.ts +3 -0
  96. package/dist/audit/extractors/graphPythonImports.d.ts.map +1 -1
  97. package/dist/audit/extractors/graphPythonImports.js +24 -5
  98. package/dist/audit/extractors/graphPythonImports.js.map +1 -1
  99. package/dist/audit/extractors/graphRouteSources.d.ts +7 -0
  100. package/dist/audit/extractors/graphRouteSources.d.ts.map +1 -0
  101. package/dist/audit/extractors/graphRouteSources.js +208 -0
  102. package/dist/audit/extractors/graphRouteSources.js.map +1 -0
  103. package/dist/audit/extractors/graphRoutes.d.ts +1 -1
  104. package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
  105. package/dist/audit/extractors/graphRoutes.js +65 -68
  106. package/dist/audit/extractors/graphRoutes.js.map +1 -1
  107. package/dist/audit/io/artifacts.d.ts +1 -0
  108. package/dist/audit/io/artifacts.d.ts.map +1 -1
  109. package/dist/audit/io/artifacts.js +29 -10
  110. package/dist/audit/io/artifacts.js.map +1 -1
  111. package/dist/audit/io/runArtifacts.d.ts +1 -1
  112. package/dist/audit/io/runArtifacts.d.ts.map +1 -1
  113. package/dist/audit/io/runArtifacts.js +3 -0
  114. package/dist/audit/io/runArtifacts.js.map +1 -1
  115. package/dist/audit/io/toolingManifest.d.ts.map +1 -1
  116. package/dist/audit/io/toolingManifest.js +11 -32
  117. package/dist/audit/io/toolingManifest.js.map +1 -1
  118. package/dist/audit/orchestrator/acquisitionExecutor.d.ts +2 -3
  119. package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -1
  120. package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -1
  121. package/dist/audit/orchestrator/advanceTypes.d.ts +1 -2
  122. package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
  123. package/dist/audit/orchestrator/autoFixExecutor.d.ts +2 -2
  124. package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
  125. package/dist/audit/orchestrator/autoFixExecutor.js +2 -2
  126. package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
  127. package/dist/audit/orchestrator/charterFidelityPacket.d.ts +2 -0
  128. package/dist/audit/orchestrator/charterFidelityPacket.d.ts.map +1 -1
  129. package/dist/audit/orchestrator/charterFidelityPacket.js +6 -1
  130. package/dist/audit/orchestrator/charterFidelityPacket.js.map +1 -1
  131. package/dist/audit/orchestrator/charterPackets.d.ts +2 -0
  132. package/dist/audit/orchestrator/charterPackets.d.ts.map +1 -1
  133. package/dist/audit/orchestrator/charterPackets.js +6 -0
  134. package/dist/audit/orchestrator/charterPackets.js.map +1 -1
  135. package/dist/audit/orchestrator/designReviewProjection.d.ts +5 -8
  136. package/dist/audit/orchestrator/designReviewProjection.d.ts.map +1 -1
  137. package/dist/audit/orchestrator/designReviewProjection.js +7 -1
  138. package/dist/audit/orchestrator/designReviewProjection.js.map +1 -1
  139. package/dist/audit/orchestrator/designReviewPrompt.d.ts +3 -47
  140. package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
  141. package/dist/audit/orchestrator/designReviewPrompt.js +28 -135
  142. package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
  143. package/dist/audit/orchestrator/designReviewSnapshot.d.ts +24 -1
  144. package/dist/audit/orchestrator/designReviewSnapshot.d.ts.map +1 -1
  145. package/dist/audit/orchestrator/designReviewSnapshot.js +8 -2
  146. package/dist/audit/orchestrator/designReviewSnapshot.js.map +1 -1
  147. package/dist/audit/orchestrator/designReviewTask.d.ts +46 -0
  148. package/dist/audit/orchestrator/designReviewTask.d.ts.map +1 -0
  149. package/dist/audit/orchestrator/designReviewTask.js +44 -0
  150. package/dist/audit/orchestrator/designReviewTask.js.map +1 -0
  151. package/dist/audit/orchestrator/intentCheckpointGate.d.ts +1 -1
  152. package/dist/audit/orchestrator/intentCheckpointGate.d.ts.map +1 -1
  153. package/dist/audit/orchestrator/intentCheckpointGate.js +4 -2
  154. package/dist/audit/orchestrator/intentCheckpointGate.js.map +1 -1
  155. package/dist/audit/orchestrator/intentEquivalenceExecutor.d.ts +3 -0
  156. package/dist/audit/orchestrator/intentEquivalenceExecutor.d.ts.map +1 -1
  157. package/dist/audit/orchestrator/intentEquivalenceExecutor.js +2 -0
  158. package/dist/audit/orchestrator/intentEquivalenceExecutor.js.map +1 -1
  159. package/dist/audit/orchestrator/intentInterpreter.d.ts +1 -9
  160. package/dist/audit/orchestrator/intentInterpreter.d.ts.map +1 -1
  161. package/dist/audit/orchestrator/intentInterpreter.js +6 -11
  162. package/dist/audit/orchestrator/intentInterpreter.js.map +1 -1
  163. package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts +2 -2
  164. package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts.map +1 -1
  165. package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
  166. package/dist/audit/orchestrator/staleness.js +32 -40
  167. package/dist/audit/orchestrator/staleness.js.map +1 -1
  168. package/dist/audit/orchestrator/state.d.ts.map +1 -1
  169. package/dist/audit/orchestrator/state.js +8 -14
  170. package/dist/audit/orchestrator/state.js.map +1 -1
  171. package/dist/audit/orchestrator/systemicChallengeExecutor.d.ts +19 -0
  172. package/dist/audit/orchestrator/systemicChallengeExecutor.d.ts.map +1 -1
  173. package/dist/audit/orchestrator/systemicChallengeExecutor.js +15 -1
  174. package/dist/audit/orchestrator/systemicChallengeExecutor.js.map +1 -1
  175. package/dist/audit/reporting/criticalFlowFallbackPrompt.d.ts +1 -1
  176. package/dist/audit/reporting/criticalFlowFallbackPrompt.d.ts.map +1 -1
  177. package/dist/audit/reporting/criticalFlowFallbackPrompt.js +4 -2
  178. package/dist/audit/reporting/criticalFlowFallbackPrompt.js.map +1 -1
  179. package/dist/audit/reporting/mergeFindings.d.ts.map +1 -1
  180. package/dist/audit/reporting/mergeFindings.js +43 -2
  181. package/dist/audit/reporting/mergeFindings.js.map +1 -1
  182. package/dist/audit/types/auditScope.d.ts +2 -2
  183. package/dist/audit/types/auditState.d.ts +6 -6
  184. package/dist/audit/types/conceptualAdjudication.d.ts +19 -19
  185. package/dist/audit/types/conceptualAdjudication.d.ts.map +1 -1
  186. package/dist/audit/types/conceptualAdjudication.js +3 -3
  187. package/dist/audit/types/conceptualAdjudication.js.map +1 -1
  188. package/dist/audit/types.d.ts +17 -19
  189. package/dist/audit/types.d.ts.map +1 -1
  190. package/dist/audit/types.js +19 -20
  191. package/dist/audit/types.js.map +1 -1
  192. package/dist/remediate/contractPipeline/artifactStore.d.ts +3 -1
  193. package/dist/remediate/contractPipeline/artifactStore.d.ts.map +1 -1
  194. package/dist/remediate/contractPipeline/artifactStore.js +26 -31
  195. package/dist/remediate/contractPipeline/artifactStore.js.map +1 -1
  196. package/dist/remediate/contractPipeline/changeClassification.d.ts.map +1 -1
  197. package/dist/remediate/contractPipeline/changeClassification.js +20 -8
  198. package/dist/remediate/contractPipeline/changeClassification.js.map +1 -1
  199. package/dist/remediate/contractPipeline/contractReviewBinding.d.ts +28 -0
  200. package/dist/remediate/contractPipeline/contractReviewBinding.d.ts.map +1 -0
  201. package/dist/remediate/contractPipeline/contractReviewBinding.js +75 -0
  202. package/dist/remediate/contractPipeline/contractReviewBinding.js.map +1 -0
  203. package/dist/remediate/contractPipeline/repairState.d.ts +3 -1
  204. package/dist/remediate/contractPipeline/repairState.d.ts.map +1 -1
  205. package/dist/remediate/contractPipeline/repairState.js +1 -0
  206. package/dist/remediate/contractPipeline/repairState.js.map +1 -1
  207. package/dist/remediate/contractPipeline/sketchSource.d.ts +1 -0
  208. package/dist/remediate/contractPipeline/sketchSource.d.ts.map +1 -1
  209. package/dist/remediate/contractPipeline/sketchSource.js +1 -0
  210. package/dist/remediate/contractPipeline/sketchSource.js.map +1 -1
  211. package/dist/remediate/dedup/crossLensDedup.d.ts +1 -2
  212. package/dist/remediate/dedup/crossLensDedup.d.ts.map +1 -1
  213. package/dist/remediate/dedup/crossLensDedup.js +1 -0
  214. package/dist/remediate/dedup/crossLensDedup.js.map +1 -1
  215. package/dist/remediate/index.d.ts.map +1 -1
  216. package/dist/remediate/index.js +92 -52
  217. package/dist/remediate/index.js.map +1 -1
  218. package/dist/remediate/intake.d.ts +54 -0
  219. package/dist/remediate/intake.d.ts.map +1 -1
  220. package/dist/remediate/intake.js +15 -1
  221. package/dist/remediate/intake.js.map +1 -1
  222. package/dist/remediate/intakeSelection.d.ts +27 -0
  223. package/dist/remediate/intakeSelection.d.ts.map +1 -0
  224. package/dist/remediate/intakeSelection.js +37 -0
  225. package/dist/remediate/intakeSelection.js.map +1 -0
  226. package/dist/remediate/intent/intentPersistence.d.ts +41 -0
  227. package/dist/remediate/intent/intentPersistence.d.ts.map +1 -0
  228. package/dist/remediate/intent/intentPersistence.js +129 -0
  229. package/dist/remediate/intent/intentPersistence.js.map +1 -0
  230. package/dist/remediate/phases/close.d.ts +2 -1
  231. package/dist/remediate/phases/close.d.ts.map +1 -1
  232. package/dist/remediate/phases/close.js +19 -2
  233. package/dist/remediate/phases/close.js.map +1 -1
  234. package/dist/remediate/phases/closeReviewProvenance.d.ts +4 -0
  235. package/dist/remediate/phases/closeReviewProvenance.d.ts.map +1 -0
  236. package/dist/remediate/phases/closeReviewProvenance.js +16 -0
  237. package/dist/remediate/phases/closeReviewProvenance.js.map +1 -0
  238. package/dist/remediate/phases/triage.d.ts.map +1 -1
  239. package/dist/remediate/phases/triage.js +3 -1
  240. package/dist/remediate/phases/triage.js.map +1 -1
  241. package/dist/remediate/review/filterDispositions.d.ts +13 -0
  242. package/dist/remediate/review/filterDispositions.d.ts.map +1 -0
  243. package/dist/remediate/review/filterDispositions.js +32 -0
  244. package/dist/remediate/review/filterDispositions.js.map +1 -0
  245. package/dist/remediate/state/runIdentity.d.ts +27 -0
  246. package/dist/remediate/state/runIdentity.d.ts.map +1 -0
  247. package/dist/remediate/state/runIdentity.js +38 -0
  248. package/dist/remediate/state/runIdentity.js.map +1 -0
  249. package/dist/remediate/state/store.d.ts +80 -1
  250. package/dist/remediate/state/store.d.ts.map +1 -1
  251. package/dist/remediate/state/store.js +82 -1
  252. package/dist/remediate/state/store.js.map +1 -1
  253. package/dist/remediate/state/types.d.ts +215 -42
  254. package/dist/remediate/state/types.d.ts.map +1 -1
  255. package/dist/remediate/state/types.js +11 -3
  256. package/dist/remediate/state/types.js.map +1 -1
  257. package/dist/remediate/steps/contractPipeline.d.ts +61 -3
  258. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  259. package/dist/remediate/steps/contractPipeline.js +121 -47
  260. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  261. package/dist/remediate/steps/contractPipelinePrompts.d.ts +27 -4
  262. package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
  263. package/dist/remediate/steps/contractPipelinePrompts.js +34 -32
  264. package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
  265. package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts +31 -0
  266. package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts.map +1 -0
  267. package/dist/remediate/steps/dispatch/contractConformanceReview.js +98 -0
  268. package/dist/remediate/steps/dispatch/contractConformanceReview.js.map +1 -0
  269. package/dist/remediate/steps/dispatch/hostContracts.d.ts +133 -0
  270. package/dist/remediate/steps/dispatch/hostContracts.d.ts.map +1 -0
  271. package/dist/remediate/steps/dispatch/hostContracts.js +104 -0
  272. package/dist/remediate/steps/dispatch/hostContracts.js.map +1 -0
  273. package/dist/remediate/steps/dispatch/hostCorroboration.d.ts +70 -0
  274. package/dist/remediate/steps/dispatch/hostCorroboration.d.ts.map +1 -0
  275. package/dist/remediate/steps/dispatch/hostCorroboration.js +350 -0
  276. package/dist/remediate/steps/dispatch/hostCorroboration.js.map +1 -0
  277. package/dist/remediate/steps/dispatch/hostHandoff.d.ts +8 -162
  278. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  279. package/dist/remediate/steps/dispatch/hostHandoff.js +137 -690
  280. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  281. package/dist/remediate/steps/dispatch/requiredTests.d.ts +83 -0
  282. package/dist/remediate/steps/dispatch/requiredTests.d.ts.map +1 -0
  283. package/dist/remediate/steps/dispatch/requiredTests.js +262 -0
  284. package/dist/remediate/steps/dispatch/requiredTests.js.map +1 -0
  285. package/dist/remediate/steps/finalGate.d.ts +8 -7
  286. package/dist/remediate/steps/finalGate.d.ts.map +1 -1
  287. package/dist/remediate/steps/finalGate.js +14 -11
  288. package/dist/remediate/steps/finalGate.js.map +1 -1
  289. package/dist/remediate/steps/frictionCloseout.d.ts +34 -0
  290. package/dist/remediate/steps/frictionCloseout.d.ts.map +1 -0
  291. package/dist/remediate/steps/frictionCloseout.js +113 -0
  292. package/dist/remediate/steps/frictionCloseout.js.map +1 -0
  293. package/dist/remediate/steps/gateCommands.d.ts +7 -9
  294. package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
  295. package/dist/remediate/steps/gateCommands.js +37 -11
  296. package/dist/remediate/steps/gateCommands.js.map +1 -1
  297. package/dist/remediate/steps/intakeResolver.d.ts +2 -0
  298. package/dist/remediate/steps/intakeResolver.d.ts.map +1 -1
  299. package/dist/remediate/steps/intakeResolver.js +36 -11
  300. package/dist/remediate/steps/intakeResolver.js.map +1 -1
  301. package/dist/remediate/steps/nextStep.d.ts +23 -110
  302. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  303. package/dist/remediate/steps/nextStep.js +232 -508
  304. package/dist/remediate/steps/nextStep.js.map +1 -1
  305. package/dist/remediate/steps/prompts.d.ts +1 -1
  306. package/dist/remediate/steps/prompts.d.ts.map +1 -1
  307. package/dist/remediate/steps/prompts.js +7 -2
  308. package/dist/remediate/steps/prompts.js.map +1 -1
  309. package/dist/remediate/steps/recoverIngest.d.ts +57 -0
  310. package/dist/remediate/steps/recoverIngest.d.ts.map +1 -0
  311. package/dist/remediate/steps/recoverIngest.js +171 -0
  312. package/dist/remediate/steps/recoverIngest.js.map +1 -0
  313. package/dist/remediate/steps/stepWriter.d.ts +5 -4
  314. package/dist/remediate/steps/stepWriter.d.ts.map +1 -1
  315. package/dist/remediate/steps/stepWriter.js +2 -1
  316. package/dist/remediate/steps/stepWriter.js.map +1 -1
  317. package/dist/remediate/steps/types.d.ts +2 -3
  318. package/dist/remediate/steps/types.d.ts.map +1 -1
  319. package/dist/remediate/steps/types.js.map +1 -1
  320. package/dist/remediate/validation/artifacts.d.ts.map +1 -1
  321. package/dist/remediate/validation/artifacts.js +5 -12
  322. package/dist/remediate/validation/artifacts.js.map +1 -1
  323. package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
  324. package/dist/remediate/validation/contractPipeline.js +10 -7
  325. package/dist/remediate/validation/contractPipeline.js.map +1 -1
  326. package/dist/remediate/validation/contractPipelineGates.d.ts +13 -67
  327. package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
  328. package/dist/remediate/validation/contractPipelineGates.js +65 -139
  329. package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
  330. package/dist/remediate/validation/remediationState.d.ts.map +1 -1
  331. package/dist/remediate/validation/remediationState.js +9 -3
  332. package/dist/remediate/validation/remediationState.js.map +1 -1
  333. package/dist/shared/agentReflections.d.ts +2 -2
  334. package/dist/shared/analyzerPolicy.d.ts +2 -16
  335. package/dist/shared/analyzerPolicy.d.ts.map +1 -1
  336. package/dist/shared/analyzerPolicy.js +22 -24
  337. package/dist/shared/analyzerPolicy.js.map +1 -1
  338. package/dist/shared/analyzerRunConsent.d.ts +33 -0
  339. package/dist/shared/analyzerRunConsent.d.ts.map +1 -0
  340. package/dist/shared/analyzerRunConsent.js +42 -0
  341. package/dist/shared/analyzerRunConsent.js.map +1 -0
  342. package/dist/shared/analyzers/acquisitionEngine.d.ts +3 -8
  343. package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
  344. package/dist/shared/analyzers/acquisitionEngine.js +1 -0
  345. package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
  346. package/dist/shared/decompose/charterExtraction.d.ts +8 -8
  347. package/dist/shared/decompose/systemicChallenge.d.ts +12 -12
  348. package/dist/shared/engine/obligationEngine.d.ts +2 -2
  349. package/dist/shared/findings/dedupe.d.ts.map +1 -1
  350. package/dist/shared/findings/dedupe.js +16 -0
  351. package/dist/shared/findings/dedupe.js.map +1 -1
  352. package/dist/shared/graph/orderedReachability.d.ts +9 -0
  353. package/dist/shared/graph/orderedReachability.d.ts.map +1 -0
  354. package/dist/shared/graph/orderedReachability.js +21 -0
  355. package/dist/shared/graph/orderedReachability.js.map +1 -0
  356. package/dist/shared/index.d.ts +9 -3
  357. package/dist/shared/index.d.ts.map +1 -1
  358. package/dist/shared/index.js +6 -3
  359. package/dist/shared/index.js.map +1 -1
  360. package/dist/shared/intake/guidanceBootstrap.d.ts +2 -0
  361. package/dist/shared/intake/guidanceBootstrap.d.ts.map +1 -1
  362. package/dist/shared/intake/guidanceBootstrap.js +10 -1
  363. package/dist/shared/intake/guidanceBootstrap.js.map +1 -1
  364. package/dist/shared/intent/constraintClauses.d.ts +3 -0
  365. package/dist/shared/intent/constraintClauses.d.ts.map +1 -1
  366. package/dist/shared/intent/constraintClauses.js +9 -0
  367. package/dist/shared/intent/constraintClauses.js.map +1 -1
  368. package/dist/shared/io/artifactTreeHold.d.ts +5 -0
  369. package/dist/shared/io/artifactTreeHold.d.ts.map +1 -0
  370. package/dist/shared/io/artifactTreeHold.js +13 -0
  371. package/dist/shared/io/artifactTreeHold.js.map +1 -0
  372. package/dist/shared/io/auditToolsPaths.d.ts +3 -1
  373. package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
  374. package/dist/shared/io/auditToolsPaths.js +6 -1
  375. package/dist/shared/io/auditToolsPaths.js.map +1 -1
  376. package/dist/shared/io/collectFilesSorted.d.ts +10 -0
  377. package/dist/shared/io/collectFilesSorted.d.ts.map +1 -0
  378. package/dist/shared/io/collectFilesSorted.js +38 -0
  379. package/dist/shared/io/collectFilesSorted.js.map +1 -0
  380. package/dist/shared/io/json.d.ts.map +1 -1
  381. package/dist/shared/io/json.js +11 -4
  382. package/dist/shared/io/json.js.map +1 -1
  383. package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
  384. package/dist/shared/io/stepContractWriter.js +8 -0
  385. package/dist/shared/io/stepContractWriter.js.map +1 -1
  386. package/dist/shared/loopCorePaths.d.ts.map +1 -1
  387. package/dist/shared/loopCorePaths.js +9 -0
  388. package/dist/shared/loopCorePaths.js.map +1 -1
  389. package/dist/shared/observability/rootLogObservations.d.ts +10 -0
  390. package/dist/shared/observability/rootLogObservations.d.ts.map +1 -0
  391. package/dist/shared/observability/rootLogObservations.js +147 -0
  392. package/dist/shared/observability/rootLogObservations.js.map +1 -0
  393. package/dist/shared/prompts.d.ts +11 -9
  394. package/dist/shared/prompts.d.ts.map +1 -1
  395. package/dist/shared/prompts.js +18 -13
  396. package/dist/shared/prompts.js.map +1 -1
  397. package/dist/shared/submission/submissionLedger.d.ts +7 -1
  398. package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
  399. package/dist/shared/submission/submissionLedger.js +8 -0
  400. package/dist/shared/submission/submissionLedger.js.map +1 -1
  401. package/dist/shared/tooling/testCommand.d.ts +1 -0
  402. package/dist/shared/tooling/testCommand.d.ts.map +1 -1
  403. package/dist/shared/tooling/testCommand.js +4 -0
  404. package/dist/shared/tooling/testCommand.js.map +1 -1
  405. package/dist/shared/types/charter.d.ts +8 -8
  406. package/dist/shared/types/conceptualPerspective.d.ts +66 -0
  407. package/dist/shared/types/conceptualPerspective.d.ts.map +1 -0
  408. package/dist/shared/types/conceptualPerspective.js +135 -0
  409. package/dist/shared/types/conceptualPerspective.js.map +1 -0
  410. package/dist/shared/types/contractPipeline/design.d.ts +5 -0
  411. package/dist/shared/types/contractPipeline/design.d.ts.map +1 -1
  412. package/dist/shared/types/contractPipeline/design.js +6 -0
  413. package/dist/shared/types/contractPipeline/design.js.map +1 -1
  414. package/dist/shared/types/contractPipeline/implementation.d.ts +54 -0
  415. package/dist/shared/types/contractPipeline/implementation.d.ts.map +1 -1
  416. package/dist/shared/types/contractPipeline/implementation.js +10 -5
  417. package/dist/shared/types/contractPipeline/implementation.js.map +1 -1
  418. package/dist/shared/types/contractPipeline/obligations.d.ts +21 -10
  419. package/dist/shared/types/contractPipeline/obligations.d.ts.map +1 -1
  420. package/dist/shared/types/contractPipeline/obligations.js +13 -1
  421. package/dist/shared/types/contractPipeline/obligations.js.map +1 -1
  422. package/dist/shared/types/disposition.d.ts +6 -6
  423. package/dist/shared/types/finding.d.ts +50 -50
  424. package/dist/shared/types/intentCheckpoint.d.ts +66 -11
  425. package/dist/shared/types/intentCheckpoint.d.ts.map +1 -1
  426. package/dist/shared/types/intentCheckpoint.js +10 -2
  427. package/dist/shared/types/intentCheckpoint.js.map +1 -1
  428. package/dist/shared/types/remediationOutcome.d.ts +252 -24
  429. package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
  430. package/dist/shared/types/remediationOutcome.js +4 -0
  431. package/dist/shared/types/remediationOutcome.js.map +1 -1
  432. package/dist/shared/types/reviewIndependence.d.ts +225 -0
  433. package/dist/shared/types/reviewIndependence.d.ts.map +1 -0
  434. package/dist/shared/types/reviewIndependence.js +67 -0
  435. package/dist/shared/types/reviewIndependence.js.map +1 -0
  436. package/dist/shared/types/stepContract.d.ts +8 -2
  437. package/dist/shared/types/stepContract.d.ts.map +1 -1
  438. package/dist/shared/types/stepContract.js +4 -1
  439. package/dist/shared/types/stepContract.js.map +1 -1
  440. package/dist/shared/validation/findingsReport.d.ts.map +1 -1
  441. package/dist/shared/validation/findingsReport.js +13 -0
  442. package/dist/shared/validation/findingsReport.js.map +1 -1
  443. package/docs/audit-pkg/contracts.md +38 -2
  444. package/docs/audit-pkg/operator-guide.md +59 -4
  445. package/package.json +5 -6
  446. package/skills/audit-code/audit-code.prompt.md +1 -31
  447. package/skills/remediate-code/remediate-code.prompt.md +12 -6
@@ -0,0 +1,104 @@
1
+ // sites-pinned: tests/remediate/host-handoff.test.ts, tests/remediate/host-handoff-corroboration.test.ts
2
+ import { SUBMISSION_ISSUE_CODES, WORKLOAD_ISSUE_CODES } from "audit-tools/shared";
3
+ export const CONFORMANCE_REVIEW_ISSUES = [
4
+ "conformance_review_required", "conformance_review_unavailable", "conformance_review_insufficient",
5
+ ];
6
+ /**
7
+ * Remediation's issue vocabulary: the SHARED submission codes plus this draw's
8
+ * own domain corroboration codes.
9
+ *
10
+ * The submission half is imported, never restated — a submission that is
11
+ * missing, unparseable, contract-invalid, or a duplicate identity means exactly
12
+ * the same thing on both sides of the pipeline, and the two used to spell it
13
+ * differently (`result_missing` here, a bare `null` in the audit ingest). The
14
+ * git/worktree/test half stays here: audit has no analogue and dragging
15
+ * `commit_not_landed` into the shared core would suggest it could emit one.
16
+ */
17
+ export const REMEDIATION_ISSUE_CODES = [
18
+ ...SUBMISSION_ISSUE_CODES,
19
+ "workload_missing",
20
+ "workload_invalid",
21
+ "trusted_binding_missing",
22
+ "commit_missing",
23
+ "commit_not_landed",
24
+ "baseline_not_ancestor",
25
+ "changed_files_mismatch",
26
+ "run_start_dirty_overlap",
27
+ "required_test_failed",
28
+ /**
29
+ * A required test exceeded its deadline. DISTINCT from `required_test_failed`
30
+ * by code alone: a hung suite and a genuine red are different facts about the
31
+ * work, and telling them apart must not require parsing a joined message.
32
+ */
33
+ "required_test_timed_out",
34
+ /**
35
+ * A required test produced more output than the capture buffer holds, so the
36
+ * runner killed it. NOT a verdict on the tests: the child was terminated by
37
+ * the capture cap, and whether the suite would have passed is unknown. It has
38
+ * its own code because it was previously indistinguishable from a hang — node
39
+ * kills an over-buffer child with a signal, which the old discriminator read
40
+ * as a deadline miss.
41
+ */
42
+ "required_test_output_overflow",
43
+ /**
44
+ * A plan block declares a dependency id that exists in NO block of the plan.
45
+ * The block is unschedulable — never level 0 — and the producer bug is named
46
+ * rather than absorbed.
47
+ */
48
+ "dependency_missing",
49
+ /**
50
+ * A block arrived outside the normalized write-scope / declared-command shape
51
+ * this boundary consumes (artifact:normalized-block-write-scope). Refused, not
52
+ * silently normalized: a silently sorted, deduped or re-rooted write scope
53
+ * hides the producer bug and widens what a host may touch.
54
+ */
55
+ "block_contract_invalid",
56
+ /**
57
+ * A recovery-mode acceptance could not be marked on the submission ledger, so
58
+ * it was refused. An acceptance that used the relaxation MUST stay
59
+ * distinguishable from a clean one; an unrecordable mark is a refusal, never
60
+ * a silent acceptance.
61
+ */
62
+ "recovery_unrecorded",
63
+ /**
64
+ * The repository HEAD moved between the recovery verb's unlocked test phase
65
+ * and its locked write phase, so the pre-computed test verdicts describe a
66
+ * tree that is no longer current. The whole recovery aborts.
67
+ */
68
+ "tree_moved_between_phases",
69
+ /**
70
+ * The run's own WORKLOAD BINDING changed between the recovery verb's unlocked
71
+ * test phase and its locked write phase — the sibling of
72
+ * `tree_moved_between_phases` for a concurrent state writer that settles items
73
+ * and re-mints the binding without moving a commit. The pre-computed verdicts
74
+ * describe work that is no longer pending, so the whole recovery aborts.
75
+ */
76
+ "state_moved_between_phases",
77
+ /**
78
+ * The work item's baseline commit is not in this repository, so nothing can
79
+ * be corroborated against it. The run's recorded state is at fault, not the
80
+ * result.
81
+ */
82
+ "baseline_missing",
83
+ /**
84
+ * The work item's baseline commit exists but is no longer an ancestor of HEAD
85
+ * (history was rewritten under the run). The spawn-free `recover-ingest` verb
86
+ * is the named repair; no worker can make it.
87
+ */
88
+ "baseline_orphaned",
89
+ /**
90
+ * `landed_commit` names a commit that cannot be this item's landed work: the
91
+ * baseline itself, or a commit whose diff against the baseline is empty.
92
+ */
93
+ "landed_commit_invalid",
94
+ /**
95
+ * A result names a work item that the persisted workload binds but that is no
96
+ * longer pending (it settled, or its dependencies are not complete).
97
+ */
98
+ "work_item_not_eligible",
99
+ // `workload_stale` is shared with the audit draw: its meaning and its remedy
100
+ // live beside `WORKLOAD_ISSUE_CODES`.
101
+ ...WORKLOAD_ISSUE_CODES,
102
+ ...CONFORMANCE_REVIEW_ISSUES,
103
+ ];
104
+ //# sourceMappingURL=hostContracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostContracts.js","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostContracts.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAA+D,MAAM,oBAAoB,CAAC;AAK/I,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,6BAA6B,EAAE,gCAAgC,EAAE,iCAAiC;CAC1F,CAAC;AAuDX;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,sBAAsB;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,yBAAyB;IACzB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,sBAAsB;IACtB;;;;OAIG;IACH,yBAAyB;IACzB;;;;;;;OAOG;IACH,+BAA+B;IAC/B;;;;OAIG;IACH,oBAAoB;IACpB;;;;;OAKG;IACH,wBAAwB;IACxB;;;;;OAKG;IACH,qBAAqB;IACrB;;;;OAIG;IACH,2BAA2B;IAC3B;;;;;;OAMG;IACH,4BAA4B;IAC5B;;;;OAIG;IACH,kBAAkB;IAClB;;;;OAIG;IACH,mBAAmB;IACnB;;;OAGG;IACH,uBAAuB;IACvB;;;OAGG;IACH,wBAAwB;IACxB,6EAA6E;IAC7E,sCAAsC;IACtC,GAAG,oBAAoB;IACvB,GAAG,yBAAyB;CACpB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { type IngestionCheckId } from "audit-tools/shared";
2
+ import type { CurrentRemediationHostState, RemediationHostWorkItem, RemediationHostResult, RemediationHostIngestIssue } from "./hostContracts.js";
3
+ import type { RemediationRequiredTestVerdicts } from "./requiredTests.js";
4
+ type CorroboratedHostResult = {
5
+ readonly ok: true;
6
+ readonly changedFiles: readonly string[];
7
+ /**
8
+ * True only when the baseline→landed ancestry check was WAIVED under an
9
+ * orphaned baseline. The caller must record the acceptance on the
10
+ * submission ledger before it lands.
11
+ */
12
+ readonly usedRecovery: boolean;
13
+ } | {
14
+ readonly ok: false;
15
+ readonly code: RemediationHostIngestIssue["code"];
16
+ readonly check: IngestionCheckId;
17
+ readonly message: string;
18
+ };
19
+ /**
20
+ * Corroborate an explicit `resolved_no_change` decision against the repository.
21
+ *
22
+ * A no-change decision used to be accepted on its evidence STRINGS alone, with
23
+ * only the required tests re-run — so a host that had in fact edited and then
24
+ * declared "nothing to do" was recorded as verified-no-change, and the edit
25
+ * rode into the run unattributed. The claim is mechanically falsifiable, so it
26
+ * is FALSIFIED.
27
+ *
28
+ * The scope of the falsification is the FULL write-scope corroboration every
29
+ * other acceptance path gets, NOT a narrowing to this item's `allowed_files`.
30
+ * `corroborateHostResult` refuses a landed commit that touched anything outside
31
+ * `allowed_files`; a no-change decision that narrowed the check to files INSIDE
32
+ * `allowed_files` would be the inverse rule — the out-of-scope edit, the more
33
+ * serious of the two, would be the one silently admitted. So EVERY path the
34
+ * tree shows as moved since the workload baseline refuses the claim.
35
+ *
36
+ * `excusedPaths` is the only exemption, and it is ground truth rather than the
37
+ * host's word: `run_start_dirty` (already dirty before the run began, so not
38
+ * evidence that this host edited anything — and because it is captured from
39
+ * `stagedAndUntracked`, it excuses pre-existing UNTRACKED strays too) unioned
40
+ * with the accepted edit surface — `applied_edit_surface` plus whatever this
41
+ * same ingest has already corroborated and accepted, so a sibling work item's
42
+ * legitimately landed files do not falsify this item's claim.
43
+ *
44
+ * Fails CLOSED, like every other corroboration here: a git that cannot answer
45
+ * refuses the claim rather than admitting it.
46
+ */
47
+ export declare function corroborateNoChangeClaim(params: {
48
+ readonly root: string;
49
+ readonly workItem: RemediationHostWorkItem;
50
+ /** Repo-relative paths whose movement is already accounted for. */
51
+ readonly excusedPaths: ReadonlySet<string>;
52
+ }): Promise<{
53
+ readonly ok: true;
54
+ } | {
55
+ readonly ok: false;
56
+ readonly code: RemediationHostIngestIssue["code"];
57
+ readonly check: IngestionCheckId;
58
+ readonly message: string;
59
+ }>;
60
+ export declare function corroborateHostResult(params: {
61
+ readonly root: string;
62
+ readonly state: CurrentRemediationHostState;
63
+ readonly workItem: RemediationHostWorkItem;
64
+ readonly result: RemediationHostResult;
65
+ readonly verdicts: RemediationRequiredTestVerdicts | null;
66
+ /** See `ingestRemediationHostResults`'s `recovery` option. */
67
+ readonly recovery: boolean;
68
+ }): Promise<CorroboratedHostResult>;
69
+ export {};
70
+ //# sourceMappingURL=hostCorroboration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostCorroboration.d.ts","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostCorroboration.ts"],"names":[],"mappings":"AACA,OAAO,EAAqI,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9L,OAAO,KAAK,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAClJ,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAsB1E,KAAK,sBAAsB,GACvB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAsLN;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C,GAAG,OAAO,CACP;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CACJ,CA+CA;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,GAAG,IAAI,CAAC;IAC1D,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgIlC"}
@@ -0,0 +1,350 @@
1
+ // sites-pinned: tests/remediate/host-handoff-corroboration.test.ts
2
+ import { AUDIT_TOOLS_DIRNAME, compareCodeUnits, isGitRepo, normalizeRepoPath, repoRelativePath, runTrackedAsync, TRACKED_CHILD_DEADLINE_MS } from "audit-tools/shared";
3
+ import { rerunRequiredTests, requiredTestIssue } from "./requiredTests.js";
4
+ function pathIsAllowedByWriteScope(root, candidate, allowedFiles) {
5
+ let normalized;
6
+ try {
7
+ normalized = repoRelativePath(root, candidate, "landed file");
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ if (normalized !== candidate)
13
+ return false;
14
+ return allowedFiles.some((allowed) => allowed.endsWith("/")
15
+ ? normalized.startsWith(allowed)
16
+ : normalized === allowed);
17
+ }
18
+ // The corroboration probes below run while the remediation state lock (and, on
19
+ // the fold path, the phase lock) is held — ASYNC with the shared deadline
20
+ // (INV-SSF), so the held lock's mtime heartbeat keeps beating through each
21
+ // probe and a git that never answers cannot hang the ingest.
22
+ async function gitCommitExists(root, commit) {
23
+ const result = await runTrackedAsync(["git", "rev-parse", "--verify", "--quiet", `${commit}^{commit}`], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
24
+ return !result.error && result.status === 0;
25
+ }
26
+ // INV-WTS-3 (landed-node ancestry): a landed node's commit must be an ancestor
27
+ // of the ref it claims to have landed on. `git merge-base --is-ancestor` exits 0
28
+ // exactly when that holds.
29
+ async function gitCommitIsAncestor(root, ancestor, descendant) {
30
+ const result = await runTrackedAsync(["git", "merge-base", "--is-ancestor", ancestor, descendant], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
31
+ return !result.error && result.status === 0;
32
+ }
33
+ /**
34
+ * Is this commit ORPHANED — unreachable from anything the repository still
35
+ * keeps?
36
+ *
37
+ * "Not an ancestor of HEAD" is NOT orphanhood. A baseline sitting on an
38
+ * unmerged `feature` branch while the work landed on trunk fails the ancestry
39
+ * test exactly like a rewritten-away commit does, and treating that as orphaned
40
+ * would hand the relaxation to the ordinary cross-branch case — precisely the
41
+ * stale-worker situation the ancestry check exists to catch.
42
+ *
43
+ * So orphanhood is the CONJUNCTION of two probes: `git for-each-ref --contains`
44
+ * lists every branch/tag/remote ref whose history contains the commit (empty
45
+ * output = no live ref keeps it), and the HEAD ancestry check rides alongside
46
+ * it.
47
+ *
48
+ * A THIRD source of reachability sits outside `for-each-ref` entirely: the
49
+ * HEADs of this repository's OTHER worktrees, checked into no ref at all. In a
50
+ * linked worktree git DETACHES HEAD (or parks a per-worktree branch), so a
51
+ * baseline that is the live HEAD of a sibling worktree — exactly the state a
52
+ * parallel remediation lane is in — would be reported as contained by nothing,
53
+ * i.e. orphaned, and the relaxation would be handed out for a commit the
54
+ * repository is actively keeping. `git worktree list --porcelain` enumerates
55
+ * every worktree with its current HEAD, so it is read and compared. The linked
56
+ * worktree's own HEAD is included by this probe, which is why the ordinary
57
+ * detached-HEAD case needs no separate arm.
58
+ *
59
+ * RESIDUAL, deliberately not closed: that probe compares HEAD for EQUALITY, so
60
+ * it covers a worktree detached at the baseline ONLY when its HEAD *is* the
61
+ * baseline. A sibling worktree detached at a DESCENDANT of the baseline — a
62
+ * lane that landed further commits on top — keeps the baseline reachable while
63
+ * matching no ref and no worktree HEAD, and is still reported orphaned. Closing
64
+ * it means an ancestry probe per enumerated worktree HEAD; the residual is
65
+ * stated here rather than left as an implied full cover.
66
+ *
67
+ * A failed scan is not evidence of orphanhood — any probe that cannot answer
68
+ * fails closed, so a git that cannot answer never unlocks the relaxation.
69
+ */
70
+ async function gitCommitIsOrphaned(root, commit) {
71
+ if (await gitCommitIsAncestor(root, commit, "HEAD"))
72
+ return false;
73
+ const result = await runTrackedAsync(["git", "for-each-ref", "--contains", commit, "--format=%(refname)"], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
74
+ if (result.error || result.status !== 0)
75
+ return false;
76
+ if (result.stdout.trim().length > 0)
77
+ return false;
78
+ // Reached only when no REF keeps the commit. Every worktree HEAD is then
79
+ // checked, so the detached (and per-worktree-branch) HEADs git does not
80
+ // enumerate as refs are still seen.
81
+ const worktrees = await runTrackedAsync(["git", "worktree", "list", "--porcelain"], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
82
+ if (worktrees.error || worktrees.status !== 0)
83
+ return false;
84
+ return !worktrees.stdout
85
+ .split("\n")
86
+ .filter((line) => line.startsWith("HEAD "))
87
+ .some((line) => line.slice("HEAD ".length).trim() === commit);
88
+ }
89
+ async function gitChangedFilesOfCommit(root, commit) {
90
+ const result = await runTrackedAsync([
91
+ "git",
92
+ "diff-tree",
93
+ "--root",
94
+ "--no-commit-id",
95
+ "--name-only",
96
+ "-r",
97
+ "-z",
98
+ commit,
99
+ ], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
100
+ if (result.error || result.status !== 0)
101
+ return null;
102
+ return [...new Set(result.stdout.split("\0").filter(Boolean))].sort(compareCodeUnits);
103
+ }
104
+ /**
105
+ * Every repo-relative path the tree shows as touched since `baseline` — the
106
+ * commits baseline→HEAD, the working tree's own deviation from HEAD (staged and
107
+ * unstaged alike), and the untracked files git considers repository content.
108
+ *
109
+ * All three legs are needed to falsify a no-change claim, and they enumerate the
110
+ * three ways a host can have edited: committed (leg 1), edited a TRACKED file
111
+ * and left it uncommitted (leg 2), and CREATED a file (leg 3). A new `src/*.ts`
112
+ * is a real edit and the most natural shape a remediation takes; without leg 3
113
+ * the cheapest way to smuggle one past a no-change claim was simply never to
114
+ * `git add` it. `null` means git could not answer, which callers must treat as
115
+ * "cannot corroborate" rather than as "nothing changed".
116
+ *
117
+ * The untracked leg honours `--exclude-standard`, so it enumerates only what git
118
+ * itself treats as content — a repo's `.gitignore`d build and coverage output is
119
+ * already invisible to it. Two exemptions cover the remainder, both ground
120
+ * truth rather than the host's word:
121
+ *
122
+ * - THIS TOOL'S OWN ARTIFACT TREE ({@link AUDIT_TOOLS_DIRNAME}) is subtracted
123
+ * here, explicitly. In a real repository the tool writes a managed
124
+ * `.gitignore` block covering it, so it never reaches this probe at all; the
125
+ * explicit subtraction is what makes that independent of whether the block
126
+ * has been written yet, so a bare root (a fixture, a first run) cannot
127
+ * manufacture a false refusal out of the tool's own workload, prompt and
128
+ * result documents.
129
+ * - PRE-EXISTING untracked strays are excused by the caller's `excusedPaths`,
130
+ * for free: `run_start_dirty` is captured from `stagedAndUntracked` before
131
+ * any remediation edit exists, so it already enumerates untracked files.
132
+ * What survives both is an untracked file that appeared DURING the run — the
133
+ * only untracked class that can be this host's edit.
134
+ */
135
+ async function gitChangedFilesSince(root, baseline) {
136
+ const files = new Set();
137
+ for (const args of [
138
+ // baseline → HEAD: what the host committed.
139
+ ["diff", "--name-only", "-z", baseline, "HEAD"],
140
+ // HEAD → working tree: what the host edited and did not commit.
141
+ ["diff", "--name-only", "-z", "HEAD"],
142
+ // Never added: what the host CREATED. `--exclude-standard` keeps git's own
143
+ // ignore rules authoritative.
144
+ ["ls-files", "--others", "--exclude-standard", "-z"],
145
+ ]) {
146
+ const probe = await runTrackedAsync(["git", ...args], {
147
+ cwd: root,
148
+ encoding: "utf8",
149
+ timeout: TRACKED_CHILD_DEADLINE_MS,
150
+ });
151
+ if (probe.error || probe.status !== 0)
152
+ return null;
153
+ for (const file of probe.stdout.split("\0").filter(Boolean)) {
154
+ if (isAuditToolsArtifactPath(file))
155
+ continue;
156
+ files.add(file);
157
+ }
158
+ }
159
+ return [...files].sort(compareCodeUnits);
160
+ }
161
+ /** Whether a repo-relative path lives inside this tool's own artifact tree. */
162
+ function isAuditToolsArtifactPath(path) {
163
+ const normalized = normalizeRepoPath(path);
164
+ return (normalized === AUDIT_TOOLS_DIRNAME ||
165
+ normalized.startsWith(`${AUDIT_TOOLS_DIRNAME}/`));
166
+ }
167
+ /**
168
+ * Corroborate an explicit `resolved_no_change` decision against the repository.
169
+ *
170
+ * A no-change decision used to be accepted on its evidence STRINGS alone, with
171
+ * only the required tests re-run — so a host that had in fact edited and then
172
+ * declared "nothing to do" was recorded as verified-no-change, and the edit
173
+ * rode into the run unattributed. The claim is mechanically falsifiable, so it
174
+ * is FALSIFIED.
175
+ *
176
+ * The scope of the falsification is the FULL write-scope corroboration every
177
+ * other acceptance path gets, NOT a narrowing to this item's `allowed_files`.
178
+ * `corroborateHostResult` refuses a landed commit that touched anything outside
179
+ * `allowed_files`; a no-change decision that narrowed the check to files INSIDE
180
+ * `allowed_files` would be the inverse rule — the out-of-scope edit, the more
181
+ * serious of the two, would be the one silently admitted. So EVERY path the
182
+ * tree shows as moved since the workload baseline refuses the claim.
183
+ *
184
+ * `excusedPaths` is the only exemption, and it is ground truth rather than the
185
+ * host's word: `run_start_dirty` (already dirty before the run began, so not
186
+ * evidence that this host edited anything — and because it is captured from
187
+ * `stagedAndUntracked`, it excuses pre-existing UNTRACKED strays too) unioned
188
+ * with the accepted edit surface — `applied_edit_surface` plus whatever this
189
+ * same ingest has already corroborated and accepted, so a sibling work item's
190
+ * legitimately landed files do not falsify this item's claim.
191
+ *
192
+ * Fails CLOSED, like every other corroboration here: a git that cannot answer
193
+ * refuses the claim rather than admitting it.
194
+ */
195
+ export async function corroborateNoChangeClaim(params) {
196
+ const { root, workItem, excusedPaths } = params;
197
+ if (!(await isGitRepo(root)))
198
+ return { ok: true };
199
+ const baseline = workItem.baseline_commit;
200
+ if (!(await gitCommitExists(root, baseline))) {
201
+ return {
202
+ ok: false,
203
+ code: "commit_missing",
204
+ check: "no_change_corroboration",
205
+ message: "resolved_no_change cannot be corroborated: baseline_commit does not resolve to a real commit",
206
+ };
207
+ }
208
+ const changed = await gitChangedFilesSince(root, baseline);
209
+ if (changed === null) {
210
+ return {
211
+ ok: false,
212
+ code: "commit_missing",
213
+ check: "no_change_corroboration",
214
+ message: "resolved_no_change cannot be corroborated: git could not enumerate the changes since the workload baseline",
215
+ };
216
+ }
217
+ const violating = changed.filter((path) => !excusedPaths.has(normalizeRepoPath(path)));
218
+ if (violating.length > 0) {
219
+ const inScope = violating.filter((path) => pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
220
+ const outOfScope = violating.filter((path) => !pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
221
+ return {
222
+ ok: false,
223
+ code: "changed_files_mismatch",
224
+ check: "no_change_corroboration",
225
+ message: "resolved_no_change is contradicted by the tree — these files changed since the " +
226
+ `workload baseline: ${violating.join(", ")}` +
227
+ (outOfScope.length > 0
228
+ ? ` (outside the prompt-bound allowed_files: ${outOfScope.join(", ")}` +
229
+ (inScope.length > 0 ? `; inside: ${inScope.join(", ")})` : ")")
230
+ : ""),
231
+ };
232
+ }
233
+ return { ok: true };
234
+ }
235
+ export async function corroborateHostResult(params) {
236
+ const { root, state, workItem, result, verdicts } = params;
237
+ const baseline = workItem.baseline_commit;
238
+ const landed = result.landed_commit;
239
+ let usedRecovery = false;
240
+ if (!(await gitCommitExists(root, baseline))) {
241
+ return {
242
+ ok: false,
243
+ code: "baseline_missing",
244
+ check: "landed_commit",
245
+ message: "the work item's baseline_commit is not in this repository",
246
+ };
247
+ }
248
+ if (!(await gitCommitExists(root, landed))) {
249
+ return {
250
+ ok: false,
251
+ code: "commit_missing",
252
+ check: "landed_commit",
253
+ message: "landed_commit is not a commit in this repository",
254
+ };
255
+ }
256
+ if (landed === baseline) {
257
+ return {
258
+ ok: false,
259
+ code: "landed_commit_invalid",
260
+ check: "landed_commit",
261
+ message: "landed_commit is the baseline commit; name the commit that carries this item's edits",
262
+ };
263
+ }
264
+ if (!(await gitCommitIsAncestor(root, baseline, landed))) {
265
+ if (!params.recovery) {
266
+ // An ORPHANED baseline (no ref contains it, HEAD cannot reach it) is a
267
+ // fault in the run, not in the work: no commit could ever descend from
268
+ // it. The spawn-free recovery verb is its named repair.
269
+ if (await gitCommitIsOrphaned(root, baseline)) {
270
+ return {
271
+ ok: false,
272
+ code: "baseline_orphaned",
273
+ check: "landed_commit",
274
+ message: "the work item's baseline_commit is orphaned (history was rewritten under the run); " +
275
+ "the operator can run `recover-ingest` to accept the landed work",
276
+ };
277
+ }
278
+ return {
279
+ ok: false,
280
+ code: "baseline_not_ancestor",
281
+ check: "landed_commit",
282
+ message: "the trusted workload baseline is not an ancestor of the claimed landed commit",
283
+ };
284
+ }
285
+ // The relaxation is precondition-bound: it applies ONLY when the trusted
286
+ // baseline is genuinely ORPHANED — contained by no ref AND unreachable from
287
+ // HEAD (see gitCommitIsOrphaned). That is the one state in which no landed
288
+ // commit could ever descend from it, so the item is unacceptable under
289
+ // every preparable binding. A baseline the repository still keeps — on an
290
+ // unmerged branch, a tag, a remote ref, or HEAD itself — is a HEALTHY
291
+ // binding, and a landed commit that does not descend from it is exactly the
292
+ // stale-worker case the ancestry check exists to catch; recovery refuses it
293
+ // identically to the normal lane.
294
+ if (!(await gitCommitIsOrphaned(root, baseline))) {
295
+ return {
296
+ ok: false,
297
+ code: "baseline_not_ancestor",
298
+ check: "landed_commit",
299
+ message: "the trusted workload baseline is not an ancestor of the claimed landed commit, " +
300
+ "and the baseline is NOT orphaned (a ref still contains it, or it is reachable " +
301
+ "from HEAD), so the stale-worker protection stands and recovery cannot waive it",
302
+ };
303
+ }
304
+ usedRecovery = true;
305
+ }
306
+ if (!(await gitCommitIsAncestor(root, landed, "HEAD"))) {
307
+ return {
308
+ ok: false,
309
+ code: "commit_not_landed",
310
+ check: "landed_commit",
311
+ message: "landed_commit is not reachable from the repository HEAD",
312
+ };
313
+ }
314
+ const actualFiles = await gitChangedFilesOfCommit(root, landed);
315
+ if (!actualFiles || actualFiles.length === 0) {
316
+ return {
317
+ ok: false,
318
+ code: "landed_commit_invalid",
319
+ check: "landed_commit",
320
+ message: "landed_commit changes no file; name the commit that carries this item's edits",
321
+ };
322
+ }
323
+ const outOfScope = actualFiles.filter((path) => !pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
324
+ if (outOfScope.length > 0) {
325
+ return {
326
+ ok: false,
327
+ code: "changed_files_mismatch",
328
+ check: "write_scope",
329
+ message: "the landed commit changed files outside the prompt-bound allowed_files: " +
330
+ outOfScope.join(", "),
331
+ };
332
+ }
333
+ const runStartDirty = new Set((state.run_start_dirty ?? []).map(normalizeRepoPath));
334
+ const dirtyOverlap = actualFiles.filter((path) => runStartDirty.has(normalizeRepoPath(path)));
335
+ if (dirtyOverlap.length > 0) {
336
+ return {
337
+ ok: false,
338
+ code: "run_start_dirty_overlap",
339
+ check: "run_start_dirt",
340
+ message: `landed files overlap pre-existing run-start dirt: ${dirtyOverlap.join(", ")}`,
341
+ };
342
+ }
343
+ const failedTests = await rerunRequiredTests(root, workItem.required_tests, verdicts);
344
+ if (failedTests.length > 0) {
345
+ const issue = requiredTestIssue(workItem, failedTests);
346
+ return { ok: false, code: issue.code, check: "required_tests", message: issue.message };
347
+ }
348
+ return { ok: true, changedFiles: actualFiles, usedRecovery };
349
+ }
350
+ //# sourceMappingURL=hostCorroboration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostCorroboration.js","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostCorroboration.ts"],"names":[],"mappings":"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"}