projscan 4.14.0 → 4.15.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 (186) hide show
  1. package/README.md +71 -21
  2. package/dist/cli/commands/evidencePack.js +2 -0
  3. package/dist/cli/commands/evidencePack.js.map +1 -1
  4. package/dist/cli/commands/prove.js +172 -23
  5. package/dist/cli/commands/prove.js.map +1 -1
  6. package/dist/cli/commands/startConsole.d.ts +2 -2
  7. package/dist/cli/commands/startConsole.js +2 -260
  8. package/dist/cli/commands/startConsole.js.map +1 -1
  9. package/dist/cli/commands/startConsoleExecution.d.ts +5 -0
  10. package/dist/cli/commands/startConsoleExecution.js +108 -0
  11. package/dist/cli/commands/startConsoleExecution.js.map +1 -0
  12. package/dist/cli/commands/startConsoleMission.d.ts +6 -0
  13. package/dist/cli/commands/startConsoleMission.js +157 -0
  14. package/dist/cli/commands/startConsoleMission.js.map +1 -0
  15. package/dist/cli/commands/startMissionBundle.js +24 -27
  16. package/dist/cli/commands/startMissionBundle.js.map +1 -1
  17. package/dist/core/adoption.d.ts +8 -81
  18. package/dist/core/adoption.js +4 -549
  19. package/dist/core/adoption.js.map +1 -1
  20. package/dist/core/adoptionFirstRunDiagnostics.d.ts +20 -0
  21. package/dist/core/adoptionFirstRunDiagnostics.js +240 -0
  22. package/dist/core/adoptionFirstRunDiagnostics.js.map +1 -0
  23. package/dist/core/adoptionMcpConfig.d.ts +27 -0
  24. package/dist/core/adoptionMcpConfig.js +123 -0
  25. package/dist/core/adoptionMcpConfig.js.map +1 -0
  26. package/dist/core/adoptionMcpDoctor.d.ts +23 -0
  27. package/dist/core/adoptionMcpDoctor.js +87 -0
  28. package/dist/core/adoptionMcpDoctor.js.map +1 -0
  29. package/dist/core/adoptionWorkflowRecipes.d.ts +14 -0
  30. package/dist/core/adoptionWorkflowRecipes.js +110 -0
  31. package/dist/core/adoptionWorkflowRecipes.js.map +1 -0
  32. package/dist/core/bugHunt.js +26 -255
  33. package/dist/core/bugHunt.js.map +1 -1
  34. package/dist/core/bugHuntPreflightFindings.d.ts +2 -1
  35. package/dist/core/bugHuntPreflightFindings.js +20 -0
  36. package/dist/core/bugHuntPreflightFindings.js.map +1 -1
  37. package/dist/core/bugHuntReportAssembly.d.ts +20 -0
  38. package/dist/core/bugHuntReportAssembly.js +179 -0
  39. package/dist/core/bugHuntReportAssembly.js.map +1 -0
  40. package/dist/core/bugHuntSourceFindings.d.ts +3 -0
  41. package/dist/core/bugHuntSourceFindings.js +61 -0
  42. package/dist/core/bugHuntSourceFindings.js.map +1 -0
  43. package/dist/core/dogfood.js +4 -393
  44. package/dist/core/dogfood.js.map +1 -1
  45. package/dist/core/dogfoodMarketValidation.d.ts +5 -0
  46. package/dist/core/dogfoodMarketValidation.js +265 -0
  47. package/dist/core/dogfoodMarketValidation.js.map +1 -0
  48. package/dist/core/dogfoodRepoEvaluation.d.ts +4 -0
  49. package/dist/core/dogfoodRepoEvaluation.js +137 -0
  50. package/dist/core/dogfoodRepoEvaluation.js.map +1 -0
  51. package/dist/core/evidenceComment.js +50 -13
  52. package/dist/core/evidenceComment.js.map +1 -1
  53. package/dist/core/feedback.js +2 -252
  54. package/dist/core/feedback.js.map +1 -1
  55. package/dist/core/feedbackIntakeClassifier.d.ts +2 -0
  56. package/dist/core/feedbackIntakeClassifier.js +255 -0
  57. package/dist/core/feedbackIntakeClassifier.js.map +1 -0
  58. package/dist/core/intentRouterKeywordToolGuards.js +1 -55
  59. package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
  60. package/dist/core/intentRouterKeywordWeights.js +13 -28
  61. package/dist/core/intentRouterKeywordWeights.js.map +1 -1
  62. package/dist/core/intentRouterProductGuardSignals.d.ts +3 -0
  63. package/dist/core/intentRouterProductGuardSignals.js +59 -0
  64. package/dist/core/intentRouterProductGuardSignals.js.map +1 -0
  65. package/dist/core/markdownSafety.d.ts +3 -0
  66. package/dist/core/markdownSafety.js +14 -0
  67. package/dist/core/markdownSafety.js.map +1 -0
  68. package/dist/core/preflight.d.ts +2 -0
  69. package/dist/core/preflight.js.map +1 -1
  70. package/dist/core/preflightChangedFiles.d.ts +2 -0
  71. package/dist/core/preflightChangedFiles.js +1 -1
  72. package/dist/core/preflightChangedFiles.js.map +1 -1
  73. package/dist/core/preflightInputs.d.ts +2 -0
  74. package/dist/core/preflightInputs.js +5 -2
  75. package/dist/core/preflightInputs.js.map +1 -1
  76. package/dist/core/proofLedger.d.ts +5 -1
  77. package/dist/core/proofLedger.js +161 -12
  78. package/dist/core/proofLedger.js.map +1 -1
  79. package/dist/core/proofReplay.d.ts +9 -0
  80. package/dist/core/proofReplay.js +164 -0
  81. package/dist/core/proofReplay.js.map +1 -0
  82. package/dist/core/proofSufficiency.d.ts +19 -0
  83. package/dist/core/proofSufficiency.js +425 -0
  84. package/dist/core/proofSufficiency.js.map +1 -0
  85. package/dist/core/prove.d.ts +6 -0
  86. package/dist/core/prove.js +277 -87
  87. package/dist/core/prove.js.map +1 -1
  88. package/dist/core/qualityScorecard.js +8 -238
  89. package/dist/core/qualityScorecard.js.map +1 -1
  90. package/dist/core/qualityScorecardDimensions.d.ts +14 -0
  91. package/dist/core/qualityScorecardDimensions.js +99 -0
  92. package/dist/core/qualityScorecardDimensions.js.map +1 -0
  93. package/dist/core/qualityScorecardRisks.d.ts +8 -0
  94. package/dist/core/qualityScorecardRisks.js +107 -0
  95. package/dist/core/qualityScorecardRisks.js.map +1 -0
  96. package/dist/core/qualityScorecardSignals.d.ts +20 -0
  97. package/dist/core/qualityScorecardSignals.js +59 -0
  98. package/dist/core/qualityScorecardSignals.js.map +1 -0
  99. package/dist/core/releaseEvidence.d.ts +1 -0
  100. package/dist/core/releaseEvidence.js +15 -40
  101. package/dist/core/releaseEvidence.js.map +1 -1
  102. package/dist/core/releaseEvidenceBaseline.js +4 -1
  103. package/dist/core/releaseEvidenceBaseline.js.map +1 -1
  104. package/dist/core/releaseEvidenceProofReceipt.d.ts +6 -0
  105. package/dist/core/releaseEvidenceProofReceipt.js +140 -0
  106. package/dist/core/releaseEvidenceProofReceipt.js.map +1 -0
  107. package/dist/core/releaseEvidenceVerdict.d.ts +5 -2
  108. package/dist/core/releaseEvidenceVerdict.js +39 -1
  109. package/dist/core/releaseEvidenceVerdict.js.map +1 -1
  110. package/dist/core/repositoryScanner.d.ts +1 -0
  111. package/dist/core/repositoryScanner.js +5 -4
  112. package/dist/core/repositoryScanner.js.map +1 -1
  113. package/dist/core/sessionResources.d.ts +14 -2
  114. package/dist/core/sessionResources.js +3 -3
  115. package/dist/core/sessionResources.js.map +1 -1
  116. package/dist/core/startInputs.d.ts +1 -1
  117. package/dist/core/startIntentTargets.d.ts +1 -1
  118. package/dist/core/startIntentTargets.js +1 -16
  119. package/dist/core/startIntentTargets.js.map +1 -1
  120. package/dist/core/startMissionInputStatusPolicy.d.ts +7 -0
  121. package/dist/core/startMissionInputStatusPolicy.js +74 -0
  122. package/dist/core/startMissionInputStatusPolicy.js.map +1 -0
  123. package/dist/core/startMissionPolicy.d.ts +6 -15
  124. package/dist/core/startMissionPolicy.js +4 -305
  125. package/dist/core/startMissionPolicy.js.map +1 -1
  126. package/dist/core/startMissionProofPolicy.d.ts +6 -0
  127. package/dist/core/startMissionProofPolicy.js +84 -0
  128. package/dist/core/startMissionProofPolicy.js.map +1 -0
  129. package/dist/core/startMissionRiskPolicy.d.ts +4 -0
  130. package/dist/core/startMissionRiskPolicy.js +85 -0
  131. package/dist/core/startMissionRiskPolicy.js.map +1 -0
  132. package/dist/core/startMissionRoutingPolicy.d.ts +6 -0
  133. package/dist/core/startMissionRoutingPolicy.js +67 -0
  134. package/dist/core/startMissionRoutingPolicy.js.map +1 -0
  135. package/dist/core/startMode.d.ts +1 -2
  136. package/dist/core/startMode.js +4 -151
  137. package/dist/core/startMode.js.map +1 -1
  138. package/dist/core/startModeIntentPolicy.d.ts +12 -0
  139. package/dist/core/startModeIntentPolicy.js +41 -0
  140. package/dist/core/startModeIntentPolicy.js.map +1 -0
  141. package/dist/core/startModeRoutingPolicy.d.ts +4 -0
  142. package/dist/core/startModeRoutingPolicy.js +117 -0
  143. package/dist/core/startModeRoutingPolicy.js.map +1 -0
  144. package/dist/core/startSearchQueryTargets.d.ts +1 -0
  145. package/dist/core/startSearchQueryTargets.js +17 -0
  146. package/dist/core/startSearchQueryTargets.js.map +1 -0
  147. package/dist/core/workplan.d.ts +3 -2
  148. package/dist/core/workplan.js +11 -585
  149. package/dist/core/workplan.js.map +1 -1
  150. package/dist/core/workplanCoordinationTasks.d.ts +3 -0
  151. package/dist/core/workplanCoordinationTasks.js +82 -0
  152. package/dist/core/workplanCoordinationTasks.js.map +1 -0
  153. package/dist/core/workplanModeTasks.d.ts +2 -0
  154. package/dist/core/workplanModeTasks.js +192 -0
  155. package/dist/core/workplanModeTasks.js.map +1 -0
  156. package/dist/core/workplanPreflightTasks.d.ts +2 -0
  157. package/dist/core/workplanPreflightTasks.js +126 -0
  158. package/dist/core/workplanPreflightTasks.js.map +1 -0
  159. package/dist/core/workplanQualitySignals.d.ts +7 -0
  160. package/dist/core/workplanQualitySignals.js +63 -0
  161. package/dist/core/workplanQualitySignals.js.map +1 -0
  162. package/dist/core/workplanReport.d.ts +4 -0
  163. package/dist/core/workplanReport.js +79 -0
  164. package/dist/core/workplanReport.js.map +1 -0
  165. package/dist/core/workplanRiskOwnership.d.ts +5 -0
  166. package/dist/core/workplanRiskOwnership.js +97 -0
  167. package/dist/core/workplanRiskOwnership.js.map +1 -0
  168. package/dist/core/workplanSuggestedActions.d.ts +2 -0
  169. package/dist/core/workplanSuggestedActions.js +43 -0
  170. package/dist/core/workplanSuggestedActions.js.map +1 -0
  171. package/dist/mcp/tools/prove.js +23 -17
  172. package/dist/mcp/tools/prove.js.map +1 -1
  173. package/dist/projscan-sbom.cdx.json +6 -6
  174. package/dist/tool-manifest.json +2 -2
  175. package/dist/types/config.d.ts +15 -0
  176. package/dist/types/evidencePack.d.ts +21 -0
  177. package/dist/types/prove.d.ts +79 -0
  178. package/dist/utils/changedFiles.js +57 -16
  179. package/dist/utils/changedFiles.js.map +1 -1
  180. package/dist/utils/config.js +2 -0
  181. package/dist/utils/config.js.map +1 -1
  182. package/dist/utils/configProofRecipes.d.ts +2 -0
  183. package/dist/utils/configProofRecipes.js +91 -0
  184. package/dist/utils/configProofRecipes.js.map +1 -0
  185. package/docs/GUIDE.md +120 -19
  186. package/package.json +1 -1
@@ -0,0 +1,265 @@
1
+ import { MIN_REPEAT_FEEDBACK_PRS, MIN_REPEAT_FEEDBACK_REPOS } from './feedback.js';
2
+ export const FEEDBACK_QUESTIONS = [
3
+ 'Did the PR comment save 10-20 minutes?',
4
+ 'What was missing or noisy?',
5
+ 'Which owner or command should have been clearer?',
6
+ 'Minutes saved: 0, 5, 10, 20+?',
7
+ 'Did projscan prevent a risky edit or missed review step?',
8
+ ];
9
+ export const FEEDBACK_CAPTURE_COMMAND = 'projscan feedback add --file .projscan-feedback.json --repo <repo> --pr <url> --reviewer <handle> --useful true --minutes-saved 10';
10
+ export const DOGFOOD_WITH_FEEDBACK_COMMAND = 'projscan dogfood --repo <repo-a> --repo <repo-b> --repo <repo-c> --feedback .projscan-feedback.json --format json';
11
+ const MIN_USEFUL_REVIEWER_RESPONSES = 3;
12
+ const MIN_AVERAGE_MINUTES_SAVED = 10;
13
+ export function buildMarketValidation(repos, targetRepoCount) {
14
+ const responseCount = repos.reduce((sum, repo) => sum + repo.validation.feedbackResponses, 0);
15
+ const usefulResponses = repos.reduce((sum, repo) => sum + repo.validation.usefulResponses, 0);
16
+ const totalMinutesSaved = repos.reduce((sum, repo) => sum + repo.validation.minutesSaved, 0);
17
+ const preventedBadEdits = repos.reduce((sum, repo) => sum + repo.validation.preventedBadEdits, 0);
18
+ const ownerRoutingClear = repos.reduce((sum, repo) => sum + repo.validation.ownerRoutingClear, 0);
19
+ const nextCommandClear = repos.reduce((sum, repo) => sum + repo.validation.nextCommandClear, 0);
20
+ const falsePositive = {
21
+ totalReports: repos.reduce((sum, repo) => sum + repo.validation.falsePositiveRules.length, 0),
22
+ noisyRules: countSignals(repos.flatMap((repo) => repo.validation.falsePositiveRules), 'rule'),
23
+ missingSignals: countSignals(repos.flatMap((repo) => repo.validation.missingSignals), 'signal'),
24
+ noisyFindings: countSignals(repos.flatMap((repo) => repo.validation.noisyFindings), 'finding'),
25
+ };
26
+ const repoCoverage = {
27
+ target: targetRepoCount,
28
+ evaluated: repos.length,
29
+ targetMet: repos.length >= targetRepoCount,
30
+ };
31
+ const firstPr = {
32
+ readyRepos: repos.filter((repo) => repo.prCommentReady).length,
33
+ repeatUseReadyRepos: repos.filter((repo) => repo.repeatUseReady).length,
34
+ requiredFeedbackQuestions: [...FEEDBACK_QUESTIONS],
35
+ };
36
+ const feedback = {
37
+ responses: responseCount,
38
+ usefulResponses,
39
+ usefulnessRate: responseCount > 0 ? round(usefulResponses / responseCount) : 0,
40
+ preventedBadEdits,
41
+ ownerRoutingClear,
42
+ nextCommandClear,
43
+ minutesSaved: {
44
+ total: totalMinutesSaved,
45
+ average: responseCount > 0 ? round(totalMinutesSaved / responseCount) : 0,
46
+ max: Math.max(0, ...repos.map((repo) => repo.validation.minutesSaved)),
47
+ },
48
+ };
49
+ const repeatUse = summarizeRepeatUse(repos);
50
+ const value = {
51
+ averageMinutesSaved: feedback.minutesSaved.average,
52
+ requiredAverageMinutesSaved: MIN_AVERAGE_MINUTES_SAVED,
53
+ preventedBadEdits,
54
+ ready: feedback.minutesSaved.average >= MIN_AVERAGE_MINUTES_SAVED || preventedBadEdits > 0,
55
+ };
56
+ const feedbackCaptureCommand = firstFeedbackCaptureCommand(repos);
57
+ const status = marketStatus({
58
+ targetMet: repoCoverage.targetMet,
59
+ responses: responseCount,
60
+ usefulResponses,
61
+ falsePositiveReports: falsePositive.totalReports,
62
+ valueReady: value.ready,
63
+ repeatUseReady: repeatUse.ready,
64
+ });
65
+ const summary = summarizeMarketValidation(status, repoCoverage.evaluated, targetRepoCount, feedback, falsePositive.totalReports, value, repeatUse);
66
+ const proofGates = buildProofGates(repoCoverage, feedback, value, repeatUse, falsePositive.totalReports, feedbackCaptureCommand);
67
+ const nextProofStep = nextProofStepFromGates(status, proofGates);
68
+ return {
69
+ status,
70
+ summary,
71
+ proofGates,
72
+ nextProofStep,
73
+ repoCoverage,
74
+ feedback,
75
+ falsePositive,
76
+ firstPr,
77
+ value,
78
+ repeatUse,
79
+ websiteProof: buildWebsiteProof(repos, feedback, falsePositive.totalReports, status, repeatUse),
80
+ };
81
+ }
82
+ function marketStatus(input) {
83
+ if (!input.targetMet)
84
+ return 'needs_more_repos';
85
+ if (input.responses === 0)
86
+ return 'needs_feedback';
87
+ if (input.usefulResponses < MIN_USEFUL_REVIEWER_RESPONSES)
88
+ return 'needs_tuning';
89
+ if (input.falsePositiveReports > input.usefulResponses)
90
+ return 'needs_tuning';
91
+ if (!input.valueReady)
92
+ return 'needs_tuning';
93
+ if (!input.repeatUseReady)
94
+ return 'needs_tuning';
95
+ return 'proven';
96
+ }
97
+ function buildProofGates(repoCoverage, feedback, value, repeatUse, falsePositiveReports, feedbackCaptureCommand) {
98
+ const moreRepos = Math.max(0, repoCoverage.target - repoCoverage.evaluated);
99
+ const moreUsefulResponses = Math.max(0, MIN_USEFUL_REVIEWER_RESPONSES - feedback.usefulResponses);
100
+ const moreRepeatedRepos = Math.max(0, repeatUse.requiredRepeatedRepos - repeatUse.repeatedRepos);
101
+ return [
102
+ {
103
+ id: 'repo-coverage',
104
+ status: repoCoverage.targetMet ? 'pass' : 'fail',
105
+ summary: repoCoverage.targetMet
106
+ ? `${repoCoverage.evaluated}/${repoCoverage.target} repo target met.`
107
+ : `Add ${moreRepos} more repo(s) before calling adoption proven.`,
108
+ command: 'projscan dogfood --repo <repo-a> --repo <repo-b> --repo <repo-c> --format json',
109
+ },
110
+ {
111
+ id: 'reviewer-feedback',
112
+ status: feedback.responses > 0 ? 'pass' : 'fail',
113
+ summary: feedback.responses > 0
114
+ ? `${feedback.responses} reviewer response(s) captured.`
115
+ : 'Capture structured reviewer feedback from the first real PR.',
116
+ command: feedbackCaptureCommand,
117
+ },
118
+ {
119
+ id: 'useful-feedback',
120
+ status: feedback.usefulResponses >= MIN_USEFUL_REVIEWER_RESPONSES ? 'pass' : 'fail',
121
+ summary: feedback.usefulResponses >= MIN_USEFUL_REVIEWER_RESPONSES
122
+ ? `${feedback.usefulResponses} useful reviewer response(s) captured.`
123
+ : `Collect at least ${moreUsefulResponses} more useful reviewer response(s).`,
124
+ command: feedbackCaptureCommand,
125
+ },
126
+ {
127
+ id: 'repeat-use',
128
+ status: repeatUse.ready ? 'pass' : 'fail',
129
+ summary: repeatUse.ready
130
+ ? `${repeatUse.repeatedRepos} repo(s) with repeat PR feedback and ${repeatUse.distinctPrs} distinct PR(s).`
131
+ : `Capture repeat PR feedback in at least ${moreRepeatedRepos} repo(s).`,
132
+ command: DOGFOOD_WITH_FEEDBACK_COMMAND,
133
+ },
134
+ {
135
+ id: 'measured-value',
136
+ status: value.ready ? 'pass' : 'fail',
137
+ summary: value.ready
138
+ ? `Measured value ready: ${value.averageMinutesSaved} average minutes saved or ${value.preventedBadEdits} risky edit(s) prevented.`
139
+ : 'Record 10+ average minutes saved or at least one prevented risky edit.',
140
+ command: feedbackCaptureCommand,
141
+ },
142
+ {
143
+ id: 'false-positive-balance',
144
+ status: falsePositiveReports <= feedback.usefulResponses ? 'pass' : 'fail',
145
+ summary: falsePositiveReports <= feedback.usefulResponses
146
+ ? `${falsePositiveReports} false-positive report(s) do not outnumber ${feedback.usefulResponses} useful response(s).`
147
+ : 'Tune false-positive reports until they no longer outnumber useful responses.',
148
+ command: 'projscan memory stable --format json',
149
+ },
150
+ ];
151
+ }
152
+ function firstFeedbackCaptureCommand(repos) {
153
+ return repos.find((repo) => repo.feedbackCaptureCommand)?.feedbackCaptureCommand ?? FEEDBACK_CAPTURE_COMMAND;
154
+ }
155
+ function nextProofStepFromGates(status, proofGates) {
156
+ if (status === 'proven')
157
+ return 'Adoption proof is ready for public claims.';
158
+ return (proofGates.find((gate) => gate.status === 'fail')?.summary ??
159
+ 'Review adoption proof gates before expanding rollout.');
160
+ }
161
+ function summarizeMarketValidation(status, evaluated, target, feedback, falsePositiveReports, value, repeatUse) {
162
+ const base = evaluated +
163
+ '/' +
164
+ target +
165
+ ' repo target; ' +
166
+ feedback.responses +
167
+ ' reviewer response(s); ' +
168
+ feedback.minutesSaved.total +
169
+ ' minutes saved; avg ' +
170
+ value.averageMinutesSaved +
171
+ '/' +
172
+ value.requiredAverageMinutesSaved +
173
+ ' min target; ' +
174
+ feedback.preventedBadEdits +
175
+ ' risky edit(s) prevented; ' +
176
+ falsePositiveReports +
177
+ ' false-positive report(s); ' +
178
+ repeatUse.repeatedRepos +
179
+ ' repo(s) with repeat PR feedback';
180
+ if (status === 'proven')
181
+ return 'market validation proven: ' + base;
182
+ if (status === 'needs_more_repos')
183
+ return 'market validation needs more repos: ' + base;
184
+ if (status === 'needs_feedback')
185
+ return 'market validation needs reviewer feedback: ' + base;
186
+ return 'market validation needs tuning: ' + base;
187
+ }
188
+ function buildWebsiteProof(repos, feedback, falsePositiveReports, status, repeatUse) {
189
+ const repoCount = repos.length;
190
+ const headline = buildWebsiteProofHeadline(status, repoCount);
191
+ const metrics = [
192
+ repoCount + ' real repo(s) evaluated',
193
+ feedback.responses + ' reviewer response(s)',
194
+ feedback.minutesSaved.total + ' minutes saved',
195
+ feedback.preventedBadEdits + ' risky edits prevented',
196
+ repeatUse.repeatedRepos + ' repo(s) with repeat PR feedback',
197
+ falsePositiveReports + ' false-positive report(s) tracked',
198
+ ];
199
+ const claimBullet = status === 'proven'
200
+ ? 'Website claims can cite measured minutes saved and risky edits prevented instead of generic scanner claims.'
201
+ : 'Website claims should stay provisional until repo coverage, useful feedback, and false-positive tuning are ready.';
202
+ const bullets = [
203
+ 'Generated PR comments were validated before posting.',
204
+ 'Reviewer feedback is captured as structured dogfood evidence.',
205
+ 'Repeat PR use is measured separately from first-PR usefulness.',
206
+ 'False positives, missing signals, owner clarity, and next-command clarity are visible in one report.',
207
+ claimBullet,
208
+ ];
209
+ const markdown = [
210
+ '## Market Validation Proof',
211
+ '',
212
+ '**Status:** ' + status,
213
+ '**Headline:** ' + headline,
214
+ '',
215
+ '### Metrics',
216
+ ...metrics.map((metric) => '- ' + metric),
217
+ '',
218
+ '### What To Show On The Website',
219
+ ...bullets.map((bullet) => '- ' + bullet),
220
+ ].join('\\n');
221
+ return { headline, metrics, bullets, markdown };
222
+ }
223
+ function buildWebsiteProofHeadline(status, repoCount) {
224
+ if (status === 'proven')
225
+ return 'projscan proved useful across ' + repoCount + ' real repo(s)';
226
+ if (status === 'needs_more_repos')
227
+ return 'projscan needs more real-repo validation before public proof';
228
+ if (status === 'needs_feedback')
229
+ return 'projscan needs reviewer feedback before usefulness proof';
230
+ return 'projscan needs tuning before usefulness proof';
231
+ }
232
+ function summarizeRepeatUse(repos) {
233
+ const distinctPrs = countDistinct(repos.flatMap((repo) => repo.validation.prRefs));
234
+ const repeatedRepos = repos.filter((repo) => countDistinct(repo.validation.prRefs) >= 2).length;
235
+ return {
236
+ distinctPrs,
237
+ repeatedRepos,
238
+ requiredDistinctPrs: MIN_REPEAT_FEEDBACK_PRS,
239
+ requiredRepeatedRepos: MIN_REPEAT_FEEDBACK_REPOS,
240
+ ready: distinctPrs >= MIN_REPEAT_FEEDBACK_PRS && repeatedRepos >= MIN_REPEAT_FEEDBACK_REPOS,
241
+ };
242
+ }
243
+ function countDistinct(values) {
244
+ return new Set(values.map(normalizeMatchValue).filter(Boolean)).size;
245
+ }
246
+ function countSignals(values, key) {
247
+ const counts = new Map();
248
+ for (const value of cleanSignals(values))
249
+ counts.set(value, (counts.get(value) ?? 0) + 1);
250
+ return [...counts.entries()]
251
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
252
+ .map(([value, count]) => ({ [key]: value, count }));
253
+ }
254
+ function cleanSignals(values) {
255
+ return values
256
+ .map((value) => value.trim())
257
+ .filter((value) => value.length > 0 && value.toLowerCase() !== 'none');
258
+ }
259
+ function normalizeMatchValue(value) {
260
+ return value.replace(/\\/g, '/').replace(/\/$/, '').trim().toLowerCase();
261
+ }
262
+ function round(value) {
263
+ return Math.round(value * 100) / 100;
264
+ }
265
+ //# sourceMappingURL=dogfoodMarketValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogfoodMarketValidation.js","sourceRoot":"","sources":["../../src/core/dogfoodMarketValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DogfoodFeedbackInput, DogfoodFeedbackResponse, DogfoodRepoResult } from '../types/dogfood.js';
2
+ export declare const FEEDBACK_INIT_COMMAND = "projscan feedback init --output .projscan-feedback.json";
3
+ export declare function normalizeDogfoodFeedback(input: DogfoodFeedbackInput | undefined): DogfoodFeedbackResponse[];
4
+ export declare function evaluateDogfoodRepo(repoPath: string, feedback: DogfoodFeedbackResponse[]): Promise<DogfoodRepoResult>;
@@ -0,0 +1,137 @@
1
+ import path from 'node:path';
2
+ import { DOGFOOD_WITH_FEEDBACK_COMMAND, FEEDBACK_QUESTIONS, } from './dogfoodMarketValidation.js';
3
+ import { computeEvidencePack } from './releaseEvidence.js';
4
+ import { computeStartReport } from './start.js';
5
+ export const FEEDBACK_INIT_COMMAND = 'projscan feedback init --output .projscan-feedback.json';
6
+ export function normalizeDogfoodFeedback(input) {
7
+ return Array.isArray(input?.responses) ? input.responses : [];
8
+ }
9
+ export async function evaluateDogfoodRepo(repoPath, feedback) {
10
+ const [start, evidence] = await Promise.all([
11
+ computeStartReport(repoPath, { mode: 'before_merge', maxTasks: 4, maxRisks: 5 }),
12
+ computeEvidencePack(repoPath, { includePrComment: true, maxFindings: 3 }),
13
+ ]);
14
+ const name = path.basename(repoPath) || repoPath;
15
+ const prComment = evidence.prComment ?? '';
16
+ const prCommentReady = evidence.prCommentValidation?.status === 'pass' && prComment.includes('### Developer Feedback');
17
+ const repeatUseReady = start.adoptionLoop?.cadence === 'every_pr' &&
18
+ (start.adoptionLoop.nextCommands.length ?? 0) >= 3;
19
+ const mcpReady = start.evidence.mcpReady;
20
+ const validation = summarizeRepoFeedback(feedbackForRepo(feedback, repoPath, name));
21
+ const feedbackCaptureCommand = feedbackCaptureCommandForRepo(name);
22
+ const gaps = buildGaps({
23
+ prCommentReady,
24
+ repeatUseReady,
25
+ mcpReady,
26
+ healthScore: start.evidence.healthScore,
27
+ validation,
28
+ });
29
+ return {
30
+ path: repoPath,
31
+ name,
32
+ status: statusFromGaps(gaps, start.evidence.healthScore),
33
+ healthScore: start.evidence.healthScore,
34
+ mcpReady,
35
+ prCommentReady,
36
+ repeatUseReady,
37
+ verdict: evidence.verdict,
38
+ gaps,
39
+ feedbackQuestions: [...FEEDBACK_QUESTIONS],
40
+ validation,
41
+ feedbackCaptureCommand,
42
+ nextCommands: [
43
+ 'projscan init team --team platform',
44
+ 'projscan evidence-pack --pr-comment',
45
+ 'projscan preflight --mode before_merge --format json',
46
+ FEEDBACK_INIT_COMMAND,
47
+ feedbackCaptureCommand,
48
+ DOGFOOD_WITH_FEEDBACK_COMMAND,
49
+ ],
50
+ };
51
+ }
52
+ function feedbackCaptureCommandForRepo(repoName) {
53
+ return ('projscan feedback add --file .projscan-feedback.json --repo ' +
54
+ shellQuote(repoName) +
55
+ ' --pr <url> --reviewer <handle> --useful true --minutes-saved 10');
56
+ }
57
+ function shellQuote(value) {
58
+ if (/^[A-Za-z0-9_./:@%+=,-]+$/.test(value))
59
+ return value;
60
+ return "'" + value.replace(/'/g, "'\\''") + "'";
61
+ }
62
+ function feedbackForRepo(feedback, repoPath, repoName) {
63
+ const normalizedPath = normalizeMatchValue(repoPath);
64
+ const normalizedName = normalizeMatchValue(repoName);
65
+ return feedback.filter((response) => {
66
+ const repo = normalizeMatchValue(response.repo ?? '');
67
+ if (!repo)
68
+ return false;
69
+ return matchesRepoKey(repo, normalizedName, normalizedPath);
70
+ });
71
+ }
72
+ function matchesRepoKey(repo, repoName, repoPath) {
73
+ if (repo === repoName || repo === repoPath || repoPath.endsWith('/' + repo))
74
+ return true;
75
+ if (repoName.startsWith(repo + '-') || repoName.endsWith('-' + repo))
76
+ return true;
77
+ if (repoName.includes('-' + repo + '-'))
78
+ return true;
79
+ if (repoPath.includes('/' + repo + '-') || repoPath.includes('/' + repo + '/'))
80
+ return true;
81
+ return repoPath.includes('-' + repo + '-');
82
+ }
83
+ function summarizeRepoFeedback(feedback) {
84
+ return {
85
+ feedbackResponses: feedback.length,
86
+ usefulResponses: feedback.filter((response) => response.useful === true).length,
87
+ prRefs: cleanSignals(feedback.map((response) => response.pr ?? '')),
88
+ minutesSaved: sumNumbers(feedback.map((response) => response.minutesSaved)),
89
+ preventedBadEdits: feedback.filter((response) => response.preventedBadEdit === true).length,
90
+ ownerRoutingClear: feedback.filter((response) => response.ownerRoutingClear === true).length,
91
+ nextCommandClear: feedback.filter((response) => response.nextCommandClear === true).length,
92
+ falsePositiveRules: cleanSignals(feedback.flatMap((response) => response.falsePositiveRules ?? [])),
93
+ missingSignals: cleanSignals(feedback.flatMap((response) => response.missingSignals ?? [])),
94
+ noisyFindings: cleanSignals(feedback.flatMap((response) => response.noisyFindings ?? [])),
95
+ };
96
+ }
97
+ function buildGaps(input) {
98
+ const gaps = [];
99
+ if (input.healthScore < 80)
100
+ gaps.push('health score below adoption threshold');
101
+ if (!input.mcpReady)
102
+ gaps.push('MCP setup not ready');
103
+ if (!input.prCommentReady)
104
+ gaps.push('PR comment is missing required usefulness sections');
105
+ if (!input.repeatUseReady)
106
+ gaps.push('repeat-use adoption loop is missing');
107
+ if (input.validation.falsePositiveRules.length > 0) {
108
+ gaps.push('reviewer reported false-positive rule(s): ' + input.validation.falsePositiveRules.join(', '));
109
+ }
110
+ if (input.validation.missingSignals.length > 0) {
111
+ gaps.push('reviewer reported missing signal(s): ' + input.validation.missingSignals.join('; '));
112
+ }
113
+ return gaps;
114
+ }
115
+ function statusFromGaps(gaps, healthScore) {
116
+ if (healthScore < 70 || gaps.some((gap) => gap.includes('PR comment')))
117
+ return 'fail';
118
+ if (gaps.length > 0)
119
+ return 'warn';
120
+ return 'pass';
121
+ }
122
+ function cleanSignals(values) {
123
+ return values
124
+ .map((value) => value.trim())
125
+ .filter((value) => value.length > 0 && value.toLowerCase() !== 'none');
126
+ }
127
+ function sumNumbers(values) {
128
+ return values.reduce((sum, value) => {
129
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)
130
+ return sum;
131
+ return sum + value;
132
+ }, 0);
133
+ }
134
+ function normalizeMatchValue(value) {
135
+ return value.replace(/\\/g, '/').replace(/\/$/, '').trim().toLowerCase();
136
+ }
137
+ //# sourceMappingURL=dogfoodRepoEvaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogfoodRepoEvaluation.js","sourceRoot":"","sources":["../../src/core/dogfoodRepoEvaluation.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { markdownInlineCode } from './markdownSafety.js';
2
+ import { proofReceiptBlocksApproval, proofReceiptNeedsFocusedReview, } from './releaseEvidenceVerdict.js';
1
3
  export function renderEvidencePackPrComment(report) {
2
4
  const blockers = report.approval.blockingReasons.slice(0, 5);
3
5
  const commands = dedupeStrings(report.artifacts.flatMap((artifact) => artifact.commands)).slice(0, 8);
@@ -54,12 +56,12 @@ export function renderEvidencePackPrComment(report) {
54
56
  ...(pr?.teamRoutes.length ? pr.teamRoutes.map(formatTeamRoute) : formatMissingOwnerHint(pr)),
55
57
  '',
56
58
  '### Verification',
57
- ...commands.map((command) => `- \`${command}\``),
59
+ ...commands.map((command) => `- ${markdownInlineCode(command)}`),
58
60
  '',
59
61
  '### Next Commands',
60
62
  ...(pr?.nextCommands.length
61
- ? pr.nextCommands.map((command) => `- \`${command}\``)
62
- : ['- `projscan preflight --mode before_merge --format json`']),
63
+ ? pr.nextCommands.map((command) => `- ${markdownInlineCode(command)}`)
64
+ : [`- ${markdownInlineCode('projscan preflight --mode before_merge --format json')}`]),
63
65
  '',
64
66
  '### Suggested Next Actions',
65
67
  ...(nextActions.length > 0 ? nextActions.map(formatSuggestedAction) : ['- None recorded.']),
@@ -175,17 +177,22 @@ function formatApprovalGuidance(report) {
175
177
  function formatReviewerDecision(report) {
176
178
  const trust = report.prSummary?.trust;
177
179
  const decision = reviewerDecision(report);
178
- const firstCommand = report.prSummary?.fixFirst?.commands[0] ??
179
- report.prSummary?.nextCommands[0] ??
180
- report.suggestedNextActions.find((action) => action.command)?.command ??
181
- 'projscan preflight --mode before_merge --format json';
180
+ const proofNeedsReview = proofReceiptNeedsFocusedReview(report.proofReceipt);
181
+ const firstCommand = proofNeedsReview && report.proofReceipt?.command
182
+ ? report.proofReceipt.command
183
+ : report.prSummary?.fixFirst?.commands[0] ??
184
+ report.prSummary?.nextCommands[0] ??
185
+ report.suggestedNextActions.find((action) => action.command)?.command ??
186
+ 'projscan preflight --mode before_merge --format json';
182
187
  const routedOwners = report.prSummary?.teamRoutes.map((route) => route.owner) ?? [];
183
188
  const ownerState = routedOwners.length > 0 ? routedOwners.join(', ') : 'unassigned';
184
- const reason = trust?.verdict === 'actual_defect'
185
- ? 'Concrete blockers are present; fix the first item before approval.'
186
- : trust?.verdict === 'manual_review'
187
- ? 'Manual review or release sign-off is required; no concrete blocker is recorded unless listed above.'
188
- : 'No concrete defect or manual-review signal is recorded; preserve the baseline and run verification.';
189
+ const reason = proofNeedsReview
190
+ ? 'Proof Receipt is missing, stale, failed, or not strong enough for review.'
191
+ : trust?.verdict === 'actual_defect'
192
+ ? 'Concrete blockers are present; fix the first item before approval.'
193
+ : trust?.verdict === 'manual_review'
194
+ ? 'Manual review or release sign-off is required; no concrete blocker is recorded unless listed above.'
195
+ : 'No concrete defect or manual-review signal is recorded; preserve the baseline and run verification.';
189
196
  return [
190
197
  `- decision: ${decision}`,
191
198
  `- reason: ${reason}`,
@@ -205,9 +212,22 @@ function formatProofReceipt(report) {
205
212
  }
206
213
  return [
207
214
  `- proof status: ${receipt.proofStatus}`,
215
+ ...optionalReceiptLine('proof evidence', proofEvidenceSourceSummary(receipt.proofEvidenceSources)),
216
+ ...optionalReceiptLine('proof replay', receipt.proofReplayStatus),
217
+ ...optionalReceiptLine('proof sufficiency', receipt.proofSufficiencyStatus),
208
218
  `- reviewer decision: ${receipt.reviewerDecision}`,
209
219
  ...optionalReceiptLine('scope', receipt.scopeStatus),
210
220
  ...optionalReceiptLine('risk delta', receipt.riskDeltaDirection),
221
+ proofCommandsLine('changed after proof', receipt.changedAfterProof),
222
+ ...(receipt.receiptFingerprint ? [`- receipt fingerprint: \`${receipt.receiptFingerprint}\``] : []),
223
+ proofCommandsLine('weak requirements', receipt.weakRequirements),
224
+ proofCommandsLine('missing requirements', receipt.missingRequirements),
225
+ proofCommandsLine('stale requirements', receipt.staleRequirements),
226
+ proofCommandsLine('failed requirements', receipt.failedRequirements),
227
+ proofCommandsLine('Team Proof Recipes', (receipt.teamProofRecipes ?? []).map((recipe) => `recipe: ${recipe}`)),
228
+ proofCommandsLine('required reviewers', receipt.requiredReviewers ?? []),
229
+ proofCommandsLine('recipe proof gaps', receipt.recipeGaps ?? []),
230
+ proofCommandsLine('recipe drift', receipt.recipeDrift ?? []),
211
231
  proofCommandsLine('failed proof', receipt.failedCommands),
212
232
  proofCommandsLine('stale proof', receipt.staleCommands),
213
233
  proofCommandsLine('missing proof', receipt.missingCommands),
@@ -217,14 +237,31 @@ function formatProofReceipt(report) {
217
237
  function optionalReceiptLine(label, value) {
218
238
  return value ? [`- ${label}: ${value}`] : [];
219
239
  }
240
+ function proofEvidenceSourceSummary(sources) {
241
+ if (!sources)
242
+ return undefined;
243
+ return [
244
+ `executed ${sources.executed}`,
245
+ `recorded ${sources.recorded}`,
246
+ `mission ${sources.mission}`,
247
+ `external ${sources.external}`,
248
+ `unknown ${sources.unknown}`,
249
+ ].join(' / ');
250
+ }
220
251
  function proofCommandsLine(label, commands) {
221
- return commands.length > 0 ? `- ${label}: ${commands.join('; ')}` : `- ${label}: none`;
252
+ return commands.length > 0
253
+ ? `- ${label}: ${commands.map(markdownInlineCode).join('; ')}`
254
+ : `- ${label}: none`;
222
255
  }
223
256
  function formatDailyPrWorkflow(steps) {
224
257
  return (steps ?? buildDailyPrWorkflow()).map((step) => `- ${step.label}: \`${step.command}\` - ${step.purpose}`);
225
258
  }
226
259
  function reviewerDecision(report) {
227
260
  const trust = report.prSummary?.trust.verdict;
261
+ if (proofReceiptBlocksApproval(report.proofReceipt))
262
+ return 'fix first';
263
+ if (proofReceiptNeedsFocusedReview(report.proofReceipt))
264
+ return 'review';
228
265
  if (trust === 'actual_defect' || report.verdict === 'blocked')
229
266
  return trust === 'manual_review' ? 'review' : 'fix first';
230
267
  if (trust === 'manual_review' || report.verdict === 'caution')
@@ -1 +1 @@
1
- {"version":3,"file":"evidenceComment.js","sourceRoot":"","sources":["../../src/core/evidenceComment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidenceComment.js","sourceRoot":"","sources":["../../src/core/evidenceComment.ts"],"names":[],"mappings":"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"}