projscan 4.8.0 → 4.9.2

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 (264) hide show
  1. package/README.md +102 -58
  2. package/dist/analyzers/deadCodeCheck.js +93 -0
  3. package/dist/analyzers/deadCodeCheck.js.map +1 -1
  4. package/dist/analyzers/unusedDependencyCheck.js +10 -10
  5. package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
  6. package/dist/cli/commands/bugHunt.js +37 -8
  7. package/dist/cli/commands/bugHunt.js.map +1 -1
  8. package/dist/cli/commands/feedback.js +47 -1
  9. package/dist/cli/commands/feedback.js.map +1 -1
  10. package/dist/cli/commands/preflight.js +18 -2
  11. package/dist/cli/commands/preflight.js.map +1 -1
  12. package/dist/cli/commands/privacyCheck.js +5 -2
  13. package/dist/cli/commands/privacyCheck.js.map +1 -1
  14. package/dist/cli/commands/releaseTrain.js +9 -1
  15. package/dist/cli/commands/releaseTrain.js.map +1 -1
  16. package/dist/cli/commands/startAction.d.ts +2 -1
  17. package/dist/cli/commands/startAction.js +4 -4
  18. package/dist/cli/commands/startAction.js.map +1 -1
  19. package/dist/cli/commands/startConsole.d.ts +1 -0
  20. package/dist/cli/commands/startConsole.js +83 -7
  21. package/dist/cli/commands/startConsole.js.map +1 -1
  22. package/dist/cli/commands/startOptionsRegistration.js +1 -1
  23. package/dist/cli/commands/startOptionsRegistration.js.map +1 -1
  24. package/dist/core/adoption.js +13 -0
  25. package/dist/core/adoption.js.map +1 -1
  26. package/dist/core/bugHunt.js +62 -22
  27. package/dist/core/bugHunt.js.map +1 -1
  28. package/dist/core/bugHuntPreflightFindings.js +5 -2
  29. package/dist/core/bugHuntPreflightFindings.js.map +1 -1
  30. package/dist/core/evidenceComment.d.ts +2 -1
  31. package/dist/core/evidenceComment.js +45 -7
  32. package/dist/core/evidenceComment.js.map +1 -1
  33. package/dist/core/feedback.d.ts +2 -1
  34. package/dist/core/feedback.js +186 -0
  35. package/dist/core/feedback.js.map +1 -1
  36. package/dist/core/frameworkAstroSources.d.ts +2 -0
  37. package/dist/core/frameworkAstroSources.js +71 -0
  38. package/dist/core/frameworkAstroSources.js.map +1 -0
  39. package/dist/core/frameworkSourceResolvers.js +6 -0
  40. package/dist/core/frameworkSourceResolvers.js.map +1 -1
  41. package/dist/core/frameworkSources.js +2 -0
  42. package/dist/core/frameworkSources.js.map +1 -1
  43. package/dist/core/importGraph.d.ts +2 -0
  44. package/dist/core/importGraph.js +14 -5
  45. package/dist/core/importGraph.js.map +1 -1
  46. package/dist/core/intentRouterCatalog.js +8 -3
  47. package/dist/core/intentRouterCatalog.js.map +1 -1
  48. package/dist/core/intentRouterDependencySignals.d.ts +1 -0
  49. package/dist/core/intentRouterDependencySignals.js +14 -0
  50. package/dist/core/intentRouterDependencySignals.js.map +1 -1
  51. package/dist/core/intentRouterKeywordEarlyGuards.js +24 -1
  52. package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -1
  53. package/dist/core/intentRouterKeywordWeights.js +6 -0
  54. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  55. package/dist/core/intentRouterPreflightSignals.js +7 -2
  56. package/dist/core/intentRouterPreflightSignals.js.map +1 -1
  57. package/dist/core/intentRouterRegressionKeywordMatches.js +9 -2
  58. package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -1
  59. package/dist/core/intentRouterRegressionSignals.d.ts +1 -0
  60. package/dist/core/intentRouterRegressionSignals.js +11 -1
  61. package/dist/core/intentRouterRegressionSignals.js.map +1 -1
  62. package/dist/core/intentRouterReleaseSignals.js +2 -2
  63. package/dist/core/intentRouterReleaseSignals.js.map +1 -1
  64. package/dist/core/intentRouterVerificationSignals.js +5 -0
  65. package/dist/core/intentRouterVerificationSignals.js.map +1 -1
  66. package/dist/core/intentRouterWorkSignals.js +4 -2
  67. package/dist/core/intentRouterWorkSignals.js.map +1 -1
  68. package/dist/core/languages/LanguageAdapter.d.ts +2 -0
  69. package/dist/core/languages/javascriptAdapter.js +7 -28
  70. package/dist/core/languages/javascriptAdapter.js.map +1 -1
  71. package/dist/core/languages/javascriptProjectConfig.d.ts +20 -0
  72. package/dist/core/languages/javascriptProjectConfig.js +479 -0
  73. package/dist/core/languages/javascriptProjectConfig.js.map +1 -0
  74. package/dist/core/preflightCautionBudget.d.ts +2 -0
  75. package/dist/core/preflightCautionBudget.js +85 -0
  76. package/dist/core/preflightCautionBudget.js.map +1 -0
  77. package/dist/core/preflightInputs.d.ts +30 -2
  78. package/dist/core/preflightInputs.js +39 -12
  79. package/dist/core/preflightInputs.js.map +1 -1
  80. package/dist/core/preflightReasons.js +35 -9
  81. package/dist/core/preflightReasons.js.map +1 -1
  82. package/dist/core/preflightReleaseScale.js +16 -5
  83. package/dist/core/preflightReleaseScale.js.map +1 -1
  84. package/dist/core/preflightReport.js +3 -0
  85. package/dist/core/preflightReport.js.map +1 -1
  86. package/dist/core/preflightSuggestedActions.js +3 -1
  87. package/dist/core/preflightSuggestedActions.js.map +1 -1
  88. package/dist/core/preflightVerdict.js +3 -0
  89. package/dist/core/preflightVerdict.js.map +1 -1
  90. package/dist/core/qualityScorecard.js +39 -21
  91. package/dist/core/qualityScorecard.js.map +1 -1
  92. package/dist/core/releaseEvidence.d.ts +2 -2
  93. package/dist/core/releaseEvidence.js +3 -2
  94. package/dist/core/releaseEvidence.js.map +1 -1
  95. package/dist/core/releaseEvidenceArtifacts.js +12 -4
  96. package/dist/core/releaseEvidenceArtifacts.js.map +1 -1
  97. package/dist/core/releaseTrain.d.ts +11 -1
  98. package/dist/core/releaseTrain.js +54 -2
  99. package/dist/core/releaseTrain.js.map +1 -1
  100. package/dist/core/repositoryScanner.js +5 -2
  101. package/dist/core/repositoryScanner.js.map +1 -1
  102. package/dist/core/reviewVerdict.js +37 -5
  103. package/dist/core/reviewVerdict.js.map +1 -1
  104. package/dist/core/startAdoptionGaps.js +1 -1
  105. package/dist/core/startAdoptionGaps.js.map +1 -1
  106. package/dist/core/startClaimTargets.d.ts +2 -0
  107. package/dist/core/startClaimTargets.js +14 -0
  108. package/dist/core/startClaimTargets.js.map +1 -0
  109. package/dist/core/startDailyWorkflows.d.ts +2 -0
  110. package/dist/core/startDailyWorkflows.js +50 -0
  111. package/dist/core/startDailyWorkflows.js.map +1 -0
  112. package/dist/core/startEnvTargets.d.ts +1 -0
  113. package/dist/core/startEnvTargets.js +9 -0
  114. package/dist/core/startEnvTargets.js.map +1 -0
  115. package/dist/core/startFileTargets.d.ts +2 -0
  116. package/dist/core/startFileTargets.js +19 -0
  117. package/dist/core/startFileTargets.js.map +1 -0
  118. package/dist/core/startGeneratedConfigSearchTargets.d.ts +1 -0
  119. package/dist/core/startGeneratedConfigSearchTargets.js +22 -0
  120. package/dist/core/startGeneratedConfigSearchTargets.js.map +1 -0
  121. package/dist/core/startGraphTargets.d.ts +10 -0
  122. package/dist/core/startGraphTargets.js +82 -0
  123. package/dist/core/startGraphTargets.js.map +1 -0
  124. package/dist/core/startHighPrioritySearchTargets.d.ts +1 -0
  125. package/dist/core/startHighPrioritySearchTargets.js +24 -0
  126. package/dist/core/startHighPrioritySearchTargets.js.map +1 -0
  127. package/dist/core/startImpactTargets.d.ts +1 -0
  128. package/dist/core/startImpactTargets.js +18 -0
  129. package/dist/core/startImpactTargets.js.map +1 -0
  130. package/dist/core/startIntentApiContractQueries.d.ts +1 -0
  131. package/dist/core/startIntentApiContractQueries.js +50 -0
  132. package/dist/core/startIntentApiContractQueries.js.map +1 -0
  133. package/dist/core/startIntentAuthorizationQueries.d.ts +1 -0
  134. package/dist/core/startIntentAuthorizationQueries.js +29 -0
  135. package/dist/core/startIntentAuthorizationQueries.js.map +1 -0
  136. package/dist/core/startIntentBackgroundWorkQueries.d.ts +1 -0
  137. package/dist/core/startIntentBackgroundWorkQueries.js +23 -0
  138. package/dist/core/startIntentBackgroundWorkQueries.js.map +1 -0
  139. package/dist/core/startIntentCommunicationArtifactQueries.d.ts +1 -0
  140. package/dist/core/startIntentCommunicationArtifactQueries.js +25 -0
  141. package/dist/core/startIntentCommunicationArtifactQueries.js.map +1 -0
  142. package/dist/core/startIntentDataAccessQueries.d.ts +1 -0
  143. package/dist/core/startIntentDataAccessQueries.js +60 -0
  144. package/dist/core/startIntentDataAccessQueries.js.map +1 -0
  145. package/dist/core/startIntentDataContractQueries.d.ts +1 -0
  146. package/dist/core/startIntentDataContractQueries.js +75 -0
  147. package/dist/core/startIntentDataContractQueries.js.map +1 -0
  148. package/dist/core/startIntentDomainSearchQueries.d.ts +1 -0
  149. package/dist/core/startIntentDomainSearchQueries.js +47 -0
  150. package/dist/core/startIntentDomainSearchQueries.js.map +1 -0
  151. package/dist/core/startIntentDomainWorkflowQueries.d.ts +1 -0
  152. package/dist/core/startIntentDomainWorkflowQueries.js +28 -0
  153. package/dist/core/startIntentDomainWorkflowQueries.js.map +1 -0
  154. package/dist/core/startIntentFrontendPageRouteQueries.d.ts +1 -0
  155. package/dist/core/startIntentFrontendPageRouteQueries.js +26 -0
  156. package/dist/core/startIntentFrontendPageRouteQueries.js.map +1 -0
  157. package/dist/core/startIntentInfraArtifactQueries.d.ts +1 -0
  158. package/dist/core/startIntentInfraArtifactQueries.js +62 -0
  159. package/dist/core/startIntentInfraArtifactQueries.js.map +1 -0
  160. package/dist/core/startIntentIntegrationQueries.d.ts +1 -0
  161. package/dist/core/startIntentIntegrationQueries.js +96 -0
  162. package/dist/core/startIntentIntegrationQueries.js.map +1 -0
  163. package/dist/core/startIntentNavigationLayoutQueries.d.ts +1 -0
  164. package/dist/core/startIntentNavigationLayoutQueries.js +22 -0
  165. package/dist/core/startIntentNavigationLayoutQueries.js.map +1 -0
  166. package/dist/core/startIntentObservabilityQueries.d.ts +1 -0
  167. package/dist/core/startIntentObservabilityQueries.js +26 -0
  168. package/dist/core/startIntentObservabilityQueries.js.map +1 -0
  169. package/dist/core/startIntentReliabilityQueries.d.ts +1 -0
  170. package/dist/core/startIntentReliabilityQueries.js +85 -0
  171. package/dist/core/startIntentReliabilityQueries.js.map +1 -0
  172. package/dist/core/startIntentStateManagementQueries.d.ts +1 -0
  173. package/dist/core/startIntentStateManagementQueries.js +61 -0
  174. package/dist/core/startIntentStateManagementQueries.js.map +1 -0
  175. package/dist/core/startIntentStyleSystemQueries.d.ts +1 -0
  176. package/dist/core/startIntentStyleSystemQueries.js +26 -0
  177. package/dist/core/startIntentStyleSystemQueries.js.map +1 -0
  178. package/dist/core/startIntentTargetText.d.ts +2 -0
  179. package/dist/core/startIntentTargetText.js +9 -0
  180. package/dist/core/startIntentTargetText.js.map +1 -0
  181. package/dist/core/startIntentTargets.d.ts +10 -24
  182. package/dist/core/startIntentTargets.js +15 -1123
  183. package/dist/core/startIntentTargets.js.map +1 -1
  184. package/dist/core/startIntentTestDataQueries.d.ts +1 -0
  185. package/dist/core/startIntentTestDataQueries.js +28 -0
  186. package/dist/core/startIntentTestDataQueries.js.map +1 -0
  187. package/dist/core/startIntentToolingConfigQueries.d.ts +1 -0
  188. package/dist/core/startIntentToolingConfigQueries.js +31 -0
  189. package/dist/core/startIntentToolingConfigQueries.js.map +1 -0
  190. package/dist/core/startIntentUiInteractionQueries.d.ts +1 -0
  191. package/dist/core/startIntentUiInteractionQueries.js +71 -0
  192. package/dist/core/startIntentUiInteractionQueries.js.map +1 -0
  193. package/dist/core/startIssueTargets.d.ts +1 -0
  194. package/dist/core/startIssueTargets.js +19 -0
  195. package/dist/core/startIssueTargets.js.map +1 -0
  196. package/dist/core/startMissionPolicy.d.ts +2 -2
  197. package/dist/core/startMissionPolicy.js +63 -7
  198. package/dist/core/startMissionPolicy.js.map +1 -1
  199. package/dist/core/startMode.d.ts +3 -1
  200. package/dist/core/startMode.js +39 -7
  201. package/dist/core/startMode.js.map +1 -1
  202. package/dist/core/startOptions.d.ts +2 -2
  203. package/dist/core/startOptions.js +1 -1
  204. package/dist/core/startOptions.js.map +1 -1
  205. package/dist/core/startOwnershipSearchTargets.d.ts +2 -0
  206. package/dist/core/startOwnershipSearchTargets.js +23 -0
  207. package/dist/core/startOwnershipSearchTargets.js.map +1 -0
  208. package/dist/core/startPackageTargets.d.ts +4 -0
  209. package/dist/core/startPackageTargets.js +91 -0
  210. package/dist/core/startPackageTargets.js.map +1 -0
  211. package/dist/core/startQuotedTextTargets.d.ts +1 -0
  212. package/dist/core/startQuotedTextTargets.js +7 -0
  213. package/dist/core/startQuotedTextTargets.js.map +1 -0
  214. package/dist/core/startReportBuilder.d.ts +1 -0
  215. package/dist/core/startReportBuilder.js +2 -1
  216. package/dist/core/startReportBuilder.js.map +1 -1
  217. package/dist/core/startReportContext.d.ts +1 -0
  218. package/dist/core/startReportContext.js +3 -0
  219. package/dist/core/startReportContext.js.map +1 -1
  220. package/dist/core/startReportScopeTargets.d.ts +1 -0
  221. package/dist/core/startReportScopeTargets.js +56 -0
  222. package/dist/core/startReportScopeTargets.js.map +1 -0
  223. package/dist/core/startShellArgs.d.ts +4 -0
  224. package/dist/core/startShellArgs.js +19 -0
  225. package/dist/core/startShellArgs.js.map +1 -0
  226. package/dist/core/startSymbolTargets.d.ts +2 -0
  227. package/dist/core/startSymbolTargets.js +28 -0
  228. package/dist/core/startSymbolTargets.js.map +1 -0
  229. package/dist/core/startTestRouteSearchTargets.d.ts +1 -0
  230. package/dist/core/startTestRouteSearchTargets.js +34 -0
  231. package/dist/core/startTestRouteSearchTargets.js.map +1 -0
  232. package/dist/core/understand.js +20 -22
  233. package/dist/core/understand.js.map +1 -1
  234. package/dist/core/workplan.js +24 -12
  235. package/dist/core/workplan.js.map +1 -1
  236. package/dist/mcp/tools/workspaceGraph.js +12 -9
  237. package/dist/mcp/tools/workspaceGraph.js.map +1 -1
  238. package/dist/projscan-sbom.cdx.json +6 -6
  239. package/dist/publicAgent.d.ts +1 -1
  240. package/dist/publicAgent.js +1 -1
  241. package/dist/publicAgent.js.map +1 -1
  242. package/dist/tool-manifest.json +2 -2
  243. package/dist/types/bugHunt.d.ts +1 -1
  244. package/dist/types/dogfood.d.ts +17 -0
  245. package/dist/types/evidencePack.d.ts +8 -0
  246. package/dist/types/preflight.d.ts +18 -0
  247. package/dist/types/releaseTrain.d.ts +7 -0
  248. package/dist/types/startCommon.d.ts +8 -0
  249. package/dist/types/startMissionControl.d.ts +2 -1
  250. package/dist/utils/fileWalker.d.ts +1 -0
  251. package/dist/utils/fileWalker.js +6 -1
  252. package/dist/utils/fileWalker.js.map +1 -1
  253. package/dist/utils/formatSupport.d.ts +1 -0
  254. package/dist/utils/formatSupport.js +1 -0
  255. package/dist/utils/formatSupport.js.map +1 -1
  256. package/docs/GUIDE.md +50 -11
  257. package/docs/ROADMAP.md +41 -16
  258. package/docs/demos/projscan-4-1-demo.html +4 -4
  259. package/docs/examples/adoption-workflows.md +48 -0
  260. package/docs/projscan-mission-control.gif +0 -0
  261. package/docs/projscan-mission-control.png +0 -0
  262. package/docs/projscan-mission-proof.gif +0 -0
  263. package/docs/projscan-proof-router.png +0 -0
  264. package/package.json +12 -12
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![node](https://img.shields.io/node/v/projscan.svg)](https://nodejs.org)
8
8
  [![projscan health](https://img.shields.io/badge/projscan-A-brightgreen)](#quick-start)
9
9
 
10
- **Agent-first code intelligence.** An MCP server that lets AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, Cline, Continue, Zed any MCP-aware client) query your codebase with a CLI for humans and a local plugin layer for team-specific policy and reporting.
10
+ **Local proof for AI-assisted engineering workflows.** An MCP server and CLI that helps agents and humans answer three review questions: what to read before editing, what to fix before handoff, and what needs review before a release candidate.
11
11
 
12
12
  [AI Agent Quick Start](#ai-agent-integration-mcp) · [CLI Quick Start](#quick-start) · [Commands](#commands) · [Full Guide](docs/GUIDE.md) · [Roadmap](docs/ROADMAP.md)
13
13
 
@@ -19,15 +19,17 @@
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 a common 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 and proof commands, not a broad scan to summarize.
23
23
 
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.
24
+ **projscan is a local evidence tool for agent-assisted engineering.** It is most useful in three daily workflows: before editing, before handoff or commit, and before release-candidate review. Start there before scanning the full command catalog.
25
25
 
26
- For teams, projscan turns that context into a repeatable PR habit. `projscan init team` creates policy, CI, ownership, and baseline memory. `projscan evidence-pack --pr-comment` gives reviewers a compact verdict with top risks, First Fix, owner routing, baseline trend memory, and exact next commands. `projscan feedback`, `projscan dogfood`, and `projscan trial` measure whether the loop actually saved time, prevented risky edits, and stayed trustworthy across real repos.
26
+ MCP clients and humans can still query repo maps, semantic graph evidence, dataflow risks, review verdicts, hotspots, ownership, preflight gates, fix prompts, impact analysis, and session context. Those tools matter when they make one of the three workflows easier to verify.
27
+
28
+ For teams, projscan can turn the workflow into a repeatable PR habit. `projscan init team` creates policy, CI, ownership, and baseline memory. `projscan evidence-pack --pr-comment` gives reviewers a compact verdict with top risks, First Fix, owner routing, baseline trend memory, and exact next commands. `projscan feedback`, `projscan dogfood`, and `projscan trial` measure whether the loop saved time, prevented risky edits, and stayed trustworthy across real repos.
27
29
 
28
30
  The local plugin platform lets teams add project-specific findings and render `doctor`, `analyze`, and `ci` in their own voice without changing the scan pipeline. Humans get the same information through the CLI.
29
31
 
30
- **Everything is local-first. No source upload. No API keys. `.gitignore` is respected by default. `.env` values are path-only unless explicitly enabled. Anonymous product telemetry is off by default and only runs after explicit opt-in.**
32
+ **Core scans run locally by default. No source upload. No projscan account or API key. `.gitignore` is respected by default. `.env` values are path-only unless explicitly enabled. Anonymous product telemetry is off by default and only runs after explicit opt-in. Network-capable paths are explicit: `audit`, registry checks, opt-in telemetry, and optional semantic model downloads.**
31
33
 
32
34
  ```bash
33
35
  npx projscan
@@ -35,29 +37,31 @@ npx projscan
35
37
 
36
38
  <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
39
 
38
- ## What's New in 4.8.0
39
-
40
- 4.8.0 turns the post-4.7 agent-research loop into release-ready hardening:
41
- SvelteKit dataflow precision, safer continuation routing, clearer coordination
42
- handoffs, sharper Python dependency evidence, and smaller internal modules.
43
-
44
- - **SvelteKit dataflow coverage.** `RequestEvent` handlers and hooks now
45
- classify request body readers, headers, URL, params, and cookies through
46
- framework-gated source patterns.
47
- - **No-release continuation routing.** Autonomous improvement prompts now route
48
- to bounded workplans while release, publish, deploy, push, merge, and
49
- version-bump actions stay blocked unless a release task is active.
50
- - **Scoped evidence prompts.** Shareable redacted evidence requests can infer
51
- top-level directory scopes such as `tests` and produce concrete local
52
- analyze/doctor/CI commands.
53
- - **Coordination handoffs.** Agent briefs now carry clearer merge-order hints
54
- and preflight coordination proof paths for parallel-agent work.
55
- - **Python dependency evidence.** Upgrade previews handle numeric-looking
56
- package names, Poetry dependency source lines, nested requirements, and nested
57
- constraints more reliably.
58
- - **Maintainability cleanup.** Mission Control route criteria, public start
59
- types, plugin loading, telemetry helpers, preflight/report assembly, code
60
- graph indexing, and HTML reporters have been split into focused modules.
40
+ ## What's New in 4.9.2
41
+
42
+ 4.9.2 is a trust patch for teams using projscan on real PRs. It reduces
43
+ unused-export noise in alias-heavy and Next.js apps, makes Start proof commands
44
+ explicit, and trims PR feedback prompts so reviewers can report usefulness or
45
+ noise without reading a wall of instructions.
46
+
47
+ - **Fewer unused-export false positives.** TypeScript path aliases, local
48
+ package aliases, and Next.js App Router entrypoints now count as real usage
49
+ where the framework or compiler owns the import path.
50
+ - **Explicit proof commands.** Start, workplan, handoff, CLI shortcut, and MCP
51
+ resume surfaces now use `projscan preflight --mode before_edit --format json`
52
+ for before-edit proof instead of the ambiguous generic preflight command.
53
+ - **Compact reviewer feedback.** Evidence-pack PR comments keep the Developer
54
+ Feedback section, but reduce it to three actions: record usefulness, minutes
55
+ saved, and noisy or false-positive signals.
56
+ - **Caution triage.** Preflight cautions now separate fix-now items,
57
+ review-only signals, and manual sign-off gates, which keeps release comments
58
+ from treating scale review as an actual defect.
59
+ - **Faster preflight input gathering.** Independent evidence collection runs in
60
+ parallel where it is safe, reducing local preflight wait time without changing
61
+ the report schema.
62
+ - **Release verification cleanup.** The source test suite and PR-comment
63
+ fixtures now validate the current compact feedback and explicit-proof
64
+ behavior before publishing.
61
65
 
62
66
  <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">
63
67
 
@@ -155,7 +159,7 @@ Console output shows the same model for humans:
155
159
  ```text
156
160
  Execution Plan
157
161
  Run 1 ready step, resolve 2 input(s), then gather 4 proof command(s).
158
- - [ready] Next Action
162
+ - [ready] Ready Commands
159
163
  - Find exact target for impact analysis: projscan search "auth token loader" --format json
160
164
  - [blocked] Resolve Inputs
161
165
  - symbol: Replace <symbol-from-search> with an exported symbol returned by the search step.
@@ -274,6 +278,45 @@ Or run directly without installing:
274
278
  npx projscan
275
279
  ```
276
280
 
281
+ ## Daily workflows
282
+
283
+ Use these three workflows before scanning the full command catalog.
284
+
285
+ ### Before editing a feature
286
+
287
+ ```bash
288
+ projscan start --intent "what files do I need to change for auth?"
289
+ projscan understand --view change --intent "add auth token refresh" --format json
290
+ projscan preflight --mode before_edit --format json
291
+ ```
292
+
293
+ Success criteria: the agent has a cited change map, likely touched files,
294
+ read-first context, and a before-edit gate before it writes code.
295
+
296
+ ### Before handoff or commit
297
+
298
+ ```bash
299
+ projscan bug-hunt --format json
300
+ projscan preflight --mode before_commit --format json
301
+ projscan evidence-pack --pr-comment
302
+ ```
303
+
304
+ Success criteria: concrete defects are separated from manual review gates, the
305
+ handoff includes exact proof commands, and reviewers can see the next action
306
+ without reading an agent transcript.
307
+
308
+ ### Before release-candidate review
309
+
310
+ ```bash
311
+ projscan release-train --format json
312
+ projscan preflight --mode before_merge --format json
313
+ projscan evidence-pack --pr-comment
314
+ ```
315
+
316
+ Success criteria: release-readiness output stays read-only, `caution` explains
317
+ whether the work needs fixes or manual sign-off, and no version, publish, tag,
318
+ or deploy step is implied.
319
+
277
320
  ## Quick Start
278
321
 
279
322
  Run this path first inside a repository:
@@ -596,7 +639,7 @@ For maintainers changing trust-sensitive behavior:
596
639
  npm run test:trust-smoke
597
640
  ```
598
641
 
599
- The full command catalog is below. Most users should start with the five-command path above instead of scanning the catalog.
642
+ The full command catalog is below. Most users should start with the daily workflows above instead of scanning the catalog.
600
643
 
601
644
  <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
602
645
 
@@ -622,7 +665,7 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
622
665
  | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
623
666
  | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
624
667
  | `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
625
- | `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 |
668
+ | `projscan start` | First-60-seconds workflow orientation with daily workflows, 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 |
626
669
  | `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
627
670
  | `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
628
671
  | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
@@ -632,7 +675,7 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
632
675
  | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
633
676
  | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
634
677
  | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
635
- | `projscan bug-hunt` | Prioritized bug-hunt action queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
678
+ | `projscan bug-hunt` | Prioritized bug-hunt action queue from doctor, preflight, and session evidence; manual sign-off-only queues print review wording while JSON verdict compatibility is preserved, and hotspot-only churn stays as a watchlist signal |
636
679
  | `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
637
680
  | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
638
681
  | `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
@@ -715,6 +758,7 @@ projscan mission-proof --format markdown # Mission proof report for handoffs
715
758
  projscan mission-proof --write reports/mission-proof.md # Save Markdown proof
716
759
  projscan ci --format sarif # SARIF 2.1.0 for GitHub Code Scanning
717
760
  projscan analyze --report-scope src/api --redact-paths --format json # Scoped, redacted shareable evidence
761
+ projscan analyze --report-scope "src/api,packages/backend" --redact-paths --format json # Multi-scope partner evidence
718
762
  projscan doctor --report-policy apiEvidence --format markdown # Reuse a configured evidence policy
719
763
  ```
720
764
 
@@ -880,23 +924,23 @@ For real-world numbers against larger codebases, `npm run bench:references` shal
880
924
 
881
925
  Run `npm run bench` against your own machine to recalibrate.
882
926
 
883
- - **Zero network requests** — everything runs locally
884
- - **14 runtime dependencies** — still minimal
885
- - **~21 MB of vendored tree-sitter grammars**, broken down:
886
-
887
- | Grammar | Size | Languages |
888
- | --------------------- | ------: | ---------------------------------- |
889
- | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
890
- | `tree-sitter-python` | ~450 KB | Python |
891
- | `tree-sitter-go` | ~210 KB | Go |
892
- | `tree-sitter-java` | ~405 KB | Java |
893
- | `tree-sitter-ruby` | ~2.0 MB | Ruby |
894
- | `tree-sitter-rust` | ~1.1 MB | Rust |
895
- | `tree-sitter-php` | ~785 KB | PHP |
896
- | `tree-sitter-c-sharp` | ~5.2 MB | C# |
897
- | `tree-sitter-cpp` | ~3.3 MB | C, C++ |
898
- | `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
899
- | `tree-sitter-swift` | ~3.6 MB | Swift |
927
+ - **Local by default** — core scans run without network; `audit`, registry checks, opt-in telemetry, and optional semantic embeddings are explicit network-capable paths
928
+ - **7 direct runtime dependencies** — grammar packages are build-time sources, not global-install dependencies
929
+ - **~21 MB of vendored tree-sitter WASM grammars**, broken down:
930
+
931
+ | Vendored file | Size | Languages |
932
+ | -------------------------- | ------: | ---------------------------------- |
933
+ | `web-tree-sitter.wasm` | ~190 KB | runtime, all tree-sitter languages |
934
+ | `tree-sitter-python.wasm` | ~450 KB | Python |
935
+ | `tree-sitter-go.wasm` | ~210 KB | Go |
936
+ | `tree-sitter-java.wasm` | ~405 KB | Java |
937
+ | `tree-sitter-ruby.wasm` | ~2.0 MB | Ruby |
938
+ | `tree-sitter-rust.wasm` | ~1.1 MB | Rust |
939
+ | `tree-sitter-php.wasm` | ~785 KB | PHP |
940
+ | `tree-sitter-c_sharp.wasm` | ~5.2 MB | C# |
941
+ | `tree-sitter-cpp.wasm` | ~3.3 MB | C, C++ |
942
+ | `tree-sitter-kotlin.wasm` | ~3.9 MB | Kotlin |
943
+ | `tree-sitter-swift.wasm` | ~3.6 MB | Swift |
900
944
 
901
945
  JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
902
946
 
@@ -940,7 +984,7 @@ projscan reads your source code so it can be useful; it does not send your sourc
940
984
 
941
985
  ### Patterns supply-chain scanners flag, and why they're benign here
942
986
 
943
- If you read projscan's [Socket report](https://socket.dev/npm/package/projscan), you'll see four supply-chain alerts. Here's a one-line answer to each:
987
+ projscan's [Socket report](https://socket.dev/npm/package/projscan) currently shows four supply-chain alerts. Each alert maps to one of these code paths:
944
988
 
945
989
  - **"Network access"** — comes from `web-tree-sitter`'s internal API surface; we feed it local wasm files at `dist/grammars/`. No outbound traffic.
946
990
  - **"Dynamic require" / runtime import** — optional dependencies lazy-load from literal module names; opt-in local plugins load validated manifest module paths under `.projscan-plugins/`. Plugin execution is local code execution by design, gated by `PROJSCAN_PLUGINS_PREVIEW=1`.
@@ -956,7 +1000,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
956
1000
 
957
1001
  ## Dogfooding
958
1002
 
959
- projscan runs against itself in CI on every PR. The dogfood loop is the most direct evidence we can offer that the tool works on real code, not just synthetic fixtures.
1003
+ projscan runs against itself in CI on every PR. The dogfood loop is the most direct evidence we can offer that the tool works on real code instead of synthetic fixtures alone.
960
1004
 
961
1005
  ```sh
962
1006
  # .github/workflows/ci.yml — runs after the unit tests
@@ -1102,7 +1146,7 @@ projscan diff --format markdown # Markdown diff for PRs
1102
1146
 
1103
1147
  ## Hotspots - Where to Fix First
1104
1148
 
1105
- A flat health score doesn't tell you what to do. **`projscan hotspots`** combines `git log` churn, file complexity, open issues, recency, and **ownership** into a single risk score per file - so you know where refactoring or review will actually pay off.
1149
+ A flat health score doesn't tell you what to do. **`projscan hotspots`** combines `git log` churn, file complexity, open issues, recency, and **ownership** into a single risk score per file, so you know where refactoring or review will pay off.
1106
1150
 
1107
1151
  <img src="https://abhiyoheswaran.com/images/projscan/hotspots-poster.png" alt="projscan hotspots output ranking files by composite risk score" width="700">
1108
1152
 
@@ -1132,11 +1176,11 @@ projscan diff --save-baseline # Snapshots health + hotspots
1132
1176
  projscan diff # Shows which hotspots rose / fell
1133
1177
  ```
1134
1178
 
1135
- The baseline file now captures top hotspots too, so `diff` surfaces files that are **getting worse** (not just new issues).
1179
+ The baseline file now captures top hotspots too, so `diff` surfaces files that are **getting worse** alongside new issues.
1136
1180
 
1137
1181
  ## Dependency Health
1138
1182
 
1139
- projscan ships three focused commands for keeping your dependency graph healthy - all **offline** by default, no registry calls.
1183
+ projscan ships focused commands for checking your dependency graph. Drift and upgrade previews run **offline** by default; `audit` wraps `npm audit` and can contact the npm registry.
1140
1184
 
1141
1185
  ```bash
1142
1186
  projscan outdated # Which declared deps drift from what's installed?
@@ -1185,11 +1229,11 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
1185
1229
 
1186
1230
  ## AI Agent Integration (MCP)
1187
1231
 
1188
- **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.
1232
+ Use MCP when an AI coding agent should call projscan directly. `projscan mcp` starts an [MCP](https://modelcontextprotocol.io) server over stdio and exposes the same local proof behind the daily workflows: repo context, impact, hotspots, review gates, and next commands.
1189
1233
 
1190
1234
  <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">
1191
1235
 
1192
- 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.
1236
+ Two common agent questions: _"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.
1193
1237
 
1194
1238
  ### Claude Code
1195
1239
 
@@ -1347,7 +1391,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1347
1391
  - **`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.
1348
1392
  - **`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.
1349
1393
  - **`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.)
1350
- - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js route body readers and URL reads plus Remix, SvelteKit, Hono, Express, Fastify, and Koa 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.
1394
+ - **`projscan_dataflow`** _(3.0)_ - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js route body readers and URL reads plus Remix, SvelteKit, Astro, Hono, Express, Fastify, and Koa 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.
1351
1395
  - **`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)_.
1352
1396
  - **`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`.
1353
1397
  - **`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.
@@ -1361,7 +1405,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
1361
1405
  - **`projscan_quality_scorecard`** _(2.3)_ - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
1362
1406
  - **`projscan_adoption`** _(2.9)_ - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
1363
1407
  - **`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.
1364
- - **`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.
1408
+ - **`projscan_explain_issue`** _(0.14)_ - focused context for one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
1365
1409
  - **`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.
1366
1410
  - **`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.
1367
1411
  - **`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.
@@ -14,6 +14,16 @@ const SOURCE_EXTENSIONS = new Set([
14
14
  '.py',
15
15
  '.pyw',
16
16
  ]);
17
+ const JAVASCRIPT_SOURCE_EXTENSIONS = new Set([
18
+ '.ts',
19
+ '.tsx',
20
+ '.js',
21
+ '.jsx',
22
+ '.mjs',
23
+ '.cjs',
24
+ '.mts',
25
+ '.cts',
26
+ ]);
17
27
  // Never flag these - they're public API by definition (JS convention).
18
28
  const PUBLIC_PATH_PREFIXES = ['src/index', 'index.'];
19
29
  // Names (sans extension) that are barrel-equivalents and should never be
@@ -47,6 +57,8 @@ export async function check(rootPath, files) {
47
57
  continue;
48
58
  if (isPublicEntry(file.relativePath, publicEntries))
49
59
  continue;
60
+ if (isFrameworkEntrypoint(file.relativePath))
61
+ continue;
50
62
  // Any importer → file is used.
51
63
  if ((graph.localImporters.get(file.relativePath)?.size ?? 0) > 0)
52
64
  continue;
@@ -100,6 +112,87 @@ function isPublicEntry(relativePath, publicEntries) {
100
112
  }
101
113
  return false;
102
114
  }
115
+ function isFrameworkEntrypoint(relativePath) {
116
+ if (!isJavaScriptSourcePath(relativePath))
117
+ return false;
118
+ const normalized = relativePath.replace(/\\/g, '/');
119
+ const basename = path.posix.basename(normalized, path.posix.extname(normalized));
120
+ const dirname = path.posix.dirname(normalized);
121
+ if ((dirname === '.' || dirname === 'src') &&
122
+ NEXT_ROOT_ENTRYPOINT_BASENAMES.has(basename)) {
123
+ return true;
124
+ }
125
+ if (isRemixFrameworkEntrypoint(normalized))
126
+ return true;
127
+ if (isSvelteKitFrameworkEntrypoint(normalized))
128
+ return true;
129
+ if (isAstroFrameworkEntrypoint(normalized))
130
+ return true;
131
+ const appRelativePath = normalized.startsWith('src/')
132
+ ? normalized.slice('src/'.length)
133
+ : normalized;
134
+ if (!appRelativePath.startsWith('app/'))
135
+ return false;
136
+ const appBasename = path.posix.basename(appRelativePath, path.posix.extname(appRelativePath));
137
+ return NEXT_APP_ROUTER_ENTRYPOINT_BASENAMES.has(appBasename);
138
+ }
139
+ function isRemixFrameworkEntrypoint(relativePath) {
140
+ if (relativePath === 'app/root.tsx' ||
141
+ relativePath === 'app/root.jsx' ||
142
+ relativePath === 'app/entry.client.tsx' ||
143
+ relativePath === 'app/entry.client.jsx' ||
144
+ relativePath === 'app/entry.server.tsx' ||
145
+ relativePath === 'app/entry.server.jsx' ||
146
+ relativePath === 'app/routes.ts') {
147
+ return true;
148
+ }
149
+ return relativePath.startsWith('app/routes/');
150
+ }
151
+ function isSvelteKitFrameworkEntrypoint(relativePath) {
152
+ const routePath = relativePath.startsWith('src/')
153
+ ? relativePath.slice('src/'.length)
154
+ : relativePath;
155
+ if (!routePath.startsWith('routes/'))
156
+ return false;
157
+ return path.posix.basename(routePath).startsWith('+');
158
+ }
159
+ function isAstroFrameworkEntrypoint(relativePath) {
160
+ const astroPath = relativePath.startsWith('src/')
161
+ ? relativePath.slice('src/'.length)
162
+ : relativePath;
163
+ return astroPath.startsWith('pages/');
164
+ }
165
+ const NEXT_ROOT_ENTRYPOINT_BASENAMES = new Set([
166
+ 'middleware',
167
+ 'proxy',
168
+ 'instrumentation',
169
+ 'instrumentation-client',
170
+ 'mdx-components',
171
+ ]);
172
+ const NEXT_APP_ROUTER_ENTRYPOINT_BASENAMES = new Set([
173
+ 'route',
174
+ 'page',
175
+ 'layout',
176
+ 'template',
177
+ 'default',
178
+ 'loading',
179
+ 'error',
180
+ 'not-found',
181
+ 'global-error',
182
+ 'global-not-found',
183
+ 'forbidden',
184
+ 'unauthorized',
185
+ 'sitemap',
186
+ 'robots',
187
+ 'manifest',
188
+ 'icon',
189
+ 'apple-icon',
190
+ 'opengraph-image',
191
+ 'twitter-image',
192
+ ]);
193
+ function isJavaScriptSourcePath(relativePath) {
194
+ return JAVASCRIPT_SOURCE_EXTENSIONS.has(path.posix.extname(relativePath).toLowerCase());
195
+ }
103
196
  function stripExtension(p) {
104
197
  const ext = path.extname(p);
105
198
  return ext ? p.slice(0, -ext.length) : p;
@@ -1 +1 @@
1
- {"version":3,"file":"deadCodeCheck.js","sourceRoot":"","sources":["../../src/analyzers/deadCodeCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deadCodeCheck.js","sourceRoot":"","sources":["../../src/analyzers/deadCodeCheck.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { buildImportGraph, toPackageName } from '../core/importGraph.js';
3
+ import { buildImportGraph } from '../core/importGraph.js';
4
4
  import { detectWorkspaces } from '../core/monorepo.js';
5
5
  import { findDependencyLines } from '../utils/packageJsonLocator.js';
6
6
  /**
@@ -139,16 +139,16 @@ async function checkOnePackage(packageDir, locationPrefix, fullGraph, scopedFile
139
139
  if (allDeclared.size === 0)
140
140
  return [];
141
141
  // Project per-package usage: walk only the files this manifest covers and
142
- // collect their external package names from the full graph's byFile map.
142
+ // collect external packages from the resolved package index. This avoids
143
+ // counting tsconfig path aliases as dependency imports.
143
144
  const usedPackages = new Set();
144
- for (const f of scopedFiles) {
145
- const specifiers = fullGraph.byFile.get(f.relativePath);
146
- if (!specifiers)
147
- continue;
148
- for (const spec of specifiers) {
149
- const name = toPackageName(spec);
150
- if (name)
151
- usedPackages.add(name);
145
+ const scopedRelativePaths = new Set(scopedFiles.map((f) => f.relativePath));
146
+ for (const [pkgName, importers] of fullGraph.packageImporters ?? []) {
147
+ for (const importer of importers) {
148
+ if (scopedRelativePaths.has(importer)) {
149
+ usedPackages.add(pkgName);
150
+ break;
151
+ }
152
152
  }
153
153
  }
154
154
  const scriptUsedBinaries = extractScriptBinaries(pkg);
@@ -1 +1 @@
1
- {"version":3,"file":"unusedDependencyCheck.js","sourceRoot":"","sources":["../../src/analyzers/unusedDependencyCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unusedDependencyCheck.js","sourceRoot":"","sources":["../../src/analyzers/unusedDependencyCheck.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { assertFormatSupported, getRootPath, maybeCompactBanner, program, setupLogLevel, } from '../_shared.js';
3
3
  import { computeBugHunt } from '../../core/bugHunt.js';
4
+ const REVIEW_SIGNAL_FILE_PREVIEW_LIMIT = 3;
4
5
  export function registerBugHunt() {
5
6
  program
6
7
  .command('bug-hunt')
@@ -29,26 +30,54 @@ export function registerBugHunt() {
29
30
  });
30
31
  }
31
32
  function printBugHunt(report) {
32
- const color = report.verdict === 'block' ? chalk.red : report.verdict === 'fix' ? chalk.yellow : chalk.green;
33
- console.log(color(`Bug Hunt: ${report.verdict}`));
33
+ const displayVerdict = bugHuntDisplayVerdict(report);
34
+ const color = report.verdict === 'block' ? chalk.red : displayVerdict === 'clean' ? chalk.green : chalk.yellow;
35
+ console.log(color(`Bug Hunt: ${displayVerdict}`));
34
36
  console.log(report.summary);
35
37
  console.log('');
36
- console.log(chalk.bold('Action Queue'));
37
- for (const finding of report.fixQueue) {
38
- printFinding(finding);
39
- }
38
+ printFindingSection(report);
40
39
  console.log('');
41
40
  console.log(chalk.bold('Verify'));
42
41
  for (const entry of report.verificationMatrix) {
43
42
  console.log(`- ${entry.command}`);
44
43
  }
45
44
  }
46
- function printFinding(finding) {
47
- const files = finding.files.length > 0 ? ` (${finding.files.join(', ')})` : '';
45
+ function printFindingSection(report) {
46
+ if (report.fixQueue.length > 0) {
47
+ console.log(chalk.bold('Action Queue'));
48
+ for (const finding of report.fixQueue)
49
+ printFinding(finding);
50
+ return;
51
+ }
52
+ const reviewSignals = report.verdict === 'review' ? report.topSuspects.filter(isReviewSignal) : [];
53
+ if (reviewSignals.length === 0)
54
+ return;
55
+ console.log(chalk.bold('Review Signals'));
56
+ for (const finding of reviewSignals)
57
+ printFinding(finding, { maxFiles: REVIEW_SIGNAL_FILE_PREVIEW_LIMIT });
58
+ }
59
+ function printFinding(finding, options = {}) {
60
+ const files = findingFileSummary(finding.files, options.maxFiles);
48
61
  console.log(`- ${chalk.bold(`[${finding.priority}] ${finding.title}`)}${files}`);
49
62
  console.log(` ${finding.why}`);
50
63
  console.log(` verify: ${finding.verification.commands.join(' && ')}`);
51
64
  }
65
+ function findingFileSummary(files, maxFiles) {
66
+ if (files.length === 0)
67
+ return '';
68
+ if (!maxFiles || files.length <= maxFiles)
69
+ return ` (${files.join(', ')})`;
70
+ return ` (${files.slice(0, maxFiles).join(', ')}, +${files.length - maxFiles} more)`;
71
+ }
72
+ function isReviewSignal(finding) {
73
+ return (finding.source === 'preflight' && finding.evidence.some((entry) => entry.source === 'release'));
74
+ }
75
+ function bugHuntDisplayVerdict(report) {
76
+ if (report.summary.startsWith('review:') && report.summary.includes('manual sign-off action')) {
77
+ return 'review';
78
+ }
79
+ return report.verdict;
80
+ }
52
81
  function parsePositiveInt(value) {
53
82
  const parsed = Number.parseInt(value, 10);
54
83
  if (!Number.isFinite(parsed) || parsed <= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"bugHunt.js","sourceRoot":"","sources":["../../../src/cli/commands/bugHunt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bugHunt.js","sourceRoot":"","sources":["../../../src/cli/commands/bugHunt.ts"],"names":[],"mappings":"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"}