projscan 4.3.0 → 4.4.0

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 (684) hide show
  1. package/CONTRIBUTING.md +5 -1
  2. package/PRIVACY.md +1 -0
  3. package/README.md +307 -234
  4. package/THIRD-PARTY-NOTICES.md +31 -31
  5. package/dist/analyzers/architectureCheck.js.map +1 -1
  6. package/dist/analyzers/crossPackageImportCheck.js +3 -2
  7. package/dist/analyzers/crossPackageImportCheck.js.map +1 -1
  8. package/dist/analyzers/deadCodeCheck.js +10 -2
  9. package/dist/analyzers/deadCodeCheck.js.map +1 -1
  10. package/dist/analyzers/dependencyRiskCheck.js +1 -5
  11. package/dist/analyzers/dependencyRiskCheck.js.map +1 -1
  12. package/dist/analyzers/eslintCheck.js +3 -1
  13. package/dist/analyzers/eslintCheck.js.map +1 -1
  14. package/dist/analyzers/prettierCheck.js +16 -3
  15. package/dist/analyzers/prettierCheck.js.map +1 -1
  16. package/dist/analyzers/pythonDependencyRiskCheck.js +4 -17
  17. package/dist/analyzers/pythonDependencyRiskCheck.js.map +1 -1
  18. package/dist/analyzers/pythonLinterCheck.js +2 -12
  19. package/dist/analyzers/pythonLinterCheck.js.map +1 -1
  20. package/dist/analyzers/securityCheck.js +26 -9
  21. package/dist/analyzers/securityCheck.js.map +1 -1
  22. package/dist/analyzers/supplyChainCheck.js +6 -2
  23. package/dist/analyzers/supplyChainCheck.js.map +1 -1
  24. package/dist/analyzers/testCheck.js +10 -1
  25. package/dist/analyzers/testCheck.js.map +1 -1
  26. package/dist/analyzers/unusedDependencyCheck.js +8 -8
  27. package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
  28. package/dist/cli/_shared.d.ts +2 -1
  29. package/dist/cli/_shared.js +14 -2
  30. package/dist/cli/_shared.js.map +1 -1
  31. package/dist/cli/commands/agentBrief.js +7 -1
  32. package/dist/cli/commands/agentBrief.js.map +1 -1
  33. package/dist/cli/commands/analyze.js.map +1 -1
  34. package/dist/cli/commands/applyFix.js +1 -1
  35. package/dist/cli/commands/applyFix.js.map +1 -1
  36. package/dist/cli/commands/audit.js +4 -2
  37. package/dist/cli/commands/audit.js.map +1 -1
  38. package/dist/cli/commands/badge.js.map +1 -1
  39. package/dist/cli/commands/bugHunt.js +2 -2
  40. package/dist/cli/commands/bugHunt.js.map +1 -1
  41. package/dist/cli/commands/ci.js.map +1 -1
  42. package/dist/cli/commands/claim.js +3 -3
  43. package/dist/cli/commands/claim.js.map +1 -1
  44. package/dist/cli/commands/collision.js +4 -2
  45. package/dist/cli/commands/collision.js.map +1 -1
  46. package/dist/cli/commands/coordinate.js +4 -2
  47. package/dist/cli/commands/coordinate.js.map +1 -1
  48. package/dist/cli/commands/coupling.js.map +1 -1
  49. package/dist/cli/commands/coverage.js.map +1 -1
  50. package/dist/cli/commands/dataflow.js.map +1 -1
  51. package/dist/cli/commands/dependencies.js +1 -1
  52. package/dist/cli/commands/dependencies.js.map +1 -1
  53. package/dist/cli/commands/diff.js.map +1 -1
  54. package/dist/cli/commands/doctor.js.map +1 -1
  55. package/dist/cli/commands/dogfood.js +30 -5
  56. package/dist/cli/commands/dogfood.js.map +1 -1
  57. package/dist/cli/commands/evidencePack.js.map +1 -1
  58. package/dist/cli/commands/explainIssue.js +1 -1
  59. package/dist/cli/commands/explainIssue.js.map +1 -1
  60. package/dist/cli/commands/feedback.js +19 -5
  61. package/dist/cli/commands/feedback.js.map +1 -1
  62. package/dist/cli/commands/file.js +1 -1
  63. package/dist/cli/commands/file.js.map +1 -1
  64. package/dist/cli/commands/fix.js.map +1 -1
  65. package/dist/cli/commands/fixSuggest.js +12 -4
  66. package/dist/cli/commands/fixSuggest.js.map +1 -1
  67. package/dist/cli/commands/hotspots.js.map +1 -1
  68. package/dist/cli/commands/impact.js +1 -1
  69. package/dist/cli/commands/impact.js.map +1 -1
  70. package/dist/cli/commands/init.js +13 -5
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/installHook.js +2 -2
  73. package/dist/cli/commands/installHook.js.map +1 -1
  74. package/dist/cli/commands/mcp.js.map +1 -1
  75. package/dist/cli/commands/memory.js +5 -2
  76. package/dist/cli/commands/memory.js.map +1 -1
  77. package/dist/cli/commands/mergeRisk.js +1 -1
  78. package/dist/cli/commands/mergeRisk.js.map +1 -1
  79. package/dist/cli/commands/missionProof.js +422 -3
  80. package/dist/cli/commands/missionProof.js.map +1 -1
  81. package/dist/cli/commands/outdated.js +1 -1
  82. package/dist/cli/commands/outdated.js.map +1 -1
  83. package/dist/cli/commands/plugin.js +10 -6
  84. package/dist/cli/commands/plugin.js.map +1 -1
  85. package/dist/cli/commands/prDiff.js +1 -1
  86. package/dist/cli/commands/prDiff.js.map +1 -1
  87. package/dist/cli/commands/preflight.js +1 -5
  88. package/dist/cli/commands/preflight.js.map +1 -1
  89. package/dist/cli/commands/privacyCheck.js +3 -1
  90. package/dist/cli/commands/privacyCheck.js.map +1 -1
  91. package/dist/cli/commands/qualityScorecard.js.map +1 -1
  92. package/dist/cli/commands/recipes.js.map +1 -1
  93. package/dist/cli/commands/regressionPlan.js.map +1 -1
  94. package/dist/cli/commands/releaseTrain.js.map +1 -1
  95. package/dist/cli/commands/review.js +1 -1
  96. package/dist/cli/commands/review.js.map +1 -1
  97. package/dist/cli/commands/route.js.map +1 -1
  98. package/dist/cli/commands/search.js +5 -2
  99. package/dist/cli/commands/search.js.map +1 -1
  100. package/dist/cli/commands/semanticGraph.js.map +1 -1
  101. package/dist/cli/commands/session.js +2 -2
  102. package/dist/cli/commands/session.js.map +1 -1
  103. package/dist/cli/commands/start.js +3 -1177
  104. package/dist/cli/commands/start.js.map +1 -1
  105. package/dist/cli/commands/startAction.d.ts +36 -0
  106. package/dist/cli/commands/startAction.js +70 -0
  107. package/dist/cli/commands/startAction.js.map +1 -0
  108. package/dist/cli/commands/startConsole.d.ts +7 -0
  109. package/dist/cli/commands/startConsole.js +309 -0
  110. package/dist/cli/commands/startConsole.js.map +1 -0
  111. package/dist/cli/commands/startMissionBundle.d.ts +41 -0
  112. package/dist/cli/commands/startMissionBundle.js +645 -0
  113. package/dist/cli/commands/startMissionBundle.js.map +1 -0
  114. package/dist/cli/commands/startOutput.d.ts +31 -0
  115. package/dist/cli/commands/startOutput.js +232 -0
  116. package/dist/cli/commands/startOutput.js.map +1 -0
  117. package/dist/cli/commands/startShortcuts.d.ts +26 -0
  118. package/dist/cli/commands/startShortcuts.js +117 -0
  119. package/dist/cli/commands/startShortcuts.js.map +1 -0
  120. package/dist/cli/commands/telemetry.js +2 -1
  121. package/dist/cli/commands/telemetry.js.map +1 -1
  122. package/dist/cli/commands/trial.js +19 -4
  123. package/dist/cli/commands/trial.js.map +1 -1
  124. package/dist/cli/commands/understand.js +3 -1
  125. package/dist/cli/commands/understand.js.map +1 -1
  126. package/dist/cli/commands/upgrade.js.map +1 -1
  127. package/dist/cli/commands/watch.js +1 -1
  128. package/dist/cli/commands/watch.js.map +1 -1
  129. package/dist/cli/commands/workplan.js.map +1 -1
  130. package/dist/cli/commands/workspace.js +1 -1
  131. package/dist/cli/commands/workspace.js.map +1 -1
  132. package/dist/cli/commands/workspaces.js +1 -1
  133. package/dist/cli/commands/workspaces.js.map +1 -1
  134. package/dist/cli/index.js +2 -117
  135. package/dist/cli/index.js.map +1 -1
  136. package/dist/cli/registerCommands.d.ts +4 -0
  137. package/dist/cli/registerCommands.js +125 -0
  138. package/dist/cli/registerCommands.js.map +1 -0
  139. package/dist/core/adoption.d.ts +2 -1
  140. package/dist/core/adoption.js +40 -13
  141. package/dist/core/adoption.js.map +1 -1
  142. package/dist/core/agentBrief.js +19 -6
  143. package/dist/core/agentBrief.js.map +1 -1
  144. package/dist/core/applyFix.js.map +1 -1
  145. package/dist/core/ast.js +30 -19
  146. package/dist/core/ast.js.map +1 -1
  147. package/dist/core/auditRunner.js.map +1 -1
  148. package/dist/core/bugHunt.js +119 -17
  149. package/dist/core/bugHunt.js.map +1 -1
  150. package/dist/core/claims.js +5 -2
  151. package/dist/core/claims.js.map +1 -1
  152. package/dist/core/codeGraph.js +10 -0
  153. package/dist/core/codeGraph.js.map +1 -1
  154. package/dist/core/codeGraphReexports.d.ts +9 -0
  155. package/dist/core/codeGraphReexports.js +59 -0
  156. package/dist/core/codeGraphReexports.js.map +1 -0
  157. package/dist/core/collisionDetector.js +14 -4
  158. package/dist/core/collisionDetector.js.map +1 -1
  159. package/dist/core/coordination.js +4 -6
  160. package/dist/core/coordination.js.map +1 -1
  161. package/dist/core/couplingAnalyzer.d.ts +2 -1
  162. package/dist/core/couplingAnalyzer.js.map +1 -1
  163. package/dist/core/coverageParser.js.map +1 -1
  164. package/dist/core/dataflow.js +11 -2
  165. package/dist/core/dataflow.js.map +1 -1
  166. package/dist/core/dataflowFilters.js +8 -3
  167. package/dist/core/dataflowFilters.js.map +1 -1
  168. package/dist/core/dependencyAnalyzer.js +4 -1
  169. package/dist/core/dependencyAnalyzer.js.map +1 -1
  170. package/dist/core/dogfood.d.ts +1 -1
  171. package/dist/core/dogfood.js +39 -5
  172. package/dist/core/dogfood.js.map +1 -1
  173. package/dist/core/embeddings.js.map +1 -1
  174. package/dist/core/evidenceComment.js +34 -12
  175. package/dist/core/evidenceComment.js.map +1 -1
  176. package/dist/core/explainIssue.js +1 -2
  177. package/dist/core/explainIssue.js.map +1 -1
  178. package/dist/core/feedback.d.ts +1 -1
  179. package/dist/core/feedback.js +15 -4
  180. package/dist/core/feedback.js.map +1 -1
  181. package/dist/core/fileInspector.js +8 -2
  182. package/dist/core/fileInspector.js.map +1 -1
  183. package/dist/core/fixFirst.d.ts +3 -1
  184. package/dist/core/fixFirst.js +17 -4
  185. package/dist/core/fixFirst.js.map +1 -1
  186. package/dist/core/fixSuggest.js +20 -12
  187. package/dist/core/fixSuggest.js.map +1 -1
  188. package/dist/core/frameworkDetector.js +5 -3
  189. package/dist/core/frameworkDetector.js.map +1 -1
  190. package/dist/core/frameworkSources.js +22 -2
  191. package/dist/core/frameworkSources.js.map +1 -1
  192. package/dist/core/graphCorpus.d.ts +1 -1
  193. package/dist/core/graphCorpus.js +9 -1
  194. package/dist/core/graphCorpus.js.map +1 -1
  195. package/dist/core/graphQuery.js.map +1 -1
  196. package/dist/core/hotspotAnalyzer.js +26 -6
  197. package/dist/core/hotspotAnalyzer.js.map +1 -1
  198. package/dist/core/impact.d.ts +1 -1
  199. package/dist/core/impact.js.map +1 -1
  200. package/dist/core/importGraph.js.map +1 -1
  201. package/dist/core/indexCache.js.map +1 -1
  202. package/dist/core/intent.d.ts +1 -1
  203. package/dist/core/intent.js +143 -46
  204. package/dist/core/intent.js.map +1 -1
  205. package/dist/core/intentRouter.js +5467 -445
  206. package/dist/core/intentRouter.js.map +1 -1
  207. package/dist/core/issueEngine.js +1 -1
  208. package/dist/core/issueEngine.js.map +1 -1
  209. package/dist/core/languageDetector.js +1 -9
  210. package/dist/core/languageDetector.js.map +1 -1
  211. package/dist/core/languages/cppAdapter.js +3 -1
  212. package/dist/core/languages/cppAdapter.js.map +1 -1
  213. package/dist/core/languages/cppExports.js +6 -1
  214. package/dist/core/languages/cppExports.js.map +1 -1
  215. package/dist/core/languages/cppFunctions.js +3 -1
  216. package/dist/core/languages/cppFunctions.js.map +1 -1
  217. package/dist/core/languages/csharpAdapter.js.map +1 -1
  218. package/dist/core/languages/csharpFunctions.js +3 -1
  219. package/dist/core/languages/csharpFunctions.js.map +1 -1
  220. package/dist/core/languages/csharpImports.js +2 -1
  221. package/dist/core/languages/csharpImports.js.map +1 -1
  222. package/dist/core/languages/goAdapter.js.map +1 -1
  223. package/dist/core/languages/goExports.js.map +1 -1
  224. package/dist/core/languages/goFunctions.js +9 -3
  225. package/dist/core/languages/goFunctions.js.map +1 -1
  226. package/dist/core/languages/javaAdapter.js +1 -2
  227. package/dist/core/languages/javaAdapter.js.map +1 -1
  228. package/dist/core/languages/javaFunctions.js +6 -2
  229. package/dist/core/languages/javaFunctions.js.map +1 -1
  230. package/dist/core/languages/javascriptAdapter.js +43 -8
  231. package/dist/core/languages/javascriptAdapter.js.map +1 -1
  232. package/dist/core/languages/kotlinAdapter.js +5 -2
  233. package/dist/core/languages/kotlinAdapter.js.map +1 -1
  234. package/dist/core/languages/kotlinFunctions.js +5 -6
  235. package/dist/core/languages/kotlinFunctions.js.map +1 -1
  236. package/dist/core/languages/kotlinImports.js +3 -1
  237. package/dist/core/languages/kotlinImports.js.map +1 -1
  238. package/dist/core/languages/kotlinManifests.js +7 -1
  239. package/dist/core/languages/kotlinManifests.js.map +1 -1
  240. package/dist/core/languages/phpAdapter.js +4 -1
  241. package/dist/core/languages/phpAdapter.js.map +1 -1
  242. package/dist/core/languages/phpExports.js.map +1 -1
  243. package/dist/core/languages/phpFunctions.js +18 -6
  244. package/dist/core/languages/phpFunctions.js.map +1 -1
  245. package/dist/core/languages/phpManifests.js.map +1 -1
  246. package/dist/core/languages/pythonAdapter.js.map +1 -1
  247. package/dist/core/languages/pythonFunctions.js +9 -3
  248. package/dist/core/languages/pythonFunctions.js.map +1 -1
  249. package/dist/core/languages/pythonManifests.js.map +1 -1
  250. package/dist/core/languages/rubyAdapter.js.map +1 -1
  251. package/dist/core/languages/rubyFunctions.js +6 -2
  252. package/dist/core/languages/rubyFunctions.js.map +1 -1
  253. package/dist/core/languages/rustAdapter.js.map +1 -1
  254. package/dist/core/languages/rustFunctions.js +6 -2
  255. package/dist/core/languages/rustFunctions.js.map +1 -1
  256. package/dist/core/languages/swiftAdapter.js +3 -1
  257. package/dist/core/languages/swiftAdapter.js.map +1 -1
  258. package/dist/core/languages/swiftCyclomatic.js.map +1 -1
  259. package/dist/core/languages/swiftFunctions.js +3 -1
  260. package/dist/core/languages/swiftFunctions.js.map +1 -1
  261. package/dist/core/languages/swiftImports.js.map +1 -1
  262. package/dist/core/mergeRisk.js +5 -1
  263. package/dist/core/mergeRisk.js.map +1 -1
  264. package/dist/core/missionOutcome.d.ts +1 -1
  265. package/dist/core/missionOutcome.js +9 -4
  266. package/dist/core/missionOutcome.js.map +1 -1
  267. package/dist/core/missionProof.d.ts +1 -1
  268. package/dist/core/missionProof.js +10 -39
  269. package/dist/core/missionProof.js.map +1 -1
  270. package/dist/core/missionProofBaseline.d.ts +10 -0
  271. package/dist/core/missionProofBaseline.js +137 -0
  272. package/dist/core/missionProofBaseline.js.map +1 -0
  273. package/dist/core/missionProofMarkdown.d.ts +2 -0
  274. package/dist/core/missionProofMarkdown.js +83 -0
  275. package/dist/core/missionProofMarkdown.js.map +1 -0
  276. package/dist/core/missionProofSummary.d.ts +2 -0
  277. package/dist/core/missionProofSummary.js +16 -0
  278. package/dist/core/missionProofSummary.js.map +1 -0
  279. package/dist/core/monorepo.d.ts +1 -1
  280. package/dist/core/monorepo.js +4 -2
  281. package/dist/core/monorepo.js.map +1 -1
  282. package/dist/core/onboarding.d.ts +2 -1
  283. package/dist/core/onboarding.js.map +1 -1
  284. package/dist/core/outdatedDetector.js +5 -1
  285. package/dist/core/outdatedDetector.js.map +1 -1
  286. package/dist/core/ownership.js +3 -1
  287. package/dist/core/ownership.js.map +1 -1
  288. package/dist/core/pathClassifiers.js.map +1 -1
  289. package/dist/core/pluginDx.js +2 -1
  290. package/dist/core/pluginDx.js.map +1 -1
  291. package/dist/core/pluginTrust.js +1 -3
  292. package/dist/core/pluginTrust.js.map +1 -1
  293. package/dist/core/plugins.js +5 -5
  294. package/dist/core/plugins.js.map +1 -1
  295. package/dist/core/prDiff.d.ts +1 -2
  296. package/dist/core/prDiff.js +5 -1
  297. package/dist/core/prDiff.js.map +1 -1
  298. package/dist/core/preflight.js +15 -6
  299. package/dist/core/preflight.js.map +1 -1
  300. package/dist/core/privacy.js.map +1 -1
  301. package/dist/core/qualityScorecard.d.ts +1 -1
  302. package/dist/core/qualityScorecard.js +43 -11
  303. package/dist/core/qualityScorecard.js.map +1 -1
  304. package/dist/core/regressionPlan.js +25 -7
  305. package/dist/core/regressionPlan.js.map +1 -1
  306. package/dist/core/releaseEvidence.js +41 -17
  307. package/dist/core/releaseEvidence.js.map +1 -1
  308. package/dist/core/releaseTrain.js +66 -38
  309. package/dist/core/releaseTrain.js.map +1 -1
  310. package/dist/core/repositoryScanner.js +1 -3
  311. package/dist/core/repositoryScanner.js.map +1 -1
  312. package/dist/core/review.d.ts +1 -1
  313. package/dist/core/review.js +72 -10
  314. package/dist/core/review.js.map +1 -1
  315. package/dist/core/reviewDataflow.js +7 -1
  316. package/dist/core/reviewDataflow.js.map +1 -1
  317. package/dist/core/reviewPublicSurface.d.ts +13 -0
  318. package/dist/core/reviewPublicSurface.js +134 -0
  319. package/dist/core/reviewPublicSurface.js.map +1 -0
  320. package/dist/core/roadmapCatalog.js +122 -23
  321. package/dist/core/roadmapCatalog.js.map +1 -1
  322. package/dist/core/searchIndex.js +124 -17
  323. package/dist/core/searchIndex.js.map +1 -1
  324. package/dist/core/semanticGraph.js.map +1 -1
  325. package/dist/core/semanticSearch.js +20 -4
  326. package/dist/core/semanticSearch.js.map +1 -1
  327. package/dist/core/session.js +1 -2
  328. package/dist/core/session.js.map +1 -1
  329. package/dist/core/sessionResources.js +6 -2
  330. package/dist/core/sessionResources.js.map +1 -1
  331. package/dist/core/start.d.ts +3 -9
  332. package/dist/core/start.js +22 -3231
  333. package/dist/core/start.js.map +1 -1
  334. package/dist/core/startAdoptionLoop.d.ts +2 -0
  335. package/dist/core/startAdoptionLoop.js +41 -0
  336. package/dist/core/startAdoptionLoop.js.map +1 -0
  337. package/dist/core/startEvidence.d.ts +5 -0
  338. package/dist/core/startEvidence.js +62 -0
  339. package/dist/core/startEvidence.js.map +1 -0
  340. package/dist/core/startExecutionPlan.d.ts +16 -0
  341. package/dist/core/startExecutionPlan.js +185 -0
  342. package/dist/core/startExecutionPlan.js.map +1 -0
  343. package/dist/core/startHarness.d.ts +3 -0
  344. package/dist/core/startHarness.js +47 -0
  345. package/dist/core/startHarness.js.map +1 -0
  346. package/dist/core/startIntentTargets.d.ts +24 -0
  347. package/dist/core/startIntentTargets.js +1106 -0
  348. package/dist/core/startIntentTargets.js.map +1 -0
  349. package/dist/core/startMissionControl.d.ts +16 -0
  350. package/dist/core/startMissionControl.js +145 -0
  351. package/dist/core/startMissionControl.js.map +1 -0
  352. package/dist/core/startMissionPolicy.d.ts +19 -0
  353. package/dist/core/startMissionPolicy.js +246 -0
  354. package/dist/core/startMissionPolicy.js.map +1 -0
  355. package/dist/core/startMode.d.ts +11 -0
  356. package/dist/core/startMode.js +139 -0
  357. package/dist/core/startMode.js.map +1 -0
  358. package/dist/core/startOptions.d.ts +18 -0
  359. package/dist/core/startOptions.js +29 -0
  360. package/dist/core/startOptions.js.map +1 -0
  361. package/dist/core/startResume.d.ts +7 -0
  362. package/dist/core/startResume.js +468 -0
  363. package/dist/core/startResume.js.map +1 -0
  364. package/dist/core/startReviewGate.d.ts +11 -0
  365. package/dist/core/startReviewGate.js +200 -0
  366. package/dist/core/startReviewGate.js.map +1 -0
  367. package/dist/core/startRouteActions.d.ts +7 -0
  368. package/dist/core/startRouteActions.js +497 -0
  369. package/dist/core/startRouteActions.js.map +1 -0
  370. package/dist/core/startRunbook.d.ts +24 -0
  371. package/dist/core/startRunbook.js +271 -0
  372. package/dist/core/startRunbook.js.map +1 -0
  373. package/dist/core/startSuccessCriteria.d.ts +14 -0
  374. package/dist/core/startSuccessCriteria.js +497 -0
  375. package/dist/core/startSuccessCriteria.js.map +1 -0
  376. package/dist/core/taint.js +12 -3
  377. package/dist/core/taint.js.map +1 -1
  378. package/dist/core/telemetry.js +19 -5
  379. package/dist/core/telemetry.js.map +1 -1
  380. package/dist/core/trial.d.ts +1 -1
  381. package/dist/core/trial.js +15 -6
  382. package/dist/core/trial.js.map +1 -1
  383. package/dist/core/understand.d.ts +1 -1
  384. package/dist/core/understand.js +165 -51
  385. package/dist/core/understand.js.map +1 -1
  386. package/dist/core/upgradePreview.js +1 -1
  387. package/dist/core/upgradePreview.js.map +1 -1
  388. package/dist/core/watcher.js +18 -3
  389. package/dist/core/watcher.js.map +1 -1
  390. package/dist/core/workplan.js +87 -17
  391. package/dist/core/workplan.js.map +1 -1
  392. package/dist/core/workspace.js.map +1 -1
  393. package/dist/index.d.ts +12 -9
  394. package/dist/index.js +10 -7
  395. package/dist/index.js.map +1 -1
  396. package/dist/mcp/pagination.js.map +1 -1
  397. package/dist/mcp/prompts.js +28 -20
  398. package/dist/mcp/prompts.js.map +1 -1
  399. package/dist/mcp/server.js +6 -74
  400. package/dist/mcp/server.js.map +1 -1
  401. package/dist/mcp/serverPayload.d.ts +13 -0
  402. package/dist/mcp/serverPayload.js +61 -0
  403. package/dist/mcp/serverPayload.js.map +1 -0
  404. package/dist/mcp/tokenBudget.js.map +1 -1
  405. package/dist/mcp/tools/_shared.js.map +1 -1
  406. package/dist/mcp/tools/agentBrief.js +7 -1
  407. package/dist/mcp/tools/agentBrief.js.map +1 -1
  408. package/dist/mcp/tools/applyFix.js +1 -1
  409. package/dist/mcp/tools/applyFix.js.map +1 -1
  410. package/dist/mcp/tools/audit.js.map +1 -1
  411. package/dist/mcp/tools/bugHunt.js +2 -2
  412. package/dist/mcp/tools/bugHunt.js.map +1 -1
  413. package/dist/mcp/tools/claim.js +8 -3
  414. package/dist/mcp/tools/claim.js.map +1 -1
  415. package/dist/mcp/tools/collision.js +3 -1
  416. package/dist/mcp/tools/collision.js.map +1 -1
  417. package/dist/mcp/tools/coordinate.js.map +1 -1
  418. package/dist/mcp/tools/coordinateWatch.js +5 -2
  419. package/dist/mcp/tools/coordinateWatch.js.map +1 -1
  420. package/dist/mcp/tools/costSummary.js.map +1 -1
  421. package/dist/mcp/tools/coupling.js.map +1 -1
  422. package/dist/mcp/tools/coverage.js.map +1 -1
  423. package/dist/mcp/tools/dataflow.js.map +1 -1
  424. package/dist/mcp/tools/dependencies.js +4 -1
  425. package/dist/mcp/tools/dependencies.js.map +1 -1
  426. package/dist/mcp/tools/doctor.js.map +1 -1
  427. package/dist/mcp/tools/explainIssue.js +4 -1
  428. package/dist/mcp/tools/explainIssue.js.map +1 -1
  429. package/dist/mcp/tools/fixSuggest.js +5 -2
  430. package/dist/mcp/tools/fixSuggest.js.map +1 -1
  431. package/dist/mcp/tools/hotspots.js +4 -1
  432. package/dist/mcp/tools/hotspots.js.map +1 -1
  433. package/dist/mcp/tools/impact.js +10 -3
  434. package/dist/mcp/tools/impact.js.map +1 -1
  435. package/dist/mcp/tools/mergeRisk.js.map +1 -1
  436. package/dist/mcp/tools/plugin.js +6 -1
  437. package/dist/mcp/tools/plugin.js.map +1 -1
  438. package/dist/mcp/tools/prDiff.js.map +1 -1
  439. package/dist/mcp/tools/preflight.js +1 -5
  440. package/dist/mcp/tools/preflight.js.map +1 -1
  441. package/dist/mcp/tools/review.js.map +1 -1
  442. package/dist/mcp/tools/reviewWatch.d.ts +1 -1
  443. package/dist/mcp/tools/reviewWatch.js +9 -9
  444. package/dist/mcp/tools/reviewWatch.js.map +1 -1
  445. package/dist/mcp/tools/route.js +1 -1
  446. package/dist/mcp/tools/route.js.map +1 -1
  447. package/dist/mcp/tools/search.js.map +1 -1
  448. package/dist/mcp/tools/semanticGraph.js +8 -2
  449. package/dist/mcp/tools/semanticGraph.js.map +1 -1
  450. package/dist/mcp/tools/start.js.map +1 -1
  451. package/dist/mcp/tools/structure.js +7 -1
  452. package/dist/mcp/tools/structure.js.map +1 -1
  453. package/dist/mcp/tools/understand.js.map +1 -1
  454. package/dist/mcp/tools/workspaceGraph.js +10 -1
  455. package/dist/mcp/tools/workspaceGraph.js.map +1 -1
  456. package/dist/mcp/tools.js +3 -1
  457. package/dist/mcp/tools.js.map +1 -1
  458. package/dist/projscan-sbom.cdx.json +2136 -904
  459. package/dist/reporters/consoleAnalysisReporter.d.ts +2 -0
  460. package/dist/reporters/consoleAnalysisReporter.js +89 -0
  461. package/dist/reporters/consoleAnalysisReporter.js.map +1 -0
  462. package/dist/reporters/consoleArchitectureReporter.d.ts +3 -0
  463. package/dist/reporters/consoleArchitectureReporter.js +47 -0
  464. package/dist/reporters/consoleArchitectureReporter.js.map +1 -0
  465. package/dist/reporters/consoleAuditReporter.d.ts +2 -0
  466. package/dist/reporters/consoleAuditReporter.js +46 -0
  467. package/dist/reporters/consoleAuditReporter.js.map +1 -0
  468. package/dist/reporters/consoleCiReporter.d.ts +2 -0
  469. package/dist/reporters/consoleCiReporter.js +27 -0
  470. package/dist/reporters/consoleCiReporter.js.map +1 -0
  471. package/dist/reporters/consoleCouplingReporter.d.ts +2 -0
  472. package/dist/reporters/consoleCouplingReporter.js +53 -0
  473. package/dist/reporters/consoleCouplingReporter.js.map +1 -0
  474. package/dist/reporters/consoleCoverageReporter.d.ts +2 -0
  475. package/dist/reporters/consoleCoverageReporter.js +62 -0
  476. package/dist/reporters/consoleCoverageReporter.js.map +1 -0
  477. package/dist/reporters/consoleDependencyReporter.d.ts +2 -0
  478. package/dist/reporters/consoleDependencyReporter.js +64 -0
  479. package/dist/reporters/consoleDependencyReporter.js.map +1 -0
  480. package/dist/reporters/consoleDiffReporter.d.ts +2 -0
  481. package/dist/reporters/consoleDiffReporter.js +80 -0
  482. package/dist/reporters/consoleDiffReporter.js.map +1 -0
  483. package/dist/reporters/consoleExplanationReporter.d.ts +2 -0
  484. package/dist/reporters/consoleExplanationReporter.js +33 -0
  485. package/dist/reporters/consoleExplanationReporter.js.map +1 -0
  486. package/dist/reporters/consoleFileReporter.d.ts +2 -0
  487. package/dist/reporters/consoleFileReporter.js +133 -0
  488. package/dist/reporters/consoleFileReporter.js.map +1 -0
  489. package/dist/reporters/consoleFixGuidanceReporter.d.ts +8 -0
  490. package/dist/reporters/consoleFixGuidanceReporter.js +135 -0
  491. package/dist/reporters/consoleFixGuidanceReporter.js.map +1 -0
  492. package/dist/reporters/consoleHealthReporter.d.ts +13 -0
  493. package/dist/reporters/consoleHealthReporter.js +111 -0
  494. package/dist/reporters/consoleHealthReporter.js.map +1 -0
  495. package/dist/reporters/consoleHotspotReporter.d.ts +2 -0
  496. package/dist/reporters/consoleHotspotReporter.js +68 -0
  497. package/dist/reporters/consoleHotspotReporter.js.map +1 -0
  498. package/dist/reporters/consoleImpactReporter.d.ts +2 -0
  499. package/dist/reporters/consoleImpactReporter.js +65 -0
  500. package/dist/reporters/consoleImpactReporter.js.map +1 -0
  501. package/dist/reporters/consoleOutdatedReporter.d.ts +2 -0
  502. package/dist/reporters/consoleOutdatedReporter.js +54 -0
  503. package/dist/reporters/consoleOutdatedReporter.js.map +1 -0
  504. package/dist/reporters/consolePrDiffReporter.d.ts +2 -0
  505. package/dist/reporters/consolePrDiffReporter.js +75 -0
  506. package/dist/reporters/consolePrDiffReporter.js.map +1 -0
  507. package/dist/reporters/consoleReporter.d.ts +21 -38
  508. package/dist/reporters/consoleReporter.js +19 -1000
  509. package/dist/reporters/consoleReporter.js.map +1 -1
  510. package/dist/reporters/consoleReviewReporter.d.ts +2 -0
  511. package/dist/reporters/consoleReviewReporter.js +101 -0
  512. package/dist/reporters/consoleReviewReporter.js.map +1 -0
  513. package/dist/reporters/consoleUpgradeReporter.d.ts +2 -0
  514. package/dist/reporters/consoleUpgradeReporter.js +67 -0
  515. package/dist/reporters/consoleUpgradeReporter.js.map +1 -0
  516. package/dist/reporters/consoleWorkspaceReporter.d.ts +2 -0
  517. package/dist/reporters/consoleWorkspaceReporter.js +24 -0
  518. package/dist/reporters/consoleWorkspaceReporter.js.map +1 -0
  519. package/dist/reporters/htmlReporter.d.ts +2 -1
  520. package/dist/reporters/htmlReporter.js +9 -3
  521. package/dist/reporters/htmlReporter.js.map +1 -1
  522. package/dist/reporters/jsonReporter.d.ts +2 -1
  523. package/dist/reporters/jsonReporter.js.map +1 -1
  524. package/dist/reporters/markdownAnalysisReporter.d.ts +2 -0
  525. package/dist/reporters/markdownAnalysisReporter.js +40 -0
  526. package/dist/reporters/markdownAnalysisReporter.js.map +1 -0
  527. package/dist/reporters/markdownAuditReporter.d.ts +2 -0
  528. package/dist/reporters/markdownAuditReporter.js +27 -0
  529. package/dist/reporters/markdownAuditReporter.js.map +1 -0
  530. package/dist/reporters/markdownDependencyReporter.d.ts +2 -0
  531. package/dist/reporters/markdownDependencyReporter.js +33 -0
  532. package/dist/reporters/markdownDependencyReporter.js.map +1 -0
  533. package/dist/reporters/markdownDiffReporter.d.ts +2 -0
  534. package/dist/reporters/markdownDiffReporter.js +65 -0
  535. package/dist/reporters/markdownDiffReporter.js.map +1 -0
  536. package/dist/reporters/markdownFileReporter.d.ts +2 -0
  537. package/dist/reporters/markdownFileReporter.js +92 -0
  538. package/dist/reporters/markdownFileReporter.js.map +1 -0
  539. package/dist/reporters/markdownFixGuidanceReporter.d.ts +8 -0
  540. package/dist/reporters/markdownFixGuidanceReporter.js +95 -0
  541. package/dist/reporters/markdownFixGuidanceReporter.js.map +1 -0
  542. package/dist/reporters/markdownImpactReporter.d.ts +2 -0
  543. package/dist/reporters/markdownImpactReporter.js +52 -0
  544. package/dist/reporters/markdownImpactReporter.js.map +1 -0
  545. package/dist/reporters/markdownReporter.d.ts +10 -16
  546. package/dist/reporters/markdownReporter.js +9 -452
  547. package/dist/reporters/markdownReporter.js.map +1 -1
  548. package/dist/reporters/markdownReviewReporter.d.ts +2 -0
  549. package/dist/reporters/markdownReviewReporter.js +84 -0
  550. package/dist/reporters/markdownReviewReporter.js.map +1 -0
  551. package/dist/reporters/markdownUpgradeReporter.d.ts +2 -0
  552. package/dist/reporters/markdownUpgradeReporter.js +47 -0
  553. package/dist/reporters/markdownUpgradeReporter.js.map +1 -0
  554. package/dist/reporters/sarifReporter.js.map +1 -1
  555. package/dist/tool-manifest.json +4 -4
  556. package/dist/types/agentBrief.d.ts +48 -0
  557. package/dist/types/agentBrief.js +2 -0
  558. package/dist/types/agentBrief.js.map +1 -0
  559. package/dist/types/analysis.d.ts +32 -0
  560. package/dist/types/analysis.js +2 -0
  561. package/dist/types/analysis.js.map +1 -0
  562. package/dist/types/baseline.d.ts +59 -0
  563. package/dist/types/baseline.js +2 -0
  564. package/dist/types/baseline.js.map +1 -0
  565. package/dist/types/bugHunt.d.ts +41 -0
  566. package/dist/types/bugHunt.js +2 -0
  567. package/dist/types/bugHunt.js.map +1 -0
  568. package/dist/types/common.d.ts +34 -0
  569. package/dist/types/common.js +2 -0
  570. package/dist/types/common.js.map +1 -0
  571. package/dist/types/config.d.ts +56 -0
  572. package/dist/types/config.js +2 -0
  573. package/dist/types/config.js.map +1 -0
  574. package/dist/types/coupling.d.ts +40 -0
  575. package/dist/types/coupling.js +2 -0
  576. package/dist/types/coupling.js.map +1 -0
  577. package/dist/types/coverage.d.ts +32 -0
  578. package/dist/types/coverage.js +2 -0
  579. package/dist/types/coverage.js.map +1 -0
  580. package/dist/types/dependencyHealth.d.ts +61 -0
  581. package/dist/types/dependencyHealth.js +2 -0
  582. package/dist/types/dependencyHealth.js.map +1 -0
  583. package/dist/types/dogfood.d.ts +185 -0
  584. package/dist/types/dogfood.js +2 -0
  585. package/dist/types/dogfood.js.map +1 -0
  586. package/dist/types/evidencePack.d.ts +76 -0
  587. package/dist/types/evidencePack.js +2 -0
  588. package/dist/types/evidencePack.js.map +1 -0
  589. package/dist/types/fixes.d.ts +77 -0
  590. package/dist/types/fixes.js +2 -0
  591. package/dist/types/fixes.js.map +1 -0
  592. package/dist/types/graph.d.ts +80 -0
  593. package/dist/types/graph.js +2 -0
  594. package/dist/types/graph.js.map +1 -0
  595. package/dist/types/graphCorpus.d.ts +16 -0
  596. package/dist/types/graphCorpus.js +2 -0
  597. package/dist/types/graphCorpus.js.map +1 -0
  598. package/dist/types/hotspots.d.ts +42 -0
  599. package/dist/types/hotspots.js +2 -0
  600. package/dist/types/hotspots.js.map +1 -0
  601. package/dist/types/impact.d.ts +62 -0
  602. package/dist/types/impact.js +2 -0
  603. package/dist/types/impact.js.map +1 -0
  604. package/dist/types/inspection.d.ts +47 -0
  605. package/dist/types/inspection.js +2 -0
  606. package/dist/types/inspection.js.map +1 -0
  607. package/dist/types/mcp.d.ts +39 -0
  608. package/dist/types/mcp.js +2 -0
  609. package/dist/types/mcp.js.map +1 -0
  610. package/dist/types/pluginDx.d.ts +42 -0
  611. package/dist/types/pluginDx.js +2 -0
  612. package/dist/types/pluginDx.js.map +1 -0
  613. package/dist/types/prDiff.d.ts +41 -0
  614. package/dist/types/prDiff.js +2 -0
  615. package/dist/types/prDiff.js.map +1 -0
  616. package/dist/types/preflight.d.ts +122 -0
  617. package/dist/types/preflight.js +2 -0
  618. package/dist/types/preflight.js.map +1 -0
  619. package/dist/types/qualityScorecard.d.ts +34 -0
  620. package/dist/types/qualityScorecard.js +2 -0
  621. package/dist/types/qualityScorecard.js.map +1 -0
  622. package/dist/types/regressionPlan.d.ts +32 -0
  623. package/dist/types/regressionPlan.js +2 -0
  624. package/dist/types/regressionPlan.js.map +1 -0
  625. package/dist/types/releaseTrain.d.ts +37 -0
  626. package/dist/types/releaseTrain.js +2 -0
  627. package/dist/types/releaseTrain.js.map +1 -0
  628. package/dist/types/review.d.ts +203 -0
  629. package/dist/types/review.js +2 -0
  630. package/dist/types/review.js.map +1 -0
  631. package/dist/types/reviewContract.d.ts +9 -0
  632. package/dist/types/reviewContract.js +2 -0
  633. package/dist/types/reviewContract.js.map +1 -0
  634. package/dist/types/scanning.d.ts +111 -0
  635. package/dist/types/scanning.js +2 -0
  636. package/dist/types/scanning.js.map +1 -0
  637. package/dist/types/session.d.ts +42 -0
  638. package/dist/types/session.js +2 -0
  639. package/dist/types/session.js.map +1 -0
  640. package/dist/types/start.d.ts +437 -0
  641. package/dist/types/start.js +2 -0
  642. package/dist/types/start.js.map +1 -0
  643. package/dist/types/trial.d.ts +27 -0
  644. package/dist/types/trial.js +2 -0
  645. package/dist/types/trial.js.map +1 -0
  646. package/dist/types/understand.d.ts +153 -0
  647. package/dist/types/understand.js +2 -0
  648. package/dist/types/understand.js.map +1 -0
  649. package/dist/types/workplan.d.ts +67 -0
  650. package/dist/types/workplan.js +2 -0
  651. package/dist/types/workplan.js.map +1 -0
  652. package/dist/types/workplanHandoff.d.ts +11 -0
  653. package/dist/types/workplanHandoff.js +2 -0
  654. package/dist/types/workplanHandoff.js.map +1 -0
  655. package/dist/types/workspace.d.ts +18 -0
  656. package/dist/types/workspace.js +2 -0
  657. package/dist/types/workspace.js.map +1 -0
  658. package/dist/types.d.ts +34 -2348
  659. package/dist/types.js +0 -1
  660. package/dist/types.js.map +1 -1
  661. package/dist/utils/banner.js +15 -6
  662. package/dist/utils/banner.js.map +1 -1
  663. package/dist/utils/baseline.js +11 -9
  664. package/dist/utils/baseline.js.map +1 -1
  665. package/dist/utils/changedFiles.js +1 -1
  666. package/dist/utils/changedFiles.js.map +1 -1
  667. package/dist/utils/config.d.ts +2 -1
  668. package/dist/utils/config.js.map +1 -1
  669. package/dist/utils/formatSupport.d.ts +2 -2
  670. package/dist/utils/formatSupport.js +8 -2
  671. package/dist/utils/formatSupport.js.map +1 -1
  672. package/dist/utils/packageJsonLocator.js.map +1 -1
  673. package/docs/GUIDE.md +209 -147
  674. package/docs/PLUGIN-GALLERY.md +9 -1
  675. package/docs/ROADMAP.md +69 -68
  676. package/docs/demos/projscan-4-1-demo.html +46 -79
  677. package/docs/demos/projscan-mission-control.tape +13 -0
  678. package/docs/demos/projscan-mission-proof.tape +25 -0
  679. package/docs/examples/plugins/graph-context.mjs +1 -2
  680. package/docs/examples/plugins/security-sensitive-files.mjs +2 -1
  681. package/docs/projscan-mission-control.gif +0 -0
  682. package/docs/projscan-mission-proof.gif +0 -0
  683. package/package.json +17 -5
  684. package/scripts/capture-vhs-demos.mjs +80 -0
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ## Why?
21
21
 
22
- AI coding agents are becoming the primary interface to code. When you ask an agent *"which files implement auth?"* or *"what breaks if I bump React from 18 to 19?"*, it needs structured repo context, not raw grep output.
22
+ AI coding agents are becoming the primary interface to code. When you ask an agent _"which files implement auth?"_ or _"what breaks if I bump React from 18 to 19?"_, it needs structured repo context, not raw grep output.
23
23
 
24
24
  **projscan is code intelligence built for agents.** MCP clients get a fast, AST-backed, context-budget-aware view of your codebase: cited repo understanding, semantic graph, dataflow risks, review verdicts, hotspots, ownership, preflight gates, fix prompts, impact analysis, and durable session context. Everything is local and offline.
25
25
 
@@ -33,23 +33,29 @@ The local plugin platform lets teams add project-specific findings and render `d
33
33
  npx projscan
34
34
  ```
35
35
 
36
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/projscan-reporter-plugin.gif" alt="projscan doctor rendered through a local reporter plugin in a macOS-style terminal window" width="700">
36
+ <img src="docs/projscan-mission-control.gif" alt="projscan Mission Control turning a plain-language goal into shortcut commands, proof commands, and review gates" width="760">
37
37
 
38
- ## What's New in 4.3.0
38
+ ## What's New in 4.4.0
39
39
 
40
- 4.3.0 closes the Mission Control loop. Agents can save a mission, run proof, resume from the saved proof state, and report whether the work is ready for a version review without uploading source.
40
+ 4.4.0 turns the Mission Control loop into a release-ready agent harness. Agents get repo-local AgentLoopKit task contracts, AgentFlight verification, explicit personas for decisions, clearer release sign-off queues, and tighter public-surface checks.
41
41
 
42
- - **Mission outcome resume.** `projscan start --mission <dir>` reads a saved Mission Control bundle, includes the latest proof status from `proof-logs/summary.json`, and adds a resume prompt that starts from real pass/fail evidence.
43
- - **Proof-to-review summary.** The start report now includes `missionControl.outcome`: what changed, what remains, failed command details, reviewer decisions, reruns, and a version-candidate recommendation.
44
- - **Local adoption proof.** `projscan mission-proof --mission <dir> --format json` summarizes one or more mission bundles, then compares them with an optional manual baseline to estimate reruns avoided, failed gates caught, and developer time saved.
45
- - **Clear public language count.** projscan now describes language support as 11 AST adapters covering 12 named languages, matching README, website prompt, and MCP Registry copy.
42
+ - **Agent harness proof.** `projscan start` now surfaces `npm exec agentloop -- status` and `npm exec agentflight -- verify` when this repo's harness files exist, so handoffs include the local task and verification loop without executing it.
43
+ - **Release-owner bug pass.** `projscan bug-hunt`, release-train, evidence-pack, and review wording now distinguish concrete fix targets from manual release sign-off actions, with review-useful files ranked first.
44
+ - **Product planning routes.** Broad prompts like `what should we build next?` and `what should we improve next?` now route to bug-hunt/action planning instead of generic orientation.
45
+ - **Public surface discipline.** Public type contracts move into focused modules with dedicated typecheck coverage, while review contract detection follows package entrypoints and re-exports instead of treating internal helper exports as public API.
46
+ - **Audit-clean dev chain.** The release gate now clears npm audit after moving the dev test infrastructure to Vite 8 and refreshing protobuf transitive packages.
47
+ - **Persona-backed decisions.** `docs/PERSONAS.md` records the team and user personas used for agent prioritization, review safety, and adoption tradeoffs.
46
48
 
47
49
  <img src="docs/projscan-proof-router.png" alt="projscan intent router and proof workflow showing impact routing, setup discovery, dependency intelligence, and stable-surface guardrails" width="760">
48
50
 
49
- Regenerate the README screenshots with Playwright:
51
+ <img src="docs/projscan-mission-proof.gif" alt="projscan saving a Mission Control bundle, reporting local mission proof, and resuming from saved proof state" width="760">
52
+
53
+ Regenerate the README media with Playwright and VHS:
50
54
 
51
55
  ```bash
56
+ npm run docs:assets
52
57
  npm run docs:screenshots
58
+ npm run docs:demos
53
59
  ```
54
60
 
55
61
  ## Mission Execution Plan + Copyable Handoffs
@@ -58,6 +64,8 @@ npm run docs:screenshots
58
64
 
59
65
  Projscan also returns a Markdown runbook, a task card, a review gate, and a resume object. A resumed agent gets the current command, the MCP tool call, placeholder bindings, follow-up templates, the ordered checklist, and the remaining proof queue without walking the full plan. MCP and JSON clients can read `missionControl.taskCard.markdown`, the same Markdown printed by `--task-card` and written to `task-card.md`. They can also read `missionControl.reviewGate.markdown` to know when to stop, report proof, and wait for approval before starting another slice, release, publish, or deploy. `missionControl.reviewGate.worktree` adds the current worktree evidence summary and visible changed files, so review handoffs keep the state projscan computed for the start report. `missionControl.reviewGate.proof` carries the remaining proof queue with commands, MCP calls, and structured proof items for review-only handoffs. `missionControl.reviewGate.doneWhen` mirrors the mission success criteria, so review-only handoffs show the approval target beside proof and worktree evidence. `missionControl.reviewGate.policy` lists the actions blocked until explicit reviewer approval: another slice, release, publish, deploy, push, merge, and version bump. `--review-gate-json` and saved `review-gate.json` expose the full review packet without requiring callers to parse the full handoff. `--review-policy` and saved `review-policy.json` expose only the approval boundary. `missionControl.reviewGate.decisions` gives the reviewer the allowed next choices and copyable reply text: approve another slice, request changes, or review a version candidate without publishing; the same menu appears in default console output, saved bundle README files, task cards, handoff prompts, and runbook Markdown. `--review-replies` and saved `review-replies.txt` print only those reply lines when a reviewer wants the smallest approval surface. The complete handoff object carries the same gate at `missionControl.handoff.reviewGate`, so `--handoff-json` and saved `handoff.json` include the stop boundary.
60
66
 
67
+ Repo-local agent harnesses are surfaced in the same proof queue. When `AGENTLOOP.md` or `agentloop.config.json` exists, `projscan start` adds `npm exec agentloop -- status` as a coordination/proof command; when `.agentflight/config.json` exists, it adds `npm exec agentflight -- verify`. These commands are reported for copy/paste, saved mission bundles, and JSON clients; `projscan start` does not execute them.
68
+
61
69
  Use the index when you want the menu, or call one shortcut directly:
62
70
 
63
71
  ```bash
@@ -80,7 +88,18 @@ projscan start --review-replies --intent "<goal>" # Copy-only reviewer replies
80
88
  projscan start --runbook --intent "<goal>" # Markdown mission runbook
81
89
  projscan start --handoff-prompt --intent "<goal>" # One-line handoff prompt
82
90
  projscan start --mission .projscan/mission # Resume from saved proof state
83
- projscan mission-proof --mission .projscan/mission --format json # Local proof summary
91
+ projscan mission-proof --mission .projscan/mission --format markdown # Paste-ready proof report
92
+ projscan mission-proof --list --format json # List saved mission bundles
93
+ projscan mission-proof --list --needs-attention --format json # List bundles that are not passed
94
+ projscan mission-proof --latest --format markdown # Report the newest saved mission bundle
95
+ projscan mission-proof --all --format markdown # Roll up local saved mission bundles
96
+ projscan mission-proof --all --require-passed # Fail if any selected bundle is not passed
97
+ projscan mission-proof --all --summary # One-line proof status for CI logs
98
+ projscan mission-proof --mission .projscan/mission --format json # Local proof summary for scripts
99
+ projscan mission-proof --init-baseline manual-runs.json # Create baseline template
100
+ projscan mission-proof --add-baseline-run manual-runs.json --id manual-1 --status passed --minutes-spent 25 # Record manual run
101
+ projscan mission-proof --check-baseline manual-runs.json # Validate baseline file
102
+ projscan mission-proof --mission .projscan/mission --write reports/mission-proof.md # Save a proof artifact
84
103
  ```
85
104
 
86
105
  Saved mission bundles include `README.md`, `next-command.txt`, `next-tool-call.json`, `handoff-prompt.txt`, `resume-prompt.txt`, `task-card.md`, `review-gate.md`, `review-gate.json`, `review-policy.json`, `review-replies.txt`, the Markdown runbook, structured handoff/resume JSON, `ready-tool-calls.json`, `shortcuts.json`, `mission.sh`, `status.sh`, `review.sh`, `proof-logs/README.md`, `proof-logs/status.jsonl`, `proof-logs/run-report.md`, `proof-logs/summary.json`, proof commands, and a manifest. The saved bundle README starts with quick commands for `./mission.sh`, `./status.sh`, and `./review.sh`; `manifest.json` exposes the same quick commands under `quickCommands` for agents and JSON clients. Running saved `mission.sh` writes current and proof command output under `proof-logs/`, appends exit codes to `status.jsonl`, refreshes `run-report.md` for review, and writes the latest run state plus next action to `summary.json` for agents. Run `./status.sh` from the bundle to print the latest mission state and next action; it exits `0` for passed, `1` for failed, and `2` for not-run or running states. Run `./review.sh` from the bundle to print the status, review gate, run report, evidence command checklist, and reviewer replies in one terminal view.
@@ -94,10 +113,27 @@ projscan start --mission .projscan/mission
94
113
  `projscan start` reads `proof-logs/summary.json`, `proof-logs/status.jsonl`, and local review decision files. The report tells the next agent what changed, what remains, which command failed if proof did not pass, and whether the bundle is ready for a version-candidate review. For a local measurement report, run:
95
114
 
96
115
  ```bash
116
+ projscan mission-proof --mission .projscan/mission --format markdown
117
+ projscan mission-proof --list --format json
118
+ projscan mission-proof --list --needs-attention --format json
119
+ projscan mission-proof --list --mission-status failed --format json
120
+ projscan mission-proof --latest --format markdown
121
+ projscan mission-proof --all --format markdown
122
+ projscan mission-proof --all --require-passed
123
+ projscan mission-proof --all --summary --require-passed
124
+ projscan mission-proof --all --write reports/mission-proof.md
125
+ projscan mission-proof --mission .projscan/mission --write reports/mission-proof.md
126
+ projscan mission-proof --init-baseline manual-runs.json
127
+ projscan mission-proof --init-baseline manual-runs.json --format json
128
+ projscan mission-proof --add-baseline-run manual-runs.json --id manual-1 --status passed --minutes-spent 25 --reruns 1 --failed-gates 0 --reviewer-approvals 1
129
+ projscan mission-proof --add-baseline-run manual-runs.json --id manual-2 --status failed --format json
130
+ projscan mission-proof --check-baseline manual-runs.json
131
+ projscan mission-proof --check-baseline manual-runs.json --format json
97
132
  projscan mission-proof --mission .projscan/mission --baseline manual-runs.json --format json
133
+ projscan mission-proof --mission .projscan/mission --baseline manual-runs.json --format json --write reports/mission-proof.json
98
134
  ```
99
135
 
100
- The baseline file is optional. When present, it can list manual runs with minutes spent, reruns, failed gates, and reviewer approvals; projscan compares that local baseline with Mission Control proof without uploading source.
136
+ The Markdown report is ready for PR notes, release review, and handoff docs. Add `--list` to show saved mission bundles, status, update time, totals, and copyable resume/proof commands before choosing a target. Add `--needs-attention` or `--mission-status failed` to focus that list. Add `--latest` to select the saved mission bundle with the newest `proof-logs/summary.json`. Add `--all` to discover `.projscan/mission` plus direct child bundles under `.projscan/missions/`. Add `--summary` when terminal logs need one status line. Add `--require-passed` when a local script or CI job should exit nonzero unless every selected bundle passed. Add `--write reports/mission-proof.md` to save the report as a local artifact; `.md` and `.markdown` paths write Markdown by default. Use JSON when agents or scripts need the same proof data, and add `--write reports/mission-proof.json` when CI should archive it. Run `--init-baseline manual-runs.json` to create the local baseline template, then use `--add-baseline-run` to record measured manual runs without editing JSON. Add `--format json` to baseline init, append, or check commands when a wrapper needs the written path, run count, added run, or totals. If `--baseline` or `--check-baseline` points at a missing or malformed file, projscan prints the exact template command or expected JSON shape. Baseline run IDs must be non-empty and unique. Baseline run statuses must be `passed`, `failed`, `running`, `not_run`, or `unknown`; metric fields must be non-negative numbers. The baseline file is optional. When present, it can list manual runs with minutes spent, reruns, failed gates, and reviewer approvals; projscan compares that local baseline with Mission Control proof without uploading source.
101
137
 
102
138
  Default console output shows the same sections inline: `Run Cursor`, `Resume Checklist`, `Handoff Prompt`, `Ready Proof`, and `Proof Queue`. The proof views use the resume-aware remaining queue, so projscan does not repeat the current cursor command as proof.
103
139
 
@@ -136,7 +172,7 @@ Proof Queue
136
172
 
137
173
  Runbook handoff example:
138
174
 
139
- ```text
175
+ ````text
140
176
  Agent Runbook
141
177
  # Mission Runbook
142
178
  Intent: what breaks if I rename the auth token loader
@@ -153,37 +189,41 @@ Current phase: ready_now
153
189
  Run now:
154
190
  ```sh
155
191
  projscan search "auth token loader" --format json
156
- ```
192
+ ````
193
+
157
194
  MCP call: projscan_search {"query":"auth token loader"}
158
195
  After running, resolve:
196
+
159
197
  - input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
160
198
  - input-2 (file): Replace <file-from-search> with a file path returned by the search step.
161
- Template inputs:
199
+ Template inputs:
162
200
  - <symbol-from-search> -> input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
163
201
  - <file-from-search> -> input-2 (file): Replace <file-from-search> with a file path returned by the search step.
164
- Resume checklist:
202
+ Resume checklist:
165
203
  - [ready] run_current ready-1: projscan search "auth token loader" --format json (MCP: projscan_search {"query":"auth token loader"})
166
204
  - [blocked] resolve_input input-1: <symbol-from-search> -> Replace <symbol-from-search> with an exported symbol returned by the search step.
167
205
  - [ready] run_proof proof-2: projscan preflight --mode before_edit --format json (MCP: projscan_preflight {"mode":"before_edit"})
168
206
  - [pending] confirm_done criterion-1: An exact symbol or file path is selected from search results before impact analysis continues.
169
- Proof queue:
207
+ Proof queue:
170
208
  - proof-2: `projscan preflight --mode before_edit --format json` (MCP: projscan_preflight {"mode":"before_edit"})
171
209
  - proof-3: `projscan understand --view verify --format json` (MCP: projscan_understand {"view":"verify"})
172
- Remaining proof:
210
+ Remaining proof:
173
211
  - `projscan preflight --mode before_edit --format json`
174
212
  - `projscan understand --view verify --format json`
175
- MCP proof calls:
213
+ MCP proof calls:
176
214
  - proof-2: projscan_preflight {"mode":"before_edit"}
177
215
  - proof-3: projscan_understand {"view":"verify"}
178
- Then use:
216
+ Then use:
179
217
  - follow-up-1 (If search returns an exported symbol): projscan impact --symbol <symbol-from-search> --format json
180
218
  - follow-up-2 (If search returns a file path): projscan impact <file-from-search> --format json
181
- Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
219
+ Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
182
220
 
183
221
  ## Handoff Prompt
222
+
184
223
  Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file). Done when: An exact symbol or file path is selected from search results before impact analysis continues. Needs input: symbol=<symbol-from-search>, file=<file-from-search>. Ready proof: Ready-to-run proof commands; placeholder follow-ups are excluded until Needs Input is resolved. projscan preflight --mode before_edit --format json && projscan understand --view verify --format json.
185
224
 
186
225
  ## Review Gate
226
+
187
227
  - [ ] Complete this task card and remaining proof.
188
228
  - [ ] Capture `git status --short`.
189
229
  - [ ] Capture `git diff --stat`.
@@ -192,19 +232,22 @@ Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader"
192
232
  Review the completed mission, proof output, and working-tree summary before approving another slice, release, publish, or deploy.
193
233
 
194
234
  ## Ready Commands
235
+
195
236
  - `projscan search "auth token loader" --format json`
196
237
 
197
238
  ## Blocked Inputs
239
+
198
240
  - symbol: Replace <symbol-from-search> with an exported symbol returned by the search step.
199
- ```
241
+
242
+ ````
200
243
 
201
244
  Run `projscan doctor` for a focused health check:
202
245
 
203
246
  ```bash
204
247
  npx projscan doctor
205
- ```
248
+ ````
206
249
 
207
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
250
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
208
251
 
209
252
  ## Install
210
253
 
@@ -444,6 +487,7 @@ projscan start --intent "what should an intern work on?" # Routes to bug-hunt pr
444
487
  projscan start --intent "what is a low risk improvement?" # Routes to bug-hunt prioritization
445
488
  projscan start --intent "pick a small safe task" # Routes to bug-hunt prioritization
446
489
  projscan start --intent "what should I do next?" # Routes to an ordered before-edit workplan
490
+ projscan start --intent "what should we build next?" # Routes to a bug-hunt product-planning workplan
447
491
  projscan start --intent "explain issue missing-test-framework" # Routes to deep issue context
448
492
  projscan start --intent "fix issue missing-test-framework" # Routes to a concrete fix suggestion
449
493
  projscan start --intent "is user input reaching SQL sinks?" # Routes to hardening dataflow analysis
@@ -537,9 +581,9 @@ npm run test:trust-smoke
537
581
 
538
582
  The full command catalog is below. Most users should start with the five-command path above instead of scanning the catalog.
539
583
 
540
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
584
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
541
585
 
542
- For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/GUIDE.md)**.
586
+ For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/GUIDE.md)**.
543
587
 
544
588
  ## Repo Understanding
545
589
 
@@ -557,58 +601,58 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
557
601
 
558
602
  ## Commands
559
603
 
560
- | Command | Description |
561
- |---------|-------------|
562
- | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
563
- | `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
564
- | `projscan start` | First-60-seconds workflow orientation with setup diagnostics, Mission Control, top risks, and next commands. Add `--intent "<goal>"` to route a plain-language goal to route confidence, phased execution plan, ready actions, done criteria, and proof commands |
565
- | `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
566
- | `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
567
- | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
568
- | `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
569
- | `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
570
- | `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
571
- | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
572
- | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
573
- | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
574
- | `projscan bug-hunt` | Prioritized bug-hunt fix queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
575
- | `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
576
- | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
577
- | `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
578
- | `projscan release-train` | Plan upcoming product lines with readiness evidence |
579
- | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
580
- | `projscan trial` | Produce one adoption-readiness report from onboarding, dogfood, feedback, trust signals, and website proof |
581
- | `projscan feedback` | Capture measured reviewer feedback: minutes saved, prevented bad edits, false positives, and repeat PR use |
582
- | `projscan privacy-check` | Verify the local trust boundary: telemetry, offline mode, scan root, .gitignore handling, ignored-file count, .env content scanning, and network-capable endpoints |
583
- | `projscan telemetry` | Explicit default-off telemetry controls: status, enable, disable, and explain |
584
- | `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
585
- | `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
586
- | `projscan handoff` | Concise next-agent handoff from the current workplan |
587
- | `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
588
- | `projscan preflight` | Agent safety gate - `proceed`, `caution`, or `block` with health, change, plugin, and supply-chain evidence |
589
- | `projscan hotspots` | Rank files by risk - churn × complexity × issues × ownership |
590
- | `projscan semantic-graph` | Stable v3 graph contract, plus targeted `--query importers/imports/exports/...` lookups |
591
- | `projscan dataflow` | Focused direct, propagated, and bridge source-to-sink dataflow risks |
592
- | `projscan search <query>` | **BM25-ranked search** - content + symbols + path, with excerpts |
593
- | `projscan file <path>` | Drill into a file - purpose, risk, ownership, related issues |
594
- | `projscan fix` | Auto-fix issues (ESLint, Prettier, Vitest, .editorconfig) |
595
- | `projscan ci` | CI health gate - SARIF output, `--changed-only` PR-diff mode, exits 1 if score below threshold |
596
- | `projscan diff` | Compare current health **and hotspot trends** against a baseline |
597
- | `projscan diagram` | ASCII architecture diagram of your project |
598
- | `projscan structure` | Directory tree with file counts |
599
- | `projscan dependencies` | Dependency analysis - counts, license summary, risks, recommendations |
600
- | `projscan outdated` | Declared-vs-installed drift check (offline) |
601
- | `projscan audit` | `npm audit`-powered vulnerability report - SARIF-ready for Code Scanning |
602
- | `projscan upgrade <pkg>` | Preview upgrade impact - local CHANGELOG + importer list, offline |
603
- | `projscan coverage` | **Coverage × hotspots - rank the scariest untested files** (`--changed-only` for diff mode) |
604
- | `projscan badge` | Generate a health score badge for your README |
605
- | `projscan init` | *(1.6)* Scaffold `.projscanrc.json` with sensible defaults |
606
- | `projscan install-hook` | *(1.6)* Install a `pre-commit` hook running `projscan ci --changed-only` |
607
- | `projscan workspace` | *(1.6)* Register sibling repos for cross-repo intelligence (`add` / `list` / `remove`) |
608
- | `projscan apply-fix <id>` | *(1.6)* Mechanically execute the safe fix templates with rollback (default dry-run) |
609
- | `projscan taint` | *(1.6)* Source-to-sink reachability over the call graph |
610
- | `projscan plugin` | Discover, scaffold, validate, and test local analyzer/reporter plugins |
611
- | `projscan mcp` | Run as an MCP server for AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, …) |
604
+ | Command | Description |
605
+ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
606
+ | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
607
+ | `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
608
+ | `projscan start` | First-60-seconds workflow orientation with setup diagnostics, Mission Control, top risks, and next commands. Add `--intent "<goal>"` to route a plain-language goal to route confidence, phased execution plan, ready actions, done criteria, and proof commands |
609
+ | `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
610
+ | `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
611
+ | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
612
+ | `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
613
+ | `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
614
+ | `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
615
+ | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
616
+ | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
617
+ | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
618
+ | `projscan bug-hunt` | Prioritized bug-hunt action queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
619
+ | `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
620
+ | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
621
+ | `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
622
+ | `projscan release-train` | Plan upcoming product lines with readiness evidence |
623
+ | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
624
+ | `projscan trial` | Produce one adoption-readiness report from onboarding, dogfood, feedback, trust signals, and website proof |
625
+ | `projscan feedback` | Capture measured reviewer feedback: minutes saved, prevented bad edits, false positives, and repeat PR use |
626
+ | `projscan privacy-check` | Verify the local trust boundary: telemetry, offline mode, scan root, .gitignore handling, ignored-file count, .env content scanning, and network-capable endpoints |
627
+ | `projscan telemetry` | Explicit default-off telemetry controls: status, enable, disable, and explain |
628
+ | `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
629
+ | `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
630
+ | `projscan handoff` | Concise next-agent handoff from the current workplan |
631
+ | `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
632
+ | `projscan preflight` | Agent safety gate - `proceed`, `caution`, or `block` with health, change, plugin, and supply-chain evidence |
633
+ | `projscan hotspots` | Rank files by risk - churn × complexity × issues × ownership |
634
+ | `projscan semantic-graph` | Stable v3 graph contract, plus targeted `--query importers/imports/exports/...` lookups |
635
+ | `projscan dataflow` | Focused direct, propagated, and bridge source-to-sink dataflow risks |
636
+ | `projscan search <query>` | **BM25-ranked search** - content + symbols + path, with excerpts |
637
+ | `projscan file <path>` | Drill into a file - purpose, risk, ownership, related issues |
638
+ | `projscan fix` | Auto-fix issues (ESLint, Prettier, Vitest, .editorconfig) |
639
+ | `projscan ci` | CI health gate - SARIF output, `--changed-only` PR-diff mode, exits 1 if score below threshold |
640
+ | `projscan diff` | Compare current health **and hotspot trends** against a baseline |
641
+ | `projscan diagram` | ASCII architecture diagram of your project |
642
+ | `projscan structure` | Directory tree with file counts |
643
+ | `projscan dependencies` | Dependency analysis - counts, license summary, risks, recommendations |
644
+ | `projscan outdated` | Declared-vs-installed drift check (offline) |
645
+ | `projscan audit` | `npm audit`-powered vulnerability report - SARIF-ready for Code Scanning |
646
+ | `projscan upgrade <pkg>` | Preview upgrade impact - local CHANGELOG + importer list, offline |
647
+ | `projscan coverage` | **Coverage × hotspots - rank the scariest untested files** (`--changed-only` for diff mode) |
648
+ | `projscan badge` | Generate a health score badge for your README |
649
+ | `projscan init` | _(1.6)_ Scaffold `.projscanrc.json` with sensible defaults |
650
+ | `projscan install-hook` | _(1.6)_ Install a `pre-commit` hook running `projscan ci --changed-only` |
651
+ | `projscan workspace` | _(1.6)_ Register sibling repos for cross-repo intelligence (`add` / `list` / `remove`) |
652
+ | `projscan apply-fix <id>` | _(1.6)_ Mechanically execute the safe fix templates with rollback (default dry-run) |
653
+ | `projscan taint` | _(1.6)_ Source-to-sink reachability over the call graph |
654
+ | `projscan plugin` | Discover, scaffold, validate, and test local analyzer/reporter plugins |
655
+ | `projscan mcp` | Run as an MCP server for AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, …) |
612
656
 
613
657
  To see all commands and options, run:
614
658
 
@@ -621,25 +665,25 @@ projscan --help
621
665
  <details>
622
666
  <summary><strong>projscan structure</strong> - Directory tree with file counts</summary>
623
667
 
624
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
668
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
625
669
  </details>
626
670
 
627
671
  <details>
628
672
  <summary><strong>projscan diagram</strong> - Architecture visualization</summary>
629
673
 
630
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
674
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
631
675
  </details>
632
676
 
633
677
  <details>
634
678
  <summary><strong>projscan dependencies</strong> - Dependency analysis</summary>
635
679
 
636
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
680
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
637
681
  </details>
638
682
 
639
683
  <details>
640
684
  <summary><strong>projscan badge</strong> - Health badge generation</summary>
641
685
 
642
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
686
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
643
687
  </details>
644
688
 
645
689
  ### Output Formats
@@ -650,6 +694,8 @@ Commands accept `--format` for different output targets. Supported formats are c
650
694
  projscan analyze --format json # Machine-readable JSON
651
695
  projscan analyze --format html # Self-contained HTML report
652
696
  projscan doctor --format markdown # Markdown for docs/PRs
697
+ projscan mission-proof --format markdown # Mission proof report for handoffs
698
+ projscan mission-proof --write reports/mission-proof.md # Save Markdown proof
653
699
  projscan ci --format sarif # SARIF 2.1.0 for GitHub Code Scanning
654
700
  ```
655
701
 
@@ -661,7 +707,7 @@ Run `projscan help` for the generated command-by-command support matrix.
661
707
 
662
708
  projscan can load local plugins from `.projscan-plugins/` when `PROJSCAN_PLUGINS_PREVIEW=1` is set. The environment flag is kept for explicit local-code opt-in. Analyzer plugins emit normal projscan issues; reporter plugins render supported CLI commands with team-specific output.
663
709
 
664
- **2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/plugin.schema.json) as the stable contract.
710
+ **2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/plugin.schema.json) as the stable contract.
665
711
 
666
712
  ```bash
667
713
  projscan plugin list
@@ -672,58 +718,71 @@ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
672
718
  PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-radar --min-score 80
673
719
  ```
674
720
 
675
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
721
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
676
722
 
677
- Reporter plugins are intentionally CLI-only. MCP tools keep returning structured JSON-compatible payloads so agents can reason over stable data, while humans can get a polished local report for their team. Custom presentation, team-branded summaries, and white-label reports belong in reporter plugins rather than new core HTML theming flags. See [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
723
+ Reporter plugins are intentionally CLI-only. MCP tools keep returning structured JSON-compatible payloads so agents can reason over stable data, while humans can get a polished local report for their team. Custom presentation, team-branded summaries, and white-label reports belong in reporter plugins rather than new core HTML theming flags. See [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
678
724
 
679
725
  ### Options
680
726
 
681
- | Flag | Description |
682
- |------|-------------|
683
- | `--format <type>` | Output format: console, json, markdown, sarif, html (command-dependent) |
684
- | `--config <path>` | Path to a `.projscanrc` config file |
685
- | `--include-ignored` | Explicitly include files hidden by Git ignore rules |
686
- | `--scan-env-values` | Explicitly read `.env*` contents during secret checks |
687
- | `--offline` | Block projscan network-capable features for this run |
688
- | `--shortcuts` | Print the Mission Control shortcut command index (`start`) |
689
- | `--shortcuts-json` | Print the Mission Control shortcut command index as JSON (`start`) |
690
- | `--handoff-prompt` | Print only the concise Mission Control handoff prompt (`start`) |
691
- | `--next-command` | Print only the current Mission Control cursor command (`start`) |
692
- | `--next-tool-call` | Print only the current Mission Control cursor MCP tool call as JSON (`start`) |
693
- | `--ready-tool-calls` | Print the current cursor and remaining MCP-callable proof queue as JSON (`start`) |
694
- | `--proof-commands` | Print only ready Mission Control proof commands (`start`) |
695
- | `--checklist` | Print only the Mission Control resume checklist (`start`) |
696
- | `--resume-json` | Print only the Mission Control resume object as JSON (`start`) |
697
- | `--handoff-json` | Print only the Mission Control handoff object as JSON (`start`) |
698
- | `--mission-script` | Print the Mission Control shell script (`start`) |
699
- | `--save-mission <dir>` | Write the Mission Control bundle to a directory (`start`) |
700
- | `--mission <dir>` | Read a saved Mission Control bundle and include proof outcome in `start`; repeatable mission selector for `mission-proof` |
701
- | `--baseline <path>` | Compare `mission-proof` with a local manual-run baseline JSON file |
702
- | `--task-card` | Print only the Mission Control Markdown task card (`start`) |
703
- | `--review-gate` | Print only the Mission Control stop-and-review gate (`start`) |
704
- | `--review-gate-json` | Print only the Mission Control review gate as JSON (`start`) |
705
- | `--review-policy` | Print only the Mission Control review policy as JSON (`start`) |
706
- | `--review-replies` | Print only copyable Mission Control reviewer replies (`start`) |
707
- | `--runbook` | Print only the Mission Control Markdown runbook (`start`) |
708
- | `--changed-only` | Scope to files changed vs base ref (ci/analyze/doctor) |
709
- | `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
710
- | `--reporter <name>` | Render `doctor`, `analyze`, or `ci` with a local reporter plugin |
711
- | `--verbose` | Enable debug output |
712
- | `--quiet` | Suppress non-essential output |
713
- | `-V, --version` | Show version |
714
- | `-h, --help` | Show help |
727
+ | Flag | Description |
728
+ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
729
+ | `--format <type>` | Output format: console, json, markdown, sarif, html (command-dependent) |
730
+ | `--config <path>` | Path to a `.projscanrc` config file |
731
+ | `--include-ignored` | Explicitly include files hidden by Git ignore rules |
732
+ | `--scan-env-values` | Explicitly read `.env*` contents during secret checks |
733
+ | `--offline` | Block projscan network-capable features for this run |
734
+ | `--shortcuts` | Print the Mission Control shortcut command index (`start`) |
735
+ | `--shortcuts-json` | Print the Mission Control shortcut command index as JSON (`start`) |
736
+ | `--handoff-prompt` | Print only the concise Mission Control handoff prompt (`start`) |
737
+ | `--next-command` | Print only the current Mission Control cursor command (`start`) |
738
+ | `--next-tool-call` | Print only the current Mission Control cursor MCP tool call as JSON (`start`) |
739
+ | `--ready-tool-calls` | Print the current cursor and remaining MCP-callable proof queue as JSON (`start`) |
740
+ | `--proof-commands` | Print only ready Mission Control proof commands (`start`) |
741
+ | `--checklist` | Print only the Mission Control resume checklist (`start`) |
742
+ | `--resume-json` | Print only the Mission Control resume object as JSON (`start`) |
743
+ | `--handoff-json` | Print only the Mission Control handoff object as JSON (`start`) |
744
+ | `--mission-script` | Print the Mission Control shell script (`start`) |
745
+ | `--save-mission <dir>` | Write the Mission Control bundle to a directory (`start`) |
746
+ | `--mission <dir>` | Read a saved Mission Control bundle and include proof outcome in `start`; repeatable mission selector for `mission-proof` |
747
+ | `--list` | List saved Mission Control bundles with status and update time (`mission-proof`) |
748
+ | `--needs-attention` | Filter `mission-proof --list` to bundles that are not passed |
749
+ | `--mission-status <status>` | Filter `mission-proof --list` by `passed`, `failed`, `running`, `not_run`, or `unknown` |
750
+ | `--latest` | Select the saved Mission Control bundle with the newest `proof-logs/summary.json` (`mission-proof`) |
751
+ | `--all` | Discover `.projscan/mission` and direct child bundles under `.projscan/missions/` (`mission-proof`) |
752
+ | `--baseline <path>` | Compare `mission-proof` with a local manual-run baseline JSON file |
753
+ | `--init-baseline <file>` | Write a local manual-run baseline JSON template (`mission-proof`) |
754
+ | `--add-baseline-run <file>` | Append one measured manual run to a local baseline JSON file (`mission-proof`) |
755
+ | `--check-baseline <file>` | Validate a local manual-run baseline JSON file (`mission-proof`) |
756
+ | `--id <id>` / `--status <status>` | Identify a run added with `--add-baseline-run` (`mission-proof`) |
757
+ | `--minutes-spent`, `--reruns`, `--failed-gates`, `--reviewer-approvals` | Numeric fields for `--add-baseline-run` (`mission-proof`) |
758
+ | `--write <file>` | Write a Markdown or JSON artifact (`mission-proof`, `handoff`) |
759
+ | `--require-passed` | Exit nonzero unless every selected mission bundle passed proof (`mission-proof`) |
760
+ | `--summary` | Print one compact Mission Proof status line (`mission-proof`) |
761
+ | `--task-card` | Print only the Mission Control Markdown task card (`start`) |
762
+ | `--review-gate` | Print only the Mission Control stop-and-review gate (`start`) |
763
+ | `--review-gate-json` | Print only the Mission Control review gate as JSON (`start`) |
764
+ | `--review-policy` | Print only the Mission Control review policy as JSON (`start`) |
765
+ | `--review-replies` | Print only copyable Mission Control reviewer replies (`start`) |
766
+ | `--runbook` | Print only the Mission Control Markdown runbook (`start`) |
767
+ | `--changed-only` | Scope to files changed vs base ref (ci/analyze/doctor) |
768
+ | `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
769
+ | `--reporter <name>` | Render `doctor`, `analyze`, or `ci` with a local reporter plugin |
770
+ | `--verbose` | Enable debug output |
771
+ | `--quiet` | Suppress non-essential output |
772
+ | `-V, --version` | Show version |
773
+ | `-h, --help` | Show help |
715
774
 
716
775
  ## Health Score
717
776
 
718
777
  Every `projscan doctor` run calculates a health score (0–100) and letter grade:
719
778
 
720
- | Grade | Score | Meaning |
721
- |-------|-------|---------|
722
- | A | 90–100 | Excellent - project follows best practices |
723
- | B | 80–89 | Good - minor improvements possible |
724
- | C | 70–79 | Fair - several issues to address |
725
- | D | 60–69 | Poor - significant issues found |
726
- | F | < 60 | Critical - major issues need attention |
779
+ | Grade | Score | Meaning |
780
+ | ----- | ------ | ------------------------------------------ |
781
+ | A | 90–100 | Excellent - project follows best practices |
782
+ | B | 80–89 | Good - minor improvements possible |
783
+ | C | 70–79 | Fair - several issues to address |
784
+ | D | 60–69 | Poor - significant issues found |
785
+ | F | < 60 | Critical - major issues need attention |
727
786
 
728
787
  Generate a badge for your README:
729
788
 
@@ -782,10 +841,10 @@ Cache version bumped 2 → 3 in 0.11 (CC stored per file). Existing v2 caches ar
782
841
 
783
842
  Reference numbers from `npm run bench` on an Apple M3 Pro running Node 25 (cold / warm cache, milliseconds), refreshed for 1.5.0:
784
843
 
785
- | Repo | Files | analyze | doctor | hotspots | coupling | search |
786
- |------|-------|---------|--------|----------|----------|--------|
787
- | projscan itself | ~120 | 650 / 576 | 659 / 574 | 794 / 622 | 405 / 186 | 485 / 277 |
788
- | Synthetic medium | 500 | 284 / 257 | 277 / 255 | 300 / 278 | 224 / 177 | 239 / 196 |
844
+ | Repo | Files | analyze | doctor | hotspots | coupling | search |
845
+ | ---------------- | ----- | --------- | --------- | --------- | --------- | --------- |
846
+ | projscan itself | ~120 | 650 / 576 | 659 / 574 | 794 / 622 | 405 / 186 | 485 / 277 |
847
+ | Synthetic medium | 500 | 284 / 257 | 277 / 255 | 300 / 278 | 224 / 177 | 239 / 196 |
789
848
 
790
849
  For real-world numbers against larger codebases, `npm run bench:references` shallow-clones TypeScript, Django, and kubernetes/client-go into `.bench-cache/` (gitignored) and runs the same suite. First run is network-bound; later runs reuse the cache. Restrict to one target with `-- --only ts|django|k8s-client-go`.
791
850
 
@@ -795,19 +854,19 @@ Run `npm run bench` against your own machine to recalibrate.
795
854
  - **14 runtime dependencies** — still minimal
796
855
  - **~21 MB of vendored tree-sitter grammars**, broken down:
797
856
 
798
- | Grammar | Size | Languages |
799
- |---|---:|---|
800
- | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
801
- | `tree-sitter-python` | ~450 KB | Python |
802
- | `tree-sitter-go` | ~210 KB | Go |
803
- | `tree-sitter-java` | ~405 KB | Java |
804
- | `tree-sitter-ruby` | ~2.0 MB | Ruby |
805
- | `tree-sitter-rust` | ~1.1 MB | Rust |
806
- | `tree-sitter-php` | ~785 KB | PHP |
807
- | `tree-sitter-c-sharp` | ~5.2 MB | C# |
808
- | `tree-sitter-cpp` | ~3.3 MB | C, C++ |
809
- | `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
810
- | `tree-sitter-swift` | ~3.6 MB | Swift |
857
+ | Grammar | Size | Languages |
858
+ | --------------------- | ------: | ---------------------------------- |
859
+ | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
860
+ | `tree-sitter-python` | ~450 KB | Python |
861
+ | `tree-sitter-go` | ~210 KB | Go |
862
+ | `tree-sitter-java` | ~405 KB | Java |
863
+ | `tree-sitter-ruby` | ~2.0 MB | Ruby |
864
+ | `tree-sitter-rust` | ~1.1 MB | Rust |
865
+ | `tree-sitter-php` | ~785 KB | PHP |
866
+ | `tree-sitter-c-sharp` | ~5.2 MB | C# |
867
+ | `tree-sitter-cpp` | ~3.3 MB | C, C++ |
868
+ | `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
869
+ | `tree-sitter-swift` | ~3.6 MB | Swift |
811
870
 
812
871
  JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
813
872
 
@@ -838,16 +897,16 @@ projscan reads your source code so it can be useful; it does not send your sourc
838
897
 
839
898
  ### What projscan DOES do, and what it costs
840
899
 
841
- | Action | When | Network? | Notes |
842
- |---|---|---|---|
843
- | Read source files | every command | no | parses with tree-sitter / Babel; results cached at `.projscan-cache/` |
844
- | Spawn `git` | `hotspots`, `pr-diff`, `review`, `diff` | git itself may fetch if you run `git fetch` separately; **projscan never invokes `git fetch`** | `env: process.env` is passed so `git` can find its config |
845
- | Spawn `npm audit` | `audit` only | yes — by `npm`, not by projscan | runs against your local lockfile |
846
- | Scan supply-chain IOCs | `doctor`, `preflight`, release validation | no | checks manifests, lockfiles, hidden editor hooks, and suspicious install-time payloads against bundled indicators |
847
- | Anonymous telemetry | only after `projscan telemetry enable` or accepting the `projscan init team` prompt | yes — projscan-owned, default off | sends product-health buckets only; see [TELEMETRY.md](TELEMETRY.md) |
848
- | Load local plugins | only with `PROJSCAN_PLUGINS_PREVIEW=1` and an execution path such as `--execute`, `doctor`, `ci`, or `analyze` | no | imports local JS modules declared in `.projscan-plugins/`; only enable plugins you trust |
849
- | Load wasm grammars | first parse of a non-JS file | no | served from `dist/grammars/` inside the package; no fetch |
850
- | Build embeddings | semantic search opt-in only | yes — by `@xenova/transformers`, on first use | model cached locally after first download; remove the peer dep to remove this code path entirely |
900
+ | Action | When | Network? | Notes |
901
+ | ---------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
902
+ | Read source files | every command | no | parses with tree-sitter / Babel; results cached at `.projscan-cache/` |
903
+ | Spawn `git` | `hotspots`, `pr-diff`, `review`, `diff` | git itself may fetch if you run `git fetch` separately; **projscan never invokes `git fetch`** | `env: process.env` is passed so `git` can find its config |
904
+ | Spawn `npm audit` | `audit` only | yes — by `npm`, not by projscan | runs against your local lockfile |
905
+ | Scan supply-chain IOCs | `doctor`, `preflight`, release validation | no | checks manifests, lockfiles, hidden editor hooks, and suspicious install-time payloads against bundled indicators |
906
+ | Anonymous telemetry | only after `projscan telemetry enable` or accepting the `projscan init team` prompt | yes — projscan-owned, default off | sends product-health buckets only; see [TELEMETRY.md](TELEMETRY.md) |
907
+ | Load local plugins | only with `PROJSCAN_PLUGINS_PREVIEW=1` and an execution path such as `--execute`, `doctor`, `ci`, or `analyze` | no | imports local JS modules declared in `.projscan-plugins/`; only enable plugins you trust |
908
+ | Load wasm grammars | first parse of a non-JS file | no | served from `dist/grammars/` inside the package; no fetch |
909
+ | Build embeddings | semantic search opt-in only | yes — by `@xenova/transformers`, on first use | model cached locally after first download; remove the peer dep to remove this code path entirely |
851
910
 
852
911
  ### Patterns supply-chain scanners flag, and why they're benign here
853
912
 
@@ -861,7 +920,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
861
920
  ### Audit it yourself
862
921
 
863
922
  - **Source is open** at [github.com/abhiyoheswaran1/projscan](https://github.com/abhiyoheswaran1/projscan). The npm tarball matches the `dist/` produced by `npm run build` at the matching tag.
864
- - **Public API surface is locked** by `scripts/check-stability.mjs`, which runs in CI on every PR and fails on any rename or removal of an MCP tool, CLI command, or exit code. See [`docs/STABILITY.md`](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/STABILITY.md).
923
+ - **Public API surface is locked** by `scripts/check-stability.mjs`, which runs in CI on every PR and fails on any rename or removal of an MCP tool, CLI command, or exit code. See [`docs/STABILITY.md`](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/STABILITY.md).
865
924
  - **Run it offline:** `npm install -g projscan` followed by anything except `audit` and `--mode semantic` works without network.
866
925
  - **Drop privilege further:** in CI, run projscan in a sandbox that disallows network egress; everything except `audit` will pass.
867
926
 
@@ -876,13 +935,13 @@ projscan runs against itself in CI on every PR. The dogfood loop is the most dir
876
935
 
877
936
  Current state of the projscan codebase as scored by projscan itself:
878
937
 
879
- | Metric | Value |
880
- |---|---|
881
- | Health score | **A (100 / 100)** |
882
- | Open issues | 0 errors, 0 warnings, 0 info |
883
- | Circular imports | 0 |
884
- | Top hotspot | `src/reporters/consoleReporter.ts` (CC 288, 1108 lines) — known refactor candidate, not a defect |
885
- | Dogfood threshold | `--min-score 90` (CI fails below this) |
938
+ | Metric | Value |
939
+ | ----------------- | ------------------------------------------------------------------------------------------------ |
940
+ | Health score | **A (100 / 100)** |
941
+ | Open issues | 0 errors, 0 warnings, 0 info |
942
+ | Circular imports | 0 |
943
+ | Top hotspot | `src/reporters/consoleReporter.ts` (CC 288, 1108 lines) — known refactor candidate, not a defect |
944
+ | Dogfood threshold | `--min-score 90` (CI fails below this) |
886
945
 
887
946
  The `--min-score 90` threshold is deliberately tight: a regression that drops the score by more than ten points fails the build. The current ten-point margin (90 → 100) is for room to breathe, not slack.
888
947
 
@@ -912,7 +971,7 @@ projscan ci --changed-only # Gate only on this PR's diff
912
971
  projscan ci --format sarif > projscan.sarif # SARIF for Code Scanning
913
972
  ```
914
973
 
915
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
974
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
916
975
 
917
976
  ### GitHub Action (recommended)
918
977
 
@@ -927,14 +986,14 @@ on:
927
986
 
928
987
  permissions:
929
988
  contents: read
930
- security-events: write # required for SARIF upload
989
+ security-events: write # required for SARIF upload
931
990
 
932
991
  jobs:
933
992
  scan:
934
993
  runs-on: ubuntu-latest
935
994
  steps:
936
995
  - uses: actions/checkout@v4
937
- with: { fetch-depth: 0 } # needed for --changed-only
996
+ with: { fetch-depth: 0 } # needed for --changed-only
938
997
  - uses: actions/setup-node@v4
939
998
  with: { node-version: 20 }
940
999
  - uses: abhiyoheswaran1/projscan@v1
@@ -987,9 +1046,9 @@ Fields:
987
1046
  - `disableRules` - silence rules by id; supports wildcard `prefix-*`
988
1047
  - `severityOverrides` - remap a rule's severity (`info` / `warning` / `error`)
989
1048
  - `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
990
- - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
1049
+ - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos _(0.14+)_
991
1050
 
992
- See [`docs/GUIDE.md` -> Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
1051
+ See [`docs/GUIDE.md` -> Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
993
1052
 
994
1053
  ## Tracking Health Over Time
995
1054
 
@@ -1002,7 +1061,7 @@ projscan diff # Compare against baseline
1002
1061
  projscan diff --format markdown # Markdown diff for PRs
1003
1062
  ```
1004
1063
 
1005
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
1064
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
1006
1065
 
1007
1066
  ## Hotspots - Where to Fix First
1008
1067
 
@@ -1091,9 +1150,9 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
1091
1150
 
1092
1151
  **This is the primary way to use projscan.** `projscan mcp` starts an [MCP](https://modelcontextprotocol.io) server over stdio so AI coding agents can query your codebase with real structural accuracy - not regex, not grep.
1093
1152
 
1094
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.0/docs/projscan-agent-demo.gif" alt="projscan answering two agent questions: what breaks if I rename buildCodeGraph (impact analysis with definitions, direct callers, transitive reach), and where should I fix first (ranked hotspots with cyclomatic complexity)" width="700">
1153
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/projscan-agent-demo.gif" alt="projscan answering two agent questions: what breaks if I rename buildCodeGraph (impact analysis with definitions, direct callers, transitive reach), and where should I fix first (ranked hotspots with cyclomatic complexity)" width="700">
1095
1154
 
1096
- Two questions an agent asks; structural answers in milliseconds. *"What breaks if I rename `buildCodeGraph`?"* → 31 direct callers, 97 files reachable. *"Where should I fix first?"* → ranked hotspots with AST cyclomatic complexity, churn, and ownership signals.
1155
+ Two questions an agent asks; structural answers in milliseconds. _"What breaks if I rename `buildCodeGraph`?"_ → 31 direct callers, 97 files reachable. _"Where should I fix first?"_ → ranked hotspots with AST cyclomatic complexity, churn, and ownership signals.
1097
1156
 
1098
1157
  ### Claude Code
1099
1158
 
@@ -1218,90 +1277,97 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1218
1277
 
1219
1278
  ### What agents can ask
1220
1279
 
1221
- - *"Who imports `src/auth/jwt.ts`?"* → `projscan_semantic_graph { query: { direction: "importers", file: "src/auth/jwt.ts" } }` or `projscan semantic-graph --query importers --file src/auth/jwt.ts --format json`
1222
- - *"Which files import `chalk`?"* or *"Which files import package `chalk`?"* → `projscan_semantic_graph { query: { direction: "package_importers", symbol: "chalk" } }` or `projscan semantic-graph --query package_importers --symbol chalk --format json`
1223
- - *"Give me the whole agent-safe graph contract."* → `projscan_semantic_graph`
1224
- - *"Did this wrapper connect a source reader to a dangerous sink?"* → `projscan_dataflow`
1225
- - *"Explain issue `missing-test-framework`."* → `projscan_explain_issue { issue_id: "missing-test-framework" }`
1226
- - *"Where is `runAudit` defined?"* → `projscan_semantic_graph { query: { direction: "symbol_defs", symbol: "runAudit" } }` or `projscan semantic-graph --query symbol_defs --symbol runAudit --format json`
1227
- - *"Which files implement auth?"* → `projscan_search { query: "auth", scope: "content" }`
1228
- - *"Who should I ask about auth?"* → `projscan_search { query: "auth" }`
1229
- - *"Which tests cover auth?"* → `projscan_search { query: "tests for auth" }`
1230
- - *"What are the scariest untested files?"* → `projscan_coverage`
1231
- - *"Which files have no tests?"* → `projscan_coverage`
1232
- - *"What breaks if I bump chalk to 6?"* → `projscan_upgrade { package: "chalk" }`
1233
- - *"Show circular dependencies."* → `projscan_coupling { direction: "cycles_only" }` or `projscan coupling --cycles-only --format json`
1234
- - *"What modules are tightly coupled?"* → `projscan_coupling` or `projscan coupling --format json`
1235
- - *"Where should I refactor first?"* → `projscan_hotspots`
1236
- - *"What should my agent do first in this repo?"* → `projscan_start { mode: "before_edit" }`
1237
- - *"How do I understand the repo before editing?"* → `projscan_understand { view: "map" }`
1238
- - *"What should my agent do next?"* → `projscan_workplan { mode: "bug_hunt" }`
1239
- - *"Give the next agent a compact brief."* → `projscan_agent_brief { intent: "bug_hunt" }`
1240
- - *"Show the product quality picture."* → `projscan_quality_scorecard`
1241
- - *"What should I fix before a big release?"* → `projscan_bug_hunt`
1242
- - *"What evidence do I need before approval?"* → `projscan_evidence_pack { website_prompt: true }`
1243
- - *"Which checks prove this bigger product update?"* → `projscan_regression_plan { level: "full" }`
1244
- - *"How do I plan the next six product lines?"* → `projscan_release_train`
1245
- - *"How do I wire projscan into this MCP client?"* → `projscan_adoption { action: "mcp_config", client: "codex" }`
1280
+ - _"Who imports `src/auth/jwt.ts`?"_ → `projscan_semantic_graph { query: { direction: "importers", file: "src/auth/jwt.ts" } }` or `projscan semantic-graph --query importers --file src/auth/jwt.ts --format json`
1281
+ - _"Which files import `chalk`?"_ or _"Which files import package `chalk`?"_ → `projscan_semantic_graph { query: { direction: "package_importers", symbol: "chalk" } }` or `projscan semantic-graph --query package_importers --symbol chalk --format json`
1282
+ - _"Give me the whole agent-safe graph contract."_ → `projscan_semantic_graph`
1283
+ - _"Did this wrapper connect a source reader to a dangerous sink?"_ → `projscan_dataflow`
1284
+ - _"Explain issue `missing-test-framework`."_ → `projscan_explain_issue { issue_id: "missing-test-framework" }`
1285
+ - _"Where is `runAudit` defined?"_ → `projscan_semantic_graph { query: { direction: "symbol_defs", symbol: "runAudit" } }` or `projscan semantic-graph --query symbol_defs --symbol runAudit --format json`
1286
+ - _"Which files implement auth?"_ → `projscan_search { query: "auth", scope: "content" }`
1287
+ - _"Who should I ask about auth?"_ → `projscan_search { query: "auth" }`
1288
+ - _"Which tests cover auth?"_ → `projscan_search { query: "tests for auth" }`
1289
+ - _"What are the scariest untested files?"_ → `projscan_coverage`
1290
+ - _"Which files have no tests?"_ → `projscan_coverage`
1291
+ - _"What breaks if I bump chalk to 6?"_ → `projscan_upgrade { package: "chalk" }`
1292
+ - _"Show circular dependencies."_ → `projscan_coupling { direction: "cycles_only" }` or `projscan coupling --cycles-only --format json`
1293
+ - _"What modules are tightly coupled?"_ → `projscan_coupling` or `projscan coupling --format json`
1294
+ - _"Where should I refactor first?"_ → `projscan_hotspots`
1295
+ - _"What should my agent do first in this repo?"_ → `projscan_start { mode: "before_edit" }`
1296
+ - _"How do I understand the repo before editing?"_ → `projscan_understand { view: "map" }`
1297
+ - _"What should my agent do next?"_ → `projscan_workplan { mode: "bug_hunt" }`
1298
+ - _"Give the next agent a compact brief."_ → `projscan_agent_brief { intent: "bug_hunt" }`
1299
+ - _"Show the product quality picture."_ → `projscan_quality_scorecard`
1300
+ - _"What should I fix before a big release?"_ → `projscan_bug_hunt`
1301
+ - _"What evidence do I need before approval?"_ → `projscan_evidence_pack { website_prompt: true }`
1302
+ - _"Which checks prove this bigger product update?"_ → `projscan_regression_plan { level: "full" }`
1303
+ - _"How do I plan the next six product lines?"_ → `projscan_release_train`
1304
+ - _"How do I wire projscan into this MCP client?"_ → `projscan_adoption { action: "mcp_config", client: "codex" }`
1246
1305
 
1247
1306
  ### The 45 MCP tools
1248
1307
 
1249
1308
  **Structural (0.6.0 / 0.11 / 0.13 / 0.14 / 0.15 - agent-native):**
1250
- - **`projscan_start`** *(3.0.4)* - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
1251
- - **`projscan_understand`** *(3.4)* - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
1252
- - **`projscan_semantic_graph`** *(3.0; query mode 4.0)* - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup — `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` — with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
1253
- - **`projscan_dataflow`** *(3.0)* - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js and Express request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1254
- - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results *(0.15)*.
1255
- - **`projscan_coupling`** *(0.11)* - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
1256
- - **`projscan_pr_diff`** *(0.11)* - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
1257
- - **`projscan_review`** *(0.13)* - one-call PR review. Composes `pr_diff` + per-changed-file risk + new/expanded import cycles + risky function additions + dependency changes + a verdict (`ok` / `review` / `block`).
1258
- - **`projscan_workplan`** *(2.3)* - agent mission-control plan. Composes preflight, review, session, hotspot, plugin, and supply-chain evidence into prioritized tasks with verification commands and handoff text.
1259
- - **`projscan_bug_hunt`** *(2.3)* - ranked bug-hunt queue. Composes doctor issues, preflight, hotspots, and session coordination into fix targets with verification commands.
1260
- - **`projscan_release_train`** *(2.3)* - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
1261
- - **`projscan_evidence_pack`** *(2.3)* - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, optional website prompt evidence, and PR comments with trust calibration, First Fix, owner routing, baseline trend memory, and exact next commands.
1262
- - **`projscan_regression_plan`** *(2.3)* - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
1263
- - **`projscan_agent_brief`** *(2.3)* - compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
1264
- - **`projscan_quality_scorecard`** *(2.3)* - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
1265
- - **`projscan_adoption`** *(2.9)* - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
1266
- - **`projscan_fix_suggest`** *(0.14)* - structured action prompt for any open issue: headline, why it matters, where, one-paragraph instruction, optional suggested test. Closes the diagnose fix loop.
1267
- - **`projscan_explain_issue`** *(0.14)* - deep dive on one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
1268
- - **`projscan_impact`** *(0.15)* - transitive blast-radius for a file or symbol. BFS over reverse imports + symbol callsites. Use BEFORE renaming or deleting to see what breaks.
1269
- - **`projscan_collision`** *(3.6)* - detect change collisions across the repo's in-flight git worktrees (parallel agents). Flags same-file edits and dependency overlaps (one worktree edits a file another's change imports) before the branches merge. Local-first; needs ≥2 worktrees.
1270
- - **`projscan_claim`** *(3.6)* - advisory claims/leases over files, directories, or symbols, shared across the repo's worktrees. `add` returns contention when another agent already holds an overlapping target; `list` / `release` manage them. Local-first.
1271
- - **`projscan_merge_risk`** *(3.6)* - merge-risk preflight across in-flight worktrees: a safe integration order (merge the least-entangled branch first) plus conflict hotspots (files changed by 2+ worktrees). Builds on `projscan_collision`. Local-first.
1272
- - **`projscan_route`** *(3.6)* - map a stated goal (e.g. "what breaks if I rename X") to the right projscan tool with the exact call, or list the full capability catalog. A discovery entry point over the tool surface; deterministic, no LLM.
1273
- - **`projscan_coordinate`** *(3.6)* - one-call swarm coordination read: composes collisions, claims, and merge-risk into a `readiness` verdict (clear / caution / conflicted) with counts and the recommended integration order. The single entry point for the coordination arc. Local-first.
1274
- - **`projscan_coordinate_watch`** *(3.7)* - long-running coordination watch: polls the in-flight worktrees and emits a `notifications/projscan/coordination_changed` notification whenever the swarm state changes. Pairs with `projscan_coordinate`. `start` / `stop` / `list`.
1309
+
1310
+ - **`projscan_start`** _(3.0.4)_ - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
1311
+ - **`projscan_understand`** _(3.4)_ - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
1312
+ - **`projscan_semantic_graph`** _(3.0; query mode 4.0)_ - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
1313
+ - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js and Express request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
1314
+ - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results _(0.15)_.
1315
+ - **`projscan_coupling`** _(0.11)_ - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
1316
+ - **`projscan_pr_diff`** _(0.11)_ - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
1317
+ - **`projscan_review`** _(0.13)_ - one-call PR review. Composes `pr_diff` + per-changed-file risk + new/expanded import cycles + risky function additions + dependency changes + a verdict (`ok` / `review` / `block`).
1318
+ - **`projscan_workplan`** _(2.3)_ - agent mission-control plan. Composes preflight, review, session, hotspot, plugin, and supply-chain evidence into prioritized tasks with verification commands and handoff text.
1319
+ - **`projscan_bug_hunt`** _(2.3)_ - ranked bug-hunt action queue. Composes doctor issues, preflight, hotspots, and session coordination into ranked actions with verification commands.
1320
+ - **`projscan_release_train`** _(2.3)_ - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
1321
+ - **`projscan_evidence_pack`** _(2.3)_ - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, optional website prompt evidence, and PR comments with trust calibration, First Fix, owner routing, baseline trend memory, and exact next commands.
1322
+ - **`projscan_regression_plan`** _(2.3)_ - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
1323
+ - **`projscan_agent_brief`** _(2.3)_ - compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
1324
+ - **`projscan_quality_scorecard`** _(2.3)_ - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
1325
+ - **`projscan_adoption`** _(2.9)_ - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
1326
+ - **`projscan_fix_suggest`** _(0.14)_ - structured action prompt for any open issue: headline, why it matters, where, one-paragraph instruction, optional suggested test. Closes the diagnose fix loop.
1327
+ - **`projscan_explain_issue`** _(0.14)_ - deep dive on one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
1328
+ - **`projscan_impact`** _(0.15)_ - transitive blast-radius for a file or symbol. BFS over reverse imports + symbol callsites. Use BEFORE renaming or deleting to see what breaks.
1329
+ - **`projscan_collision`** _(3.6)_ - detect change collisions across the repo's in-flight git worktrees (parallel agents). Flags same-file edits and dependency overlaps (one worktree edits a file another's change imports) before the branches merge. Local-first; needs ≥2 worktrees.
1330
+ - **`projscan_claim`** _(3.6)_ - advisory claims/leases over files, directories, or symbols, shared across the repo's worktrees. `add` returns contention when another agent already holds an overlapping target; `list` / `release` manage them. Local-first.
1331
+ - **`projscan_merge_risk`** _(3.6)_ - merge-risk preflight across in-flight worktrees: a safe integration order (merge the least-entangled branch first) plus conflict hotspots (files changed by 2+ worktrees). Builds on `projscan_collision`. Local-first.
1332
+ - **`projscan_route`** _(3.6)_ - map a stated goal (e.g. "what breaks if I rename X") to the right projscan tool with the exact call, or list the full capability catalog. A discovery entry point over the tool surface; deterministic, no LLM.
1333
+ - **`projscan_coordinate`** _(3.6)_ - one-call swarm coordination read: composes collisions, claims, and merge-risk into a `readiness` verdict (clear / caution / conflicted) with counts and the recommended integration order. The single entry point for the coordination arc. Local-first.
1334
+ - **`projscan_coordinate_watch`** _(3.7)_ - long-running coordination watch: polls the in-flight worktrees and emits a `notifications/projscan/coordination_changed` notification whenever the swarm state changes. Pairs with `projscan_coordinate`. `start` / `stop` / `list`.
1275
1335
 
1276
1336
  **Analysis:**
1337
+
1277
1338
  - `projscan_analyze` - full project report
1278
1339
  - `projscan_doctor` - health score + issues (now includes `cycle-detected-N` for circular imports as of 0.13)
1279
- - `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"` *(0.13)* for top-N risky individual functions.
1280
- - `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table *(0.13)*
1340
+ - `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"` _(0.13)_ for top-N risky individual functions.
1341
+ - `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table _(0.13)_
1281
1342
  - `projscan_structure` - directory tree
1282
1343
  - `projscan_coverage` - scariest untested files (coverage × hotspots)
1283
1344
 
1284
1345
  **Dependencies:**
1285
- - `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one *(0.13)*.
1346
+
1347
+ - `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one _(0.13)_.
1286
1348
  - `projscan_outdated` - declared-vs-installed drift (offline). Per-package `byWorkspace`; `package` arg.
1287
- - `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps *(0.13)*.
1349
+ - `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps _(0.13)_.
1288
1350
  - `projscan_upgrade` - upgrade preview (CHANGELOG + importers, offline)
1289
1351
 
1290
1352
  **Workspace (0.11):**
1353
+
1291
1354
  - `projscan_workspaces` - list monorepo packages (npm/yarn/pnpm/Nx/Turbo/Lerna). Use the `name` as the `package` arg on `projscan_hotspots` / `projscan_coupling` to scope.
1292
1355
 
1293
1356
  **Session (1.4):**
1294
- - **`projscan_session`** *(1.4)* - durable cross-invocation session. Subactions: `current` (id + counts), `touched` (files touched this session, sorted by recency, filterable by source: `tool-result` / `fs-watch` / `explicit`), `events` (chronological log), `reset` (start a fresh session). Auto-populated from every tool result and from `notifications/file_changed` push events when `--watch` is on. MCP resources and agent briefs add `coordinationHints` so agents can separate current worktree checks from remembered session context before parallel edits continue.
1357
+
1358
+ - **`projscan_session`** _(1.4)_ - durable cross-invocation session. Subactions: `current` (id + counts), `touched` (files touched this session, sorted by recency, filterable by source: `tool-result` / `fs-watch` / `explicit`), `events` (chronological log), `reset` (start a fresh session). Auto-populated from every tool result and from `notifications/file_changed` push events when `--watch` is on. MCP resources and agent briefs add `coordinationHints` so agents can separate current worktree checks from remembered session context before parallel edits continue.
1295
1359
 
1296
1360
  **Memory (1.5):**
1297
- - **`projscan_memory`** *(1.5)* - durable, local-only feedback loop. Records, per analyzer rule id, how many runs surfaced it and how many fixed it. Subactions: `current` (aggregate counts), `stable` (rules surfaced across ≥ 3 runs over ≥ 7 days without ever being fixed — paired with a ready-to-paste `.projscanrc.json disableRules` snippet), `runs` (every tracked rule with full history), `forget` (drop a single rule). Stored at `.projscan-memory/memory.json`; never leaves the machine. Lets an agent ask "what is this project tolerating?" and propose quieting it.
1361
+
1362
+ - **`projscan_memory`** _(1.5)_ - durable, local-only feedback loop. Records, per analyzer rule id, how many runs surfaced it and how many fixed it. Subactions: `current` (aggregate counts), `stable` (rules surfaced across ≥ 3 runs over ≥ 7 days without ever being fixed — paired with a ready-to-paste `.projscanrc.json disableRules` snippet), `runs` (every tracked rule with full history), `forget` (drop a single rule). Stored at `.projscan-memory/memory.json`; never leaves the machine. Lets an agent ask "what is this project tolerating?" and propose quieting it.
1298
1363
 
1299
1364
  **Operator (1.6):**
1300
- - **`projscan_workspace_graph`** *(1.6)* - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
1301
- - **`projscan_apply_fix`** *(1.6)* - mechanically execute the safe fix templates. Default is dry-run; pass `confirm: true` to write. Atomic writes, per-apply rollback record at `.projscan-cache/rollbacks/<id>.json`. Reverse with `action: "rollback", rollback_id: ...`. Six templates supported at this release: `unused-dependency-*`, `missing-test-framework`, `missing-eslint`, `missing-prettier`, `missing-editorconfig`, `missing-readme`.
1302
- - **`projscan_taint`** *(1.6)* - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.2, review surfaces hardened `newDataflowRisks`, compact `graphEvidence`, and graph-readiness gates for safer handoff.
1303
1365
 
1304
- Analyzer plugins can optionally read graph/dataflow context through `check(rootPath, files, context)` while staying on manifest schema v1. The packaged `graph-context` example shows `context.getSemanticGraph()` and `context.getDataflow()` in a real analyzer. For analyzer and reporter plugin authoring, manifest validation, `--reporter <name>`, and the trust model, see [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.0/docs/PLUGIN-AUTHORING.md).
1366
+ - **`projscan_workspace_graph`** _(1.6)_ - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by 2 repos the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
1367
+ - **`projscan_apply_fix`** _(1.6)_ - mechanically execute the safe fix templates. Default is dry-run; pass `confirm: true` to write. Atomic writes, per-apply rollback record at `.projscan-cache/rollbacks/<id>.json`. Reverse with `action: "rollback", rollback_id: ...`. Six templates supported at this release: `unused-dependency-*`, `missing-test-framework`, `missing-eslint`, `missing-prettier`, `missing-editorconfig`, `missing-readme`.
1368
+ - **`projscan_taint`** _(1.6)_ - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.2, review surfaces hardened `newDataflowRisks`, compact `graphEvidence`, and graph-readiness gates for safer handoff.
1369
+
1370
+ Analyzer plugins can optionally read graph/dataflow context through `check(rootPath, files, context)` while staying on manifest schema v1. The packaged `graph-context` example shows `context.getSemanticGraph()` and `context.getDataflow()` in a real analyzer. For analyzer and reporter plugin authoring, manifest validation, `--reporter <name>`, and the trust model, see [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-AUTHORING.md).
1305
1371
 
1306
1372
  ### Context-window budgeting
1307
1373
 
@@ -1313,7 +1379,7 @@ Analyzer plugins can optionally read graph/dataflow context through `check(rootP
1313
1379
 
1314
1380
  ### Semantic search (0.9.0+, opt-in)
1315
1381
 
1316
- projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like *"which file implements auth"* hit files that don't literally contain the word "auth" - install the optional peer:
1382
+ projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like _"which file implements auth"_ hit files that don't literally contain the word "auth" - install the optional peer:
1317
1383
 
1318
1384
  ```bash
1319
1385
  npm install @xenova/transformers
@@ -1321,11 +1387,16 @@ projscan search "verifying user credentials" --mode semantic
1321
1387
  ```
1322
1388
 
1323
1389
  Or via the MCP tool:
1390
+
1324
1391
  ```json
1325
- { "name": "projscan_search", "arguments": { "query": "verifying user credentials", "mode": "semantic" } }
1392
+ {
1393
+ "name": "projscan_search",
1394
+ "arguments": { "query": "verifying user credentials", "mode": "semantic" }
1395
+ }
1326
1396
  ```
1327
1397
 
1328
1398
  Modes on `projscan_search`:
1399
+
1329
1400
  - `lexical` (default) - BM25 over content + symbol + path boosts. No peer needed.
1330
1401
  - `semantic` - cosine similarity on `Xenova/all-MiniLM-L6-v2` embeddings. Requires peer.
1331
1402
  - `hybrid` - both, fused via Reciprocal Rank Fusion. Requires peer.
@@ -1347,14 +1418,16 @@ All opt-in - default behavior is unchanged.
1347
1418
  projscan caches parsed ASTs at `.projscan-cache/graph.json` (auto-gitignored). First run populates it; subsequent runs re-parse only files whose `mtime` changed. Agent queries on a warm cache are milliseconds, not seconds.
1348
1419
 
1349
1420
  ### Prompts (6, parameterized with live project data)
1421
+
1350
1422
  - `prioritize_refactoring` - ranked plan grounded in current hotspots
1351
1423
  - `investigate_file` - senior-engineer brief for a specific file
1352
- - **`refactor_hotspot`** *(1.5)* - step-by-step refactor plan for one hotspot file
1353
- - **`triage_doctor_issues`** *(1.5)* - critical / important / backlog ordering of open issues
1354
- - **`review_this_pr`** *(1.5)* - PR-comment-ready review primed with the structural diff and verdict
1355
- - **`safely_rename_symbol`** *(1.5)* - ordered rename + verification checklist via `projscan_impact` blast radius
1424
+ - **`refactor_hotspot`** _(1.5)_ - step-by-step refactor plan for one hotspot file
1425
+ - **`triage_doctor_issues`** _(1.5)_ - critical / important / backlog ordering of open issues
1426
+ - **`review_this_pr`** _(1.5)_ - PR-comment-ready review primed with the structural diff and verdict
1427
+ - **`safely_rename_symbol`** _(1.5)_ - ordered rename + verification checklist via `projscan_impact` blast radius
1356
1428
 
1357
1429
  ### Resources (3, readable on demand)
1430
+
1358
1431
  - `projscan://health` · `projscan://hotspots` · `projscan://structure`
1359
1432
 
1360
1433
  ## Use Cases