audit-tools 0.48.0 → 0.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/README.md +3 -1
  2. package/dist/audit/clarification/partition.d.ts.map +1 -1
  3. package/dist/audit/clarification/partition.js +2 -1
  4. package/dist/audit/clarification/partition.js.map +1 -1
  5. package/dist/audit/clarification/voiQueue.d.ts.map +1 -1
  6. package/dist/audit/clarification/voiQueue.js +2 -1
  7. package/dist/audit/clarification/voiQueue.js.map +1 -1
  8. package/dist/audit/cli/args.d.ts +27 -0
  9. package/dist/audit/cli/args.d.ts.map +1 -1
  10. package/dist/audit/cli/args.js +32 -2
  11. package/dist/audit/cli/args.js.map +1 -1
  12. package/dist/audit/cli/dispatch/hostHandoff.d.ts +1 -1
  13. package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
  14. package/dist/audit/cli/dispatch/hostHandoff.js +32 -55
  15. package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
  16. package/dist/audit/cli/explainTaskCommand.d.ts.map +1 -1
  17. package/dist/audit/cli/explainTaskCommand.js +2 -1
  18. package/dist/audit/cli/explainTaskCommand.js.map +1 -1
  19. package/dist/audit/cli/laneValidators.d.ts +0 -2
  20. package/dist/audit/cli/laneValidators.d.ts.map +1 -1
  21. package/dist/audit/cli/laneValidators.js +2 -6
  22. package/dist/audit/cli/laneValidators.js.map +1 -1
  23. package/dist/audit/cli/lineIndex.d.ts.map +1 -1
  24. package/dist/audit/cli/lineIndex.js +2 -1
  25. package/dist/audit/cli/lineIndex.js.map +1 -1
  26. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  27. package/dist/audit/cli/nextStepHelpers.js +4 -4
  28. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  29. package/dist/audit/contracts/findingContractPrompt.d.ts.map +1 -1
  30. package/dist/audit/contracts/findingContractPrompt.js +2 -2
  31. package/dist/audit/contracts/findingContractPrompt.js.map +1 -1
  32. package/dist/audit/decompose/buildStructureDecomposition.d.ts.map +1 -1
  33. package/dist/audit/decompose/buildStructureDecomposition.js +5 -8
  34. package/dist/audit/decompose/buildStructureDecomposition.js.map +1 -1
  35. package/dist/audit/decompose/findings.js +2 -2
  36. package/dist/audit/decompose/findings.js.map +1 -1
  37. package/dist/audit/decompose/sources.d.ts.map +1 -1
  38. package/dist/audit/decompose/sources.js +8 -11
  39. package/dist/audit/decompose/sources.js.map +1 -1
  40. package/dist/audit/extractors/analyzers/merge.d.ts.map +1 -1
  41. package/dist/audit/extractors/analyzers/merge.js +4 -3
  42. package/dist/audit/extractors/analyzers/merge.js.map +1 -1
  43. package/dist/audit/extractors/browserExtension.d.ts.map +1 -1
  44. package/dist/audit/extractors/browserExtension.js +2 -4
  45. package/dist/audit/extractors/browserExtension.js.map +1 -1
  46. package/dist/audit/extractors/commentDecomposition.d.ts.map +1 -1
  47. package/dist/audit/extractors/commentDecomposition.js +15 -29
  48. package/dist/audit/extractors/commentDecomposition.js.map +1 -1
  49. package/dist/audit/extractors/dataStateCoupling.d.ts.map +1 -1
  50. package/dist/audit/extractors/dataStateCoupling.js +3 -2
  51. package/dist/audit/extractors/dataStateCoupling.js.map +1 -1
  52. package/dist/audit/extractors/designAssessment.d.ts.map +1 -1
  53. package/dist/audit/extractors/designAssessment.js +6 -5
  54. package/dist/audit/extractors/designAssessment.js.map +1 -1
  55. package/dist/audit/extractors/disposition.d.ts.map +1 -1
  56. package/dist/audit/extractors/disposition.js +1 -4
  57. package/dist/audit/extractors/disposition.js.map +1 -1
  58. package/dist/audit/extractors/docsDigest.d.ts.map +1 -1
  59. package/dist/audit/extractors/docsDigest.js +6 -20
  60. package/dist/audit/extractors/docsDigest.js.map +1 -1
  61. package/dist/audit/extractors/fileInventory.d.ts.map +1 -1
  62. package/dist/audit/extractors/fileInventory.js +2 -1
  63. package/dist/audit/extractors/fileInventory.js.map +1 -1
  64. package/dist/audit/extractors/flows.js +3 -3
  65. package/dist/audit/extractors/flows.js.map +1 -1
  66. package/dist/audit/extractors/fsIntake.d.ts.map +1 -1
  67. package/dist/audit/extractors/fsIntake.js +4 -7
  68. package/dist/audit/extractors/fsIntake.js.map +1 -1
  69. package/dist/audit/extractors/graph.d.ts +1 -1
  70. package/dist/audit/extractors/graph.d.ts.map +1 -1
  71. package/dist/audit/extractors/graph.js +9 -12
  72. package/dist/audit/extractors/graph.js.map +1 -1
  73. package/dist/audit/extractors/graphManifestEdges/jsonc.d.ts +10 -0
  74. package/dist/audit/extractors/graphManifestEdges/jsonc.d.ts.map +1 -1
  75. package/dist/audit/extractors/graphManifestEdges/jsonc.js +12 -50
  76. package/dist/audit/extractors/graphManifestEdges/jsonc.js.map +1 -1
  77. package/dist/audit/extractors/graphPythonImports.js +2 -2
  78. package/dist/audit/extractors/graphPythonImports.js.map +1 -1
  79. package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
  80. package/dist/audit/extractors/graphRoutes.js +4 -3
  81. package/dist/audit/extractors/graphRoutes.js.map +1 -1
  82. package/dist/audit/extractors/graphSignals.d.ts.map +1 -1
  83. package/dist/audit/extractors/graphSignals.js +3 -2
  84. package/dist/audit/extractors/graphSignals.js.map +1 -1
  85. package/dist/audit/extractors/graphSuites.d.ts.map +1 -1
  86. package/dist/audit/extractors/graphSuites.js +3 -2
  87. package/dist/audit/extractors/graphSuites.js.map +1 -1
  88. package/dist/audit/extractors/readFileText.d.ts +12 -0
  89. package/dist/audit/extractors/readFileText.d.ts.map +1 -0
  90. package/dist/audit/extractors/readFileText.js +23 -0
  91. package/dist/audit/extractors/readFileText.js.map +1 -0
  92. package/dist/audit/extractors/risk.d.ts.map +1 -1
  93. package/dist/audit/extractors/risk.js +3 -2
  94. package/dist/audit/extractors/risk.js.map +1 -1
  95. package/dist/audit/io/artifacts.d.ts +0 -28
  96. package/dist/audit/io/artifacts.d.ts.map +1 -1
  97. package/dist/audit/io/artifacts.js +1 -65
  98. package/dist/audit/io/artifacts.js.map +1 -1
  99. package/dist/audit/io/toolingManifest.d.ts.map +1 -1
  100. package/dist/audit/io/toolingManifest.js +3 -2
  101. package/dist/audit/io/toolingManifest.js.map +1 -1
  102. package/dist/audit/orchestrator/artifactMetadata.d.ts.map +1 -1
  103. package/dist/audit/orchestrator/artifactMetadata.js +2 -2
  104. package/dist/audit/orchestrator/artifactMetadata.js.map +1 -1
  105. package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
  106. package/dist/audit/orchestrator/autoFixExecutor.js +2 -1
  107. package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
  108. package/dist/audit/orchestrator/charterPackets.d.ts.map +1 -1
  109. package/dist/audit/orchestrator/charterPackets.js +4 -3
  110. package/dist/audit/orchestrator/charterPackets.js.map +1 -1
  111. package/dist/audit/orchestrator/dependencySlices.d.ts.map +1 -1
  112. package/dist/audit/orchestrator/dependencySlices.js +4 -6
  113. package/dist/audit/orchestrator/dependencySlices.js.map +1 -1
  114. package/dist/audit/orchestrator/designReviewProjection.d.ts.map +1 -1
  115. package/dist/audit/orchestrator/designReviewProjection.js +2 -2
  116. package/dist/audit/orchestrator/designReviewProjection.js.map +1 -1
  117. package/dist/audit/orchestrator/designReviewSnapshot.d.ts.map +1 -1
  118. package/dist/audit/orchestrator/designReviewSnapshot.js +2 -5
  119. package/dist/audit/orchestrator/designReviewSnapshot.js.map +1 -1
  120. package/dist/audit/orchestrator/edgeReasoning.d.ts.map +1 -1
  121. package/dist/audit/orchestrator/edgeReasoning.js +3 -3
  122. package/dist/audit/orchestrator/edgeReasoning.js.map +1 -1
  123. package/dist/audit/orchestrator/fileAnchors.d.ts.map +1 -1
  124. package/dist/audit/orchestrator/fileAnchors.js +14 -16
  125. package/dist/audit/orchestrator/fileAnchors.js.map +1 -1
  126. package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
  127. package/dist/audit/orchestrator/flowPlanning.js +3 -2
  128. package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
  129. package/dist/audit/orchestrator/graphEnrichmentExecutor.js +5 -5
  130. package/dist/audit/orchestrator/graphEnrichmentExecutor.js.map +1 -1
  131. package/dist/audit/orchestrator/ingestionExecutors.d.ts.map +1 -1
  132. package/dist/audit/orchestrator/ingestionExecutors.js +2 -1
  133. package/dist/audit/orchestrator/ingestionExecutors.js.map +1 -1
  134. package/dist/audit/orchestrator/partitionTaskGraph.d.ts.map +1 -1
  135. package/dist/audit/orchestrator/partitionTaskGraph.js +1 -3
  136. package/dist/audit/orchestrator/partitionTaskGraph.js.map +1 -1
  137. package/dist/audit/orchestrator/reviewPacketGraphContext.js +3 -3
  138. package/dist/audit/orchestrator/reviewPacketGraphContext.js.map +1 -1
  139. package/dist/audit/orchestrator/reviewPacketGraphEdges.d.ts.map +1 -1
  140. package/dist/audit/orchestrator/reviewPacketGraphEdges.js +4 -4
  141. package/dist/audit/orchestrator/reviewPacketGraphEdges.js.map +1 -1
  142. package/dist/audit/orchestrator/reviewPacketMetrics.d.ts.map +1 -1
  143. package/dist/audit/orchestrator/reviewPacketMetrics.js +4 -3
  144. package/dist/audit/orchestrator/reviewPacketMetrics.js.map +1 -1
  145. package/dist/audit/orchestrator/reviewPackets.d.ts.map +1 -1
  146. package/dist/audit/orchestrator/reviewPackets.js +1 -4
  147. package/dist/audit/orchestrator/reviewPackets.js.map +1 -1
  148. package/dist/audit/orchestrator/runtimeValidationUpdate.d.ts.map +1 -1
  149. package/dist/audit/orchestrator/runtimeValidationUpdate.js +2 -1
  150. package/dist/audit/orchestrator/runtimeValidationUpdate.js.map +1 -1
  151. package/dist/audit/orchestrator/scope.js +4 -4
  152. package/dist/audit/orchestrator/scope.js.map +1 -1
  153. package/dist/audit/orchestrator/selectiveDeepening/index.d.ts.map +1 -1
  154. package/dist/audit/orchestrator/selectiveDeepening/index.js +4 -3
  155. package/dist/audit/orchestrator/selectiveDeepening/index.js.map +1 -1
  156. package/dist/audit/orchestrator/selectiveDeepening/lensVerification.d.ts.map +1 -1
  157. package/dist/audit/orchestrator/selectiveDeepening/lensVerification.js +4 -3
  158. package/dist/audit/orchestrator/selectiveDeepening/lensVerification.js.map +1 -1
  159. package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts +0 -1
  160. package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts.map +1 -1
  161. package/dist/audit/orchestrator/selectiveDeepening/shared.js +2 -5
  162. package/dist/audit/orchestrator/selectiveDeepening/shared.js.map +1 -1
  163. package/dist/audit/orchestrator/selectiveDeepening/stewardFollowup.js +2 -1
  164. package/dist/audit/orchestrator/selectiveDeepening/stewardFollowup.js.map +1 -1
  165. package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
  166. package/dist/audit/orchestrator/taskBuilder.js +5 -12
  167. package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
  168. package/dist/audit/orchestrator/unitBuilder.d.ts.map +1 -1
  169. package/dist/audit/orchestrator/unitBuilder.js +3 -2
  170. package/dist/audit/orchestrator/unitBuilder.js.map +1 -1
  171. package/dist/audit/orchestrator.d.ts.map +1 -1
  172. package/dist/audit/orchestrator.js +1 -4
  173. package/dist/audit/orchestrator.js.map +1 -1
  174. package/dist/audit/reporting/mergeFindings.d.ts.map +1 -1
  175. package/dist/audit/reporting/mergeFindings.js +3 -4
  176. package/dist/audit/reporting/mergeFindings.js.map +1 -1
  177. package/dist/audit/reporting/synthesis.d.ts.map +1 -1
  178. package/dist/audit/reporting/synthesis.js +3 -3
  179. package/dist/audit/reporting/synthesis.js.map +1 -1
  180. package/dist/audit/reporting/workBlocks.d.ts.map +1 -1
  181. package/dist/audit/reporting/workBlocks.js +15 -20
  182. package/dist/audit/reporting/workBlocks.js.map +1 -1
  183. package/dist/audit/supervisor/runLedger.d.ts.map +1 -1
  184. package/dist/audit/supervisor/runLedger.js +1 -4
  185. package/dist/audit/supervisor/runLedger.js.map +1 -1
  186. package/dist/audit/systemic/systemicChallengeLoop.js +2 -2
  187. package/dist/audit/systemic/systemicChallengeLoop.js.map +1 -1
  188. package/dist/audit/validation/artifacts.d.ts.map +1 -1
  189. package/dist/audit/validation/artifacts.js +26 -29
  190. package/dist/audit/validation/artifacts.js.map +1 -1
  191. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +25 -10
  192. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +1 -1
  193. package/dist/remediate/contractPipeline/cyclicSeamResolution.js +35 -88
  194. package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +1 -1
  195. package/dist/remediate/contractPipeline/idRegistry.d.ts +10 -20
  196. package/dist/remediate/contractPipeline/idRegistry.d.ts.map +1 -1
  197. package/dist/remediate/contractPipeline/idRegistry.js +10 -24
  198. package/dist/remediate/contractPipeline/idRegistry.js.map +1 -1
  199. package/dist/remediate/contractPipeline/obligationKinds.d.ts +27 -0
  200. package/dist/remediate/contractPipeline/obligationKinds.d.ts.map +1 -0
  201. package/dist/remediate/contractPipeline/obligationKinds.js +18 -0
  202. package/dist/remediate/contractPipeline/obligationKinds.js.map +1 -0
  203. package/dist/remediate/contractPipeline/phaseCut.d.ts.map +1 -1
  204. package/dist/remediate/contractPipeline/phaseCut.js +2 -1
  205. package/dist/remediate/contractPipeline/phaseCut.js.map +1 -1
  206. package/dist/remediate/contractPipeline/testPlanCarry.d.ts.map +1 -1
  207. package/dist/remediate/contractPipeline/testPlanCarry.js +1 -4
  208. package/dist/remediate/contractPipeline/testPlanCarry.js.map +1 -1
  209. package/dist/remediate/dedup/crossLensDedup.d.ts +2 -3
  210. package/dist/remediate/dedup/crossLensDedup.d.ts.map +1 -1
  211. package/dist/remediate/dedup/crossLensDedup.js +2 -4
  212. package/dist/remediate/dedup/crossLensDedup.js.map +1 -1
  213. package/dist/remediate/index.d.ts +38 -8
  214. package/dist/remediate/index.d.ts.map +1 -1
  215. package/dist/remediate/index.js +75 -27
  216. package/dist/remediate/index.js.map +1 -1
  217. package/dist/remediate/phases/close.d.ts.map +1 -1
  218. package/dist/remediate/phases/close.js +3 -3
  219. package/dist/remediate/phases/close.js.map +1 -1
  220. package/dist/remediate/phases/plan.js +2 -2
  221. package/dist/remediate/phases/plan.js.map +1 -1
  222. package/dist/remediate/riskSignal.d.ts +1 -0
  223. package/dist/remediate/riskSignal.d.ts.map +1 -1
  224. package/dist/remediate/riskSignal.js +3 -7
  225. package/dist/remediate/riskSignal.js.map +1 -1
  226. package/dist/remediate/state/accessMemory.d.ts.map +1 -1
  227. package/dist/remediate/state/accessMemory.js +3 -3
  228. package/dist/remediate/state/accessMemory.js.map +1 -1
  229. package/dist/remediate/steps/contractPipeline.d.ts +6 -62
  230. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  231. package/dist/remediate/steps/contractPipeline.js +20 -89
  232. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  233. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  234. package/dist/remediate/steps/dispatch/hostHandoff.js +32 -39
  235. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  236. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  237. package/dist/remediate/steps/nextStep.js +14 -5
  238. package/dist/remediate/steps/nextStep.js.map +1 -1
  239. package/dist/remediate/utils/fileIntegrity.d.ts.map +1 -1
  240. package/dist/remediate/utils/fileIntegrity.js +4 -8
  241. package/dist/remediate/utils/fileIntegrity.js.map +1 -1
  242. package/dist/remediate/validation/artifacts.d.ts.map +1 -1
  243. package/dist/remediate/validation/artifacts.js +8 -14
  244. package/dist/remediate/validation/artifacts.js.map +1 -1
  245. package/dist/remediate/validation/contractPipeline.d.ts +1 -1
  246. package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
  247. package/dist/remediate/validation/contractPipeline.js +8 -46
  248. package/dist/remediate/validation/contractPipeline.js.map +1 -1
  249. package/dist/remediate/validation/contractPipelineGates.d.ts +12 -20
  250. package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
  251. package/dist/remediate/validation/contractPipelineGates.js +107 -135
  252. package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
  253. package/dist/shared/accessMemory.d.ts.map +1 -1
  254. package/dist/shared/accessMemory.js +2 -1
  255. package/dist/shared/accessMemory.js.map +1 -1
  256. package/dist/shared/affinityArtifacts.d.ts +0 -1
  257. package/dist/shared/affinityArtifacts.d.ts.map +1 -1
  258. package/dist/shared/affinityArtifacts.js +1 -3
  259. package/dist/shared/affinityArtifacts.js.map +1 -1
  260. package/dist/shared/agentReflections.d.ts.map +1 -1
  261. package/dist/shared/agentReflections.js +2 -1
  262. package/dist/shared/agentReflections.js.map +1 -1
  263. package/dist/shared/analyzerPolicy.d.ts.map +1 -1
  264. package/dist/shared/analyzerPolicy.js +7 -22
  265. package/dist/shared/analyzerPolicy.js.map +1 -1
  266. package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
  267. package/dist/shared/analyzers/binaryAcquisition.js +7 -10
  268. package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
  269. package/dist/shared/analyzers/candidates.d.ts.map +1 -1
  270. package/dist/shared/analyzers/candidates.js +1 -3
  271. package/dist/shared/analyzers/candidates.js.map +1 -1
  272. package/dist/shared/analyzers/normalizeExternal.d.ts.map +1 -1
  273. package/dist/shared/analyzers/normalizeExternal.js +12 -13
  274. package/dist/shared/analyzers/normalizeExternal.js.map +1 -1
  275. package/dist/shared/analyzers/types.d.ts.map +1 -1
  276. package/dist/shared/analyzers/types.js +2 -1
  277. package/dist/shared/analyzers/types.js.map +1 -1
  278. package/dist/shared/artifactFreshness.d.ts.map +1 -1
  279. package/dist/shared/artifactFreshness.js +4 -8
  280. package/dist/shared/artifactFreshness.js.map +1 -1
  281. package/dist/shared/compareCodeUnits.d.ts +9 -0
  282. package/dist/shared/compareCodeUnits.d.ts.map +1 -0
  283. package/dist/shared/compareCodeUnits.js +11 -0
  284. package/dist/shared/compareCodeUnits.js.map +1 -0
  285. package/dist/shared/constitutionalDocPaths.d.ts.map +1 -1
  286. package/dist/shared/constitutionalDocPaths.js +1 -4
  287. package/dist/shared/constitutionalDocPaths.js.map +1 -1
  288. package/dist/shared/contentKey.d.ts.map +1 -1
  289. package/dist/shared/contentKey.js +6 -8
  290. package/dist/shared/contentKey.js.map +1 -1
  291. package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
  292. package/dist/shared/decompose/charterClarification.js +2 -1
  293. package/dist/shared/decompose/charterClarification.js.map +1 -1
  294. package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
  295. package/dist/shared/decompose/charterExtraction.js +21 -20
  296. package/dist/shared/decompose/charterExtraction.js.map +1 -1
  297. package/dist/shared/decompose/consensus.d.ts.map +1 -1
  298. package/dist/shared/decompose/consensus.js +7 -6
  299. package/dist/shared/decompose/consensus.js.map +1 -1
  300. package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
  301. package/dist/shared/decompose/contentCoherence.js +4 -10
  302. package/dist/shared/decompose/contentCoherence.js.map +1 -1
  303. package/dist/shared/decompose/modularity.d.ts.map +1 -1
  304. package/dist/shared/decompose/modularity.js +12 -14
  305. package/dist/shared/decompose/modularity.js.map +1 -1
  306. package/dist/shared/decompose/workBlockSeams.js +3 -3
  307. package/dist/shared/decompose/workBlockSeams.js.map +1 -1
  308. package/dist/shared/findings/dedupe.d.ts +4 -11
  309. package/dist/shared/findings/dedupe.d.ts.map +1 -1
  310. package/dist/shared/findings/dedupe.js +198 -164
  311. package/dist/shared/findings/dedupe.js.map +1 -1
  312. package/dist/shared/friction/frictionRecord.d.ts.map +1 -1
  313. package/dist/shared/friction/frictionRecord.js +3 -2
  314. package/dist/shared/friction/frictionRecord.js.map +1 -1
  315. package/dist/shared/friction/triage.d.ts.map +1 -1
  316. package/dist/shared/friction/triage.js +2 -1
  317. package/dist/shared/friction/triage.js.map +1 -1
  318. package/dist/shared/git.d.ts.map +1 -1
  319. package/dist/shared/git.js +5 -4
  320. package/dist/shared/git.js.map +1 -1
  321. package/dist/shared/graph/directedCycles.d.ts +61 -0
  322. package/dist/shared/graph/directedCycles.d.ts.map +1 -0
  323. package/dist/shared/graph/directedCycles.js +190 -0
  324. package/dist/shared/graph/directedCycles.js.map +1 -0
  325. package/dist/shared/index.d.ts +8 -2
  326. package/dist/shared/index.d.ts.map +1 -1
  327. package/dist/shared/index.js +9 -2
  328. package/dist/shared/index.js.map +1 -1
  329. package/dist/shared/io/artifactName.js +2 -2
  330. package/dist/shared/io/artifactName.js.map +1 -1
  331. package/dist/shared/io/frictionCapture.d.ts.map +1 -1
  332. package/dist/shared/io/frictionCapture.js +4 -6
  333. package/dist/shared/io/frictionCapture.js.map +1 -1
  334. package/dist/shared/io/json.d.ts +2 -0
  335. package/dist/shared/io/json.d.ts.map +1 -1
  336. package/dist/shared/io/json.js +2 -1
  337. package/dist/shared/io/json.js.map +1 -1
  338. package/dist/shared/io/repoRoot.d.ts +45 -0
  339. package/dist/shared/io/repoRoot.d.ts.map +1 -1
  340. package/dist/shared/io/repoRoot.js +91 -1
  341. package/dist/shared/io/repoRoot.js.map +1 -1
  342. package/dist/shared/loopCorePaths.d.ts.map +1 -1
  343. package/dist/shared/loopCorePaths.js +1 -4
  344. package/dist/shared/loopCorePaths.js.map +1 -1
  345. package/dist/shared/paths.d.ts +19 -0
  346. package/dist/shared/paths.d.ts.map +1 -0
  347. package/dist/shared/paths.js +23 -0
  348. package/dist/shared/paths.js.map +1 -0
  349. package/dist/shared/reReview/projectionDiff.d.ts +0 -18
  350. package/dist/shared/reReview/projectionDiff.d.ts.map +1 -1
  351. package/dist/shared/reReview/projectionDiff.js +2 -1
  352. package/dist/shared/reReview/projectionDiff.js.map +1 -1
  353. package/dist/shared/sessionConfig.d.ts.map +1 -1
  354. package/dist/shared/sessionConfig.js +9 -24
  355. package/dist/shared/sessionConfig.js.map +1 -1
  356. package/dist/shared/stableStringify.d.ts.map +1 -1
  357. package/dist/shared/stableStringify.js +1 -3
  358. package/dist/shared/stableStringify.js.map +1 -1
  359. package/dist/shared/submission/expectedSubmissions.d.ts +0 -19
  360. package/dist/shared/submission/expectedSubmissions.d.ts.map +1 -1
  361. package/dist/shared/submission/expectedSubmissions.js +23 -6
  362. package/dist/shared/submission/expectedSubmissions.js.map +1 -1
  363. package/dist/shared/submission/hostHandoffCore.d.ts +0 -3
  364. package/dist/shared/submission/hostHandoffCore.d.ts.map +1 -1
  365. package/dist/shared/submission/hostHandoffCore.js +2 -7
  366. package/dist/shared/submission/hostHandoffCore.js.map +1 -1
  367. package/dist/shared/submission/submissionIdentity.d.ts.map +1 -1
  368. package/dist/shared/submission/submissionIdentity.js +7 -8
  369. package/dist/shared/submission/submissionIdentity.js.map +1 -1
  370. package/dist/shared/submission/submissionScan.d.ts +86 -0
  371. package/dist/shared/submission/submissionScan.d.ts.map +1 -0
  372. package/dist/shared/submission/submissionScan.js +93 -0
  373. package/dist/shared/submission/submissionScan.js.map +1 -0
  374. package/dist/shared/types/obligationLedger.d.ts +7 -3
  375. package/dist/shared/types/obligationLedger.d.ts.map +1 -1
  376. package/dist/shared/types/obligationLedger.js +9 -37
  377. package/dist/shared/types/obligationLedger.js.map +1 -1
  378. package/dist/shared/validation/findingsReport.d.ts.map +1 -1
  379. package/dist/shared/validation/findingsReport.js +2 -1
  380. package/dist/shared/validation/findingsReport.js.map +1 -1
  381. package/dist/shared/validation/schemaFailure.d.ts +9 -0
  382. package/dist/shared/validation/schemaFailure.d.ts.map +1 -0
  383. package/dist/shared/validation/schemaFailure.js +15 -0
  384. package/dist/shared/validation/schemaFailure.js.map +1 -0
  385. package/package.json +5 -2
  386. package/skills/audit-code/audit-code.prompt.md +5 -2
  387. package/wrapper/audit-code-wrapper-install-hosts.mjs +8 -3
  388. package/wrapper/audit-code-wrapper-lib.mjs +10 -3
  389. package/wrapper/installer-verb-help.mjs +3 -1
  390. package/wrapper/remediate-code-wrapper-install-hosts.mjs +8 -3
  391. package/wrapper/repo-root.mjs +80 -0
@@ -1,6 +1,7 @@
1
1
  import { severityRank, confidenceRank } from "../types/lens.js";
2
2
  import { findingIdentityKey } from "../findingIdentitySignature.js";
3
3
  import { wordJaccard, filePathOverlap, primaryPath } from "../findingSimilarity.js";
4
+ import { compareCodeUnits } from "../compareCodeUnits.js";
4
5
  /**
5
6
  * PUBLISHED PRECONDITION CONTRACT — artifact:cross-lens-dedup-core
6
7
  *
@@ -23,16 +24,19 @@ import { wordJaccard, filePathOverlap, primaryPath } from "../findingSimilarity.
23
24
  * violated, recorded here so a caller-side check has something to test
24
25
  * against. This is NOT a promise that this module will start enforcing it:
25
26
  * - A missing/unrecognized `policy.categoryGate` (neither `"soft"` nor
26
- * `"hard"`) silently falls through in the PERMISSIVE direction: the
27
- * hard-gate check in `crossLensDedupe` only special-cases the literal
28
- * string `"hard"`, so anything else (including `undefined`) never blocks
29
- * a cross-category pair it falls through to the exact/fuzzy match layers
30
- * as if the gate were absent.
27
+ * `"hard"`) silently falls through in the PERMISSIVE direction, in BOTH
28
+ * places `crossLensDedupe` consults it. The hard-gate refusal lives in the
29
+ * shared `compareFindingPair` and only special-cases the literal string
30
+ * `"hard"`, so anything else (including `undefined`) never blocks a
31
+ * cross-category pair; and the `PairMatchPolicy.titleThreshold`
32
+ * `crossLensDedupe` derives only special-cases `"soft"`, so an unrecognized
33
+ * value takes the LOWER cross-category title floor (0.4, the same-category
34
+ * one) instead of soft's 0.5.
31
35
  * - A `Finding` missing `affected_files` throws an uncaught TypeError inside
32
36
  * `mergeAffectedFiles` (`survivor.affected_files.map(...)` called on
33
37
  * `undefined`) the first time that finding is absorbed or absorbs another.
34
38
  * - Two input findings sharing the same `id` (precondition 2 violated) yield
35
- * an UNSPECIFIED merge-chain target once `crossLensDedupe`'s post-loop
39
+ * an UNSPECIFIED merge-chain target once `crossLensDedupe`'s post-fold
36
40
  * chain-collapse runs: the `visited`-guard there stops the walk instead of
37
41
  * spinning forever on the resulting id cycle, but which of the colliding
38
42
  * ids the chain resolves to is not a contract this module makes.
@@ -45,16 +49,29 @@ import { wordJaccard, filePathOverlap, primaryPath } from "../findingSimilarity.
45
49
  * whoever implements the caller-side check, not settled by this module.
46
50
  */
47
51
  /**
48
- * ONE shared finding-dedup core. There is no auditor-dedup vs remediator-dedup
49
- * there is one skeleton (group-by-primary-path pairwise cross-lens compare
50
- * similarity gate → survivor selection → absorb), and each orchestrator DRAWS it
51
- * with its own POLICY. Audit draws it read-only for the report (mutate survivors
52
- * in place, grounding-precedence merge, cross-category merge allowed at a higher
53
- * threshold); remediate draws it for the auto-apply block machine (clone survivors,
54
- * hard category gate, exact-identity short-circuit, a mergeMap its blocks consume).
55
- * Single-sourcing the skeleton is what stops the two from silently drifting on the
56
- * grouping / thresholds / survivor rule; the divergences are the explicit named
57
- * policy knobs below, not forked code.
52
+ * ONE shared finding-dedup core. There is no auditor-dedup vs remediator-dedup,
53
+ * and no cross-lens-fold vs same-lens-fold there is one skeleton
54
+ * (group → pairwise compare → similarity gate → survivor selection → absorb
55
+ * remove), and every pass DRAWS it with its own POLICY. Two seams carry the whole
56
+ * divergence:
57
+ *
58
+ * - `collapseFindingGroups` the survivor FOLD (grouping, the pair scan, the
59
+ * mid-scan absorbed-survivor conservation guard, absorption, removal, and the
60
+ * mutate-vs-clone survivor axis). Drawn by `crossLensDedupe` AND
61
+ * `sameLensDedupe`.
62
+ * - `compareFindingPair` — the one pair decision, parameterized by
63
+ * `PairMatchPolicy` (lens eligibility, category gate, title floors, what
64
+ * counts as the same place).
65
+ *
66
+ * Audit draws the core read-only for the report (mutate survivors in place,
67
+ * grounding-precedence merge, cross-category merge allowed at a higher threshold);
68
+ * remediate draws it for the auto-apply block machine (clone survivors, hard
69
+ * category gate, exact-identity short-circuit, a mergeMap its blocks consume).
70
+ * Single-sourcing the skeleton is what stops them drifting on the grouping /
71
+ * thresholds / survivor rule; the divergences are the named policy fields, not
72
+ * forked code. What stays per-draw is only what is genuinely terminal: cross-lens
73
+ * merge-chain closure, dispositions, and the evidence-conservation check, all
74
+ * post-fold phases in `crossLensDedupe`.
58
75
  */
59
76
  /**
60
77
  * Consistent lens/category text normalization for BOTH draws (trim + lowercase).
@@ -96,7 +113,7 @@ export function mergeAffectedFiles(survivor, absorbed, sort) {
96
113
  }
97
114
  }
98
115
  if (sort) {
99
- survivor.affected_files.sort((a, b) => a.path.localeCompare(b.path) || (a.line_start ?? 0) - (b.line_start ?? 0));
116
+ survivor.affected_files.sort((a, b) => compareCodeUnits(a.path, b.path) || (a.line_start ?? 0) - (b.line_start ?? 0));
100
117
  }
101
118
  }
102
119
  /**
@@ -131,50 +148,104 @@ function discriminatingIdentityKey(finding) {
131
148
  return key;
132
149
  }
133
150
  /**
134
- * Collapse cross-lens duplicate findings within each primary-path group. Only pairs
135
- * of DIFFERENT lenses are considered (same-lens dedup is a separate pass); the
136
- * winner by severity-then-confidence absorbs the loser's files/evidence. All policy
137
- * divergence between the two orchestrators is expressed through `policy`.
151
+ * Do two findings describe the same place? `lineRangeOverlaps` is the finer of
152
+ * the two "same place" signals: the same file AND touching line ranges, with an
153
+ * explicit sentinel two findings that both omit line information (both ends
154
+ * degenerate to 0) are treated as overlapping rather than as disjoint.
138
155
  */
139
- export function crossLensDedupe(findings, policy) {
140
- const evidenceByInputId = new Map();
141
- if (policy.idDiscipline === "global") {
142
- for (const finding of findings) {
143
- if (finding.id.trim().length === 0) {
144
- throw new TypeError("Finding ids must be non-empty before deduplication.");
145
- }
146
- if (evidenceByInputId.has(finding.id)) {
147
- throw new TypeError(`Duplicate finding id "${finding.id}" makes terminal dedupe disposition ambiguous.`);
148
- }
149
- evidenceByInputId.set(finding.id, [...(finding.evidence ?? [])]);
156
+ function lineRangeOverlaps(a, b) {
157
+ const aFile = a.affected_files[0];
158
+ const bFile = b.affected_files[0];
159
+ if (!aFile || !bFile)
160
+ return false;
161
+ if (aFile.path !== bFile.path)
162
+ return false;
163
+ const aStart = aFile.line_start ?? 0;
164
+ const aEnd = aFile.line_end ?? aStart;
165
+ const bStart = bFile.line_start ?? 0;
166
+ const bEnd = bFile.line_end ?? bStart;
167
+ if (aEnd === 0 && bEnd === 0)
168
+ return true;
169
+ return aStart <= bEnd && bStart <= aEnd;
170
+ }
171
+ /**
172
+ * The ONE pairwise comparison: do these two findings merge, and which side
173
+ * survives? Both `crossLensDedupe` and `sameLensDedupe` route their pair decision
174
+ * through here, each with its own `PairMatchPolicy`.
175
+ *
176
+ * Survivor selection is severity-then-confidence with `aConf >= bConf`, so a
177
+ * fully-tied pair keeps the FIRST-SEEN finding — input order is the tiebreak, and
178
+ * that is a pinned property, not an accident.
179
+ */
180
+ function compareFindingPair(a, b, policy) {
181
+ if (policy.lensGate === "different" && normalizeText(a.lens) === normalizeText(b.lens)) {
182
+ return { matched: false, keepA: false };
183
+ }
184
+ const catMatch = normalizeText(a.category) === normalizeText(b.category);
185
+ // Hard category gate applies ahead of both exact-match and fuzzy layers
186
+ if (policy.categoryGate === "hard" && !catMatch) {
187
+ return { matched: false, keepA: false };
188
+ }
189
+ let matched = false;
190
+ if (policy.exactIdentityShortCircuit) {
191
+ const keyA = discriminatingIdentityKey(a);
192
+ const keyB = discriminatingIdentityKey(b);
193
+ matched = keyA !== null && keyA === keyB;
194
+ }
195
+ if (!matched) {
196
+ const titleSim = wordJaccard(a.title, b.title);
197
+ const threshold = catMatch
198
+ ? policy.titleThreshold.sameCategory
199
+ : policy.titleThreshold.crossCategory;
200
+ if (titleSim < threshold) {
201
+ return { matched: false, keepA: false };
202
+ }
203
+ const sameProblemSite = (policy.overlapGate === "line-or-file" && lineRangeOverlaps(a, b)) ||
204
+ filePathOverlap(a, b) >= 0.5;
205
+ if (!sameProblemSite) {
206
+ return { matched: false, keepA: false };
150
207
  }
208
+ matched = true;
151
209
  }
210
+ // Rank by severity then confidence
211
+ const aSev = severityRank(a.severity);
212
+ const bSev = severityRank(b.severity);
213
+ const aConf = confidenceRank(a.confidence);
214
+ const bConf = confidenceRank(b.confidence);
215
+ const keepA = aSev > bSev || (aSev === bSev && aConf >= bConf);
216
+ return { matched, keepA };
217
+ }
218
+ /**
219
+ * The ONE finding-survivor fold. There is no auditor-fold and remediator-fold:
220
+ * group → pairwise scan → similarity gate → survivor selection → absorb → remove
221
+ * is one skeleton, and both dedup passes DRAW it with their own policy.
222
+ *
223
+ * Removal and clone bookkeeping are BOTH keyed by the caller's ORIGINAL Finding
224
+ * objects (group slots are never rewritten): `removed` holds absorbed originals,
225
+ * and `cloneOf` maps each original survivor to its single canonical clone (clone
226
+ * mode only). Keying by originals is what guarantees conservation — a caller's
227
+ * final filter over its input array sees exactly the objects this fold marked, so
228
+ * a finding is emitted exactly once XOR recorded as absorbed, never both, never
229
+ * neither.
230
+ *
231
+ * ⚠ The clone/canonical accumulation is MID-FOLD state, not a post-fold phase:
232
+ * `matchPair` and `absorbFinding` both read the CANONICAL views, so a later pair
233
+ * compares (and absorbs) everything an earlier merge already accumulated. Lifting
234
+ * it out of the fold changes merge outcomes.
235
+ */
236
+ function collapseFindingGroups(findings, policy) {
152
237
  const groups = new Map();
153
238
  for (const finding of findings) {
154
- const key = primaryPath(finding);
239
+ const key = policy.groupKey(finding);
155
240
  const group = groups.get(key);
156
241
  if (group)
157
242
  group.push(finding);
158
243
  else
159
244
  groups.set(key, [finding]);
160
245
  }
161
- /**
162
- * Removal and clone bookkeeping are BOTH keyed by the caller's ORIGINAL Finding
163
- * objects (group slots are never rewritten): `removed` holds absorbed originals,
164
- * and `cloneOf` maps each original survivor to its single canonical clone (clone
165
- * mode only). Keying by originals is what guarantees conservation — the final
166
- * filter over `findings` sees exactly the objects the loop marked, so a finding
167
- * is emitted exactly once XOR recorded in `mergeMap`, never both, never neither.
168
- */
169
246
  const removed = new Set();
170
- const mergeMap = new Map();
171
247
  const cloneOf = new Map();
172
- /** The accumulated view of a finding: its canonical clone when one exists. */
173
248
  const canonical = (f) => cloneOf.get(f) ?? f;
174
- const absorbOpts = {
175
- mergeGrounding: policy.mergeGrounding,
176
- sortAffectedFiles: policy.sortAffectedFiles,
177
- };
178
249
  for (const group of groups.values()) {
179
250
  if (group.length < 2)
180
251
  continue;
@@ -183,8 +254,11 @@ export function crossLensDedupe(findings, policy) {
183
254
  continue;
184
255
  for (let j = i + 1; j < group.length; j++) {
185
256
  // The i-slot finding may have been absorbed mid-scan (!keepA below): an
186
- // absorbed finding never acts as a survivor, so every remaining (i, j)
187
- // pair is dead stop unconditionally (not policy-gated; conservation).
257
+ // absorbed finding never acts as a survivor again it would re-absorb
258
+ // data already unioned into ITS absorber, and the emission filter then
259
+ // silently drops everything it won. Every remaining (i, j) pair is dead,
260
+ // so stop unconditionally (conservation, never a policy knob). Checked
261
+ // BEFORE the j-slot skip.
188
262
  if (removed.has(group[i]))
189
263
  break;
190
264
  if (removed.has(group[j]))
@@ -195,13 +269,7 @@ export function crossLensDedupe(findings, policy) {
195
269
  // lives on the survivor's single clone, never on the caller's object.
196
270
  const a = canonical(originalA);
197
271
  const b = canonical(originalB);
198
- // crossLensDedupe only pairs findings of DIFFERENT lenses
199
- if (normalizeText(a.lens) === normalizeText(b.lens))
200
- continue;
201
- const comparison = compareFindingPair(a, b, {
202
- categoryGate: policy.categoryGate,
203
- exactIdentityShortCircuit: policy.exactIdentityShortCircuit,
204
- });
272
+ const comparison = policy.matchPair(a, b);
205
273
  if (!comparison.matched)
206
274
  continue;
207
275
  const keepA = comparison.keepA;
@@ -231,16 +299,59 @@ export function crossLensDedupe(findings, policy) {
231
299
  else {
232
300
  survivor = survivorOriginal;
233
301
  }
234
- absorbFinding(survivor, absorbed, absorbOpts);
302
+ absorbFinding(survivor, absorbed, policy.absorb);
235
303
  removed.add(absorbedOriginal);
236
- mergeMap.set(absorbedOriginal.id, survivor.id);
237
- policy.onMerge?.({ absorbed, survivor });
238
- // If the i-slot finding was just absorbed (!keepA), stop the inner loop.
239
- if (policy.breakOnAbsorbedSurvivor && !keepA)
240
- break;
304
+ policy.onAbsorb?.({ absorbedOriginal, absorbed, survivor });
241
305
  }
242
306
  }
243
307
  }
308
+ return { removed, canonical };
309
+ }
310
+ /**
311
+ * Collapse cross-lens duplicate findings within each primary-path group. Only pairs
312
+ * of DIFFERENT lenses are considered (same-lens dedup is a separate pass); the
313
+ * winner by severity-then-confidence absorbs the loser's files/evidence. All policy
314
+ * divergence between the two orchestrators is expressed through `policy`.
315
+ */
316
+ export function crossLensDedupe(findings, policy) {
317
+ const evidenceByInputId = new Map();
318
+ if (policy.idDiscipline === "global") {
319
+ for (const finding of findings) {
320
+ if (finding.id.trim().length === 0) {
321
+ throw new TypeError("Finding ids must be non-empty before deduplication.");
322
+ }
323
+ if (evidenceByInputId.has(finding.id)) {
324
+ throw new TypeError(`Duplicate finding id "${finding.id}" makes terminal dedupe disposition ambiguous.`);
325
+ }
326
+ evidenceByInputId.set(finding.id, [...(finding.evidence ?? [])]);
327
+ }
328
+ }
329
+ const matchPolicy = {
330
+ lensGate: "different",
331
+ categoryGate: policy.categoryGate,
332
+ exactIdentityShortCircuit: policy.exactIdentityShortCircuit,
333
+ // The soft gate keeps cross-category merges but raises their title floor.
334
+ // Under the hard gate a cross-category pair is refused before any floor is
335
+ // consulted, so both entries are the same number there.
336
+ titleThreshold: policy.categoryGate === "soft"
337
+ ? { sameCategory: 0.4, crossCategory: 0.5 }
338
+ : { sameCategory: 0.4, crossCategory: 0.4 },
339
+ overlapGate: "file",
340
+ };
341
+ const mergeMap = new Map();
342
+ const { removed, canonical } = collapseFindingGroups(findings, {
343
+ groupKey: primaryPath,
344
+ matchPair: (a, b) => compareFindingPair(a, b, matchPolicy),
345
+ survivorMutation: policy.survivorMutation,
346
+ absorb: {
347
+ mergeGrounding: policy.mergeGrounding,
348
+ sortAffectedFiles: policy.sortAffectedFiles,
349
+ },
350
+ onAbsorb: ({ absorbedOriginal, absorbed, survivor }) => {
351
+ mergeMap.set(absorbedOriginal.id, survivor.id);
352
+ policy.onMerge?.({ absorbed, survivor });
353
+ },
354
+ });
244
355
  // Preserve the direct edges before terminal collapse so the disposition map can
245
356
  // explain B→A→C rather than reducing all provenance to B→C.
246
357
  const directMergeMap = new Map(mergeMap);
@@ -319,42 +430,6 @@ export function crossLensDedupe(findings, policy) {
319
430
  dispositionById,
320
431
  };
321
432
  }
322
- /**
323
- * Perform pairwise comparison of two findings using similarity metrics.
324
- * Returns whether they match and which should be the survivor.
325
- * This logic is shared by both crossLensDedupe and sameLensDedupe.
326
- */
327
- function compareFindingPair(a, b, options) {
328
- const catMatch = normalizeText(a.category) === normalizeText(b.category);
329
- // Hard category gate applies ahead of both exact-match and fuzzy layers
330
- if (options.categoryGate === "hard" && !catMatch) {
331
- return { matched: false, keepA: false };
332
- }
333
- let matched = false;
334
- if (options.exactIdentityShortCircuit) {
335
- const keyA = discriminatingIdentityKey(a);
336
- const keyB = discriminatingIdentityKey(b);
337
- matched = keyA !== null && keyA === keyB;
338
- }
339
- if (!matched) {
340
- const titleSim = wordJaccard(a.title, b.title);
341
- const threshold = options.categoryGate === "soft" ? (catMatch ? 0.4 : 0.5) : 0.4;
342
- if (titleSim < threshold) {
343
- return { matched: false, keepA: false };
344
- }
345
- if (filePathOverlap(a, b) < 0.5) {
346
- return { matched: false, keepA: false };
347
- }
348
- matched = true;
349
- }
350
- // Rank by severity then confidence
351
- const aSev = severityRank(a.severity);
352
- const bSev = severityRank(b.severity);
353
- const aConf = confidenceRank(a.confidence);
354
- const bConf = confidenceRank(b.confidence);
355
- const keepA = aSev > bSev || (aSev === bSev && aConf >= bConf);
356
- return { matched, keepA };
357
- }
358
433
  /**
359
434
  * File-independent finding identity for exact re-emission collapse: the same logical
360
435
  * finding (normalized lens + category + title) re-emitted across files / units /
@@ -371,78 +446,37 @@ export function findingReEmissionKey(finding) {
371
446
  normalizeText(finding.title),
372
447
  ].join("|");
373
448
  }
374
- function lineRangeOverlaps(a, b) {
375
- const aFile = a.affected_files[0];
376
- const bFile = b.affected_files[0];
377
- if (!aFile || !bFile)
378
- return false;
379
- if (aFile.path !== bFile.path)
380
- return false;
381
- const aStart = aFile.line_start ?? 0;
382
- const aEnd = aFile.line_end ?? aStart;
383
- const bStart = bFile.line_start ?? 0;
384
- const bEnd = bFile.line_end ?? bStart;
385
- if (aEnd === 0 && bEnd === 0)
386
- return true;
387
- return aStart <= bEnd && bStart <= aEnd;
388
- }
449
+ /**
450
+ * The same-lens draw's matching policy. The group key already fixes the lens, so
451
+ * there is no lens condition; the title floors sit BELOW the cross-lens ones
452
+ * (two findings one lens raised about one place are more often one defect), and
453
+ * "the same place" is additionally satisfied by an overlapping line range.
454
+ */
455
+ const SAME_LENS_MATCH_POLICY = {
456
+ lensGate: "any",
457
+ // `soft`, not "no category gate": a category difference is not fatal here, it
458
+ // only raises the title floor.
459
+ categoryGate: "soft",
460
+ exactIdentityShortCircuit: false,
461
+ titleThreshold: { sameCategory: 0.35, crossCategory: 0.45 },
462
+ overlapGate: "line-or-file",
463
+ };
389
464
  /**
390
465
  * Same-lens dedup: within each (lens, primary-path) group, collapse fuzzily-similar
391
466
  * findings (title Jaccard with a category-lowered threshold, plus line-range OR file
392
467
  * overlap), the higher sev/conf survivor absorbing the loser in place with grounding-
393
- * precedence + sorted files. A core capability only audit currently draws (remediate
394
- * consumes findings the auditor already collapsed), single-sourced here so the whole
395
- * finding-dedup family lives in one place.
468
+ * precedence + sorted files. The audit draw of the shared survivor fold — same
469
+ * skeleton as `crossLensDedupe`, a different `PairMatchPolicy`, mutate-in-place
470
+ * survivors, and no merge record (a human reads the report; nothing consumes an
471
+ * id-keyed same-lens provenance today).
396
472
  */
397
473
  export function sameLensDedupe(findings) {
398
- const groups = new Map();
399
- for (const finding of findings) {
400
- const key = `${normalizeText(finding.lens)}:${primaryPath(finding)}`;
401
- const group = groups.get(key);
402
- if (group)
403
- group.push(finding);
404
- else
405
- groups.set(key, [finding]);
406
- }
407
- const removed = new Set();
408
- for (const group of groups.values()) {
409
- if (group.length < 2)
410
- continue;
411
- for (let i = 0; i < group.length; i++) {
412
- if (removed.has(group[i]))
413
- continue;
414
- for (let j = i + 1; j < group.length; j++) {
415
- // The i-slot finding may have been absorbed mid-scan (as b of an earlier
416
- // pair): an absorbed finding must never act as a survivor again, or it
417
- // re-absorbs data that was already unioned into ITS absorber and the
418
- // final filter silently drops everything it then wins — the same
419
- // conservation guard crossLensDedupe carries. Checked BEFORE the j-slot
420
- // skip, mirroring that pass.
421
- if (removed.has(group[i]))
422
- break;
423
- if (removed.has(group[j]))
424
- continue;
425
- const a = group[i];
426
- const b = group[j];
427
- // sameLensDedupe has different similarity thresholds than crossLensDedupe
428
- const catMatch = normalizeText(a.category) === normalizeText(b.category);
429
- const titleSim = wordJaccard(a.title, b.title);
430
- const threshold = catMatch ? 0.35 : 0.45;
431
- if (titleSim < threshold)
432
- continue;
433
- if (!lineRangeOverlaps(a, b) && filePathOverlap(a, b) < 0.5)
434
- continue;
435
- const aSev = severityRank(a.severity);
436
- const bSev = severityRank(b.severity);
437
- const aConf = confidenceRank(a.confidence);
438
- const bConf = confidenceRank(b.confidence);
439
- const keepA = aSev > bSev || (aSev === bSev && aConf >= bConf);
440
- const [survivor, absorbed] = keepA ? [a, b] : [b, a];
441
- absorbFinding(survivor, absorbed, { mergeGrounding: true, sortAffectedFiles: true });
442
- removed.add(absorbed);
443
- }
444
- }
445
- }
474
+ const { removed } = collapseFindingGroups(findings, {
475
+ groupKey: (finding) => `${normalizeText(finding.lens)}:${primaryPath(finding)}`,
476
+ matchPair: (a, b) => compareFindingPair(a, b, SAME_LENS_MATCH_POLICY),
477
+ survivorMutation: "mutate",
478
+ absorb: { mergeGrounding: true, sortAffectedFiles: true },
479
+ });
446
480
  return findings.filter((f) => !removed.has(f));
447
481
  }
448
482
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dedupe.js","sourceRoot":"","sources":["../../../src/shared/findings/dedupe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dedupe.js","sourceRoot":"","sources":["../../../src/shared/findings/dedupe.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"frictionRecord.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/frictionRecord.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frictionRecord.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/frictionRecord.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { join } from "node:path";
2
+ import { compareCodeUnits } from "../compareCodeUnits.js";
2
3
  import { FRICTION_CAPTURE_SCHEMA_VERSION, frictionCaptureDir, frictionCapturePath, listFrictionRecordFilenames, sanitizeRunId, } from "../io/frictionCapture.js";
3
4
  import { readOptionalJsonFile, writeJsonFile } from "../io/json.js";
4
5
  import { withFileLock } from "../io/fileLock.js";
@@ -75,7 +76,7 @@ function normalizeRunRefs(stored) {
75
76
  const refs = Array.isArray(stored)
76
77
  ? stored.filter((ref) => typeof ref === "string")
77
78
  : [];
78
- return [...new Set(refs)].sort((left, right) => (left < right ? -1 : left > right ? 1 : 0));
79
+ return [...new Set(refs)].sort(compareCodeUnits);
79
80
  }
80
81
  /** {@link normalizeRunRefs} of the stored array unioned with one newly-supplied id. */
81
82
  function mergeRunRefs(stored, added) {
@@ -188,6 +189,6 @@ export async function findFrictionRecordsByRunLink(artifactsDir, link) {
188
189
  });
189
190
  }
190
191
  // Code-unit order on the record's own key: stable, content-derived, locale-free.
191
- return found.sort((left, right) => left.run_id < right.run_id ? -1 : left.run_id > right.run_id ? 1 : 0);
192
+ return found.sort((left, right) => compareCodeUnits(left.run_id, right.run_id));
192
193
  }
193
194
  //# sourceMappingURL=frictionRecord.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frictionRecord.js","sourceRoot":"","sources":["../../../src/shared/friction/frictionRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAKL,+BAA+B,EAC/B,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB,EAAE,sFAAsF;IAC7G,oBAAoB,EAAE,kFAAkF;IACxG,qBAAqB,EAAE,2EAA2E;CAC1F,CAAC;AAGX,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3D,CAAC;AACJ,CAAC;AA2GD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,KAAa;IAClE,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,iFAAiF;AACjF,SAAS,WAAW,CAClB,KAAa,EACb,IAAqC;IAErC,OAAO;QACL,cAAc,EAAE,+BAA+B;QAC/C,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,gFAAgF;QAChF,oEAAoE;QACpE,YAAY,EAAE,EAAE;QAChB,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;QAChE,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,uFAAuF;AACvF,SAAS,YAAY,CAAC,MAAe,EAAE,KAAgC;IACrE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvF,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,MAA+B,EAC/B,KAAwC;IAExC,OAAO;QACL,GAAG,MAAM;QACT,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC;QACnE,gBAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC;KAChF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,KAAa,EACb,MAAoE,EACpE,OAAwC,gBAAgB,EACxD,KAA6B;IAE7B,OAAO,YAAY,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CACzC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,CACzC,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,KAAa,EACb,KAA4B,EAC5B,OAAwC,gBAAgB;IAExD,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;IAC/E,CAAC;AACH,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,YAAoB,EACpB,IAA+B;IAE/B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,oFAAoF;QACpF,kFAAkF;QAClF,IAAI,MAAkD,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,oBAAoB,CAA0B,IAAI,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC3D,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjE,MAAM,OAAO,GACX,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI;YACJ,YAAY,EAAE,UAAU;YACxB,gBAAgB,EAAE,cAAc;SACjC,CAAC,CAAC;IACL,CAAC;IACD,iFAAiF;IACjF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACrE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"frictionRecord.js","sourceRoot":"","sources":["../../../src/shared/friction/frictionRecord.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/shared/friction/triage.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { frictionCapturePath, } from '../io/frictionCapture.js';
2
2
  import { AGENT_FEEDBACK_FILENAME, parseReflectionsNdjson, } from '../agentReflections.js';
3
3
  import { readOptionalJsonFile, readOptionalTextFile } from '../io/json.js';
4
4
  import { FRICTION_CATEGORIES, appendFrictionUnderLock, findFrictionRecordsByRunLink, isFrictionCategory, } from './frictionRecord.js';
5
+ import { compareCodeUnits } from '../compareCodeUnits.js';
5
6
  export { FRICTION_CATEGORIES, appendFrictionUnderLock, frictionLockPath, isFrictionCategory, } from './frictionRecord.js';
6
7
  /**
7
8
  * O1 end-of-run friction TRIAGE — single-sourced for BOTH orchestrators so the
@@ -152,7 +153,7 @@ export function deriveFrictionObservations(frictions) {
152
153
  }
153
154
  derived.sort((a, b) => FRICTION_CATEGORIES.indexOf(a.category) -
154
155
  FRICTION_CATEGORIES.indexOf(b.category) ||
155
- a.artifact.localeCompare(b.artifact));
156
+ compareCodeUnits(a.artifact, b.artifact));
156
157
  return derived;
157
158
  }
158
159
  /**