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,61 @@
1
+ export function issueToBugHuntFinding(issue) {
2
+ const files = filesFromIssue(issue);
3
+ return {
4
+ id: `bh-issue-${issue.id}`,
5
+ priority: severityPriority(issue.severity),
6
+ source: 'doctor',
7
+ title: issue.title,
8
+ why: issue.description,
9
+ files,
10
+ evidence: [
11
+ {
12
+ source: 'doctor',
13
+ severity: issue.severity,
14
+ issueId: issue.id,
15
+ message: issue.title,
16
+ ...(files[0] ? { file: files[0] } : {}),
17
+ },
18
+ ],
19
+ suggestedTools: issue.fixAvailable
20
+ ? ['projscan_explain_issue', 'projscan_fix_suggest', 'projscan_apply_fix']
21
+ : ['projscan_explain_issue', 'projscan_doctor'],
22
+ verification: {
23
+ commands: ['projscan doctor --format json', 'npm test'],
24
+ expected: `Issue ${issue.id} no longer appears in projscan doctor and focused tests pass.`,
25
+ },
26
+ };
27
+ }
28
+ export function conflictToBugHuntFinding(conflict, index) {
29
+ return {
30
+ id: `bh-session-${index + 1}`,
31
+ priority: conflict.severity === 'error' ? 'p0' : 'p1',
32
+ source: 'session',
33
+ title: 'Resolve active coordination conflict',
34
+ why: conflict.message,
35
+ files: conflict.files,
36
+ evidence: [
37
+ {
38
+ source: 'coordination',
39
+ severity: conflict.severity,
40
+ message: conflict.message,
41
+ ...(conflict.files[0] ? { file: conflict.files[0] } : {}),
42
+ },
43
+ ],
44
+ suggestedTools: ['projscan_session', 'projscan_workplan'],
45
+ verification: {
46
+ commands: ['projscan session touched --format json', 'projscan bug-hunt --format json'],
47
+ expected: 'Touched-file overlap is understood and no coordination blocker remains.',
48
+ },
49
+ };
50
+ }
51
+ function filesFromIssue(issue) {
52
+ return [...new Set((issue.locations ?? []).map((location) => location.file).filter(Boolean))];
53
+ }
54
+ function severityPriority(severity) {
55
+ if (severity === 'error')
56
+ return 'p0';
57
+ if (severity === 'warning')
58
+ return 'p1';
59
+ return 'p2';
60
+ }
61
+ //# sourceMappingURL=bugHuntSourceFindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bugHuntSourceFindings.js","sourceRoot":"","sources":["../../src/core/bugHuntSourceFindings.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO;QACL,EAAE,EAAE,YAAY,KAAK,CAAC,EAAE,EAAE;QAC1B,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,WAAW;QACtB,KAAK;QACL,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,EAAE,KAAK,CAAC,KAAK;gBACpB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC;SACF;QACD,cAAc,EAAE,KAAK,CAAC,YAAY;YAChC,CAAC,CAAC,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;YAC1E,CAAC,CAAC,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;QACjD,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,+BAA+B,EAAE,UAAU,CAAC;YACvD,QAAQ,EAAE,SAAS,KAAK,CAAC,EAAE,+DAA+D;SAC3F;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAyB,EACzB,KAAa;IAEb,OAAO;QACL,EAAE,EAAE,cAAc,KAAK,GAAG,CAAC,EAAE;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACrD,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,sCAAsC;QAC7C,GAAG,EAAE,QAAQ,CAAC,OAAO;QACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D;SACF;QACD,cAAc,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;QACzD,YAAY,EAAE;YACZ,QAAQ,EAAE,CAAC,wCAAwC,EAAE,iCAAiC,CAAC;YACvF,QAAQ,EAAE,yEAAyE;SACpF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAY;IAClC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA2B;IACnD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,27 +1,13 @@
1
- import path from 'node:path';
2
1
  import { resolveDogfoodRepos } from './dogfoodDiscovery.js';
3
- import { MIN_REPEAT_FEEDBACK_PRS, MIN_REPEAT_FEEDBACK_REPOS } from './feedback.js';
4
- import { computeEvidencePack } from './releaseEvidence.js';
5
- import { computeStartReport } from './start.js';
2
+ import { buildMarketValidation, DOGFOOD_WITH_FEEDBACK_COMMAND, FEEDBACK_CAPTURE_COMMAND, } from './dogfoodMarketValidation.js';
3
+ import { evaluateDogfoodRepo, FEEDBACK_INIT_COMMAND, normalizeDogfoodFeedback, } from './dogfoodRepoEvaluation.js';
6
4
  const DEFAULT_TARGET_REPO_COUNT = 3;
7
- const FEEDBACK_QUESTIONS = [
8
- 'Did the PR comment save 10-20 minutes?',
9
- 'What was missing or noisy?',
10
- 'Which owner or command should have been clearer?',
11
- 'Minutes saved: 0, 5, 10, 20+?',
12
- 'Did projscan prevent a risky edit or missed review step?',
13
- ];
14
- const FEEDBACK_INIT_COMMAND = 'projscan feedback init --output .projscan-feedback.json';
15
- const FEEDBACK_CAPTURE_COMMAND = 'projscan feedback add --file .projscan-feedback.json --repo <repo> --pr <url> --reviewer <handle> --useful true --minutes-saved 10';
16
- const DOGFOOD_WITH_FEEDBACK_COMMAND = 'projscan dogfood --repo <repo-a> --repo <repo-b> --repo <repo-c> --feedback .projscan-feedback.json --format json';
17
- const MIN_USEFUL_REVIEWER_RESPONSES = 3;
18
- const MIN_AVERAGE_MINUTES_SAVED = 10;
19
5
  export async function computeDogfoodReport(rootPath, options = {}) {
20
6
  const targetRepoCount = normalizeTargetRepoCount(options.targetRepoCount);
21
7
  const repoResolution = await resolveDogfoodRepos(rootPath, options, targetRepoCount);
22
8
  const repos = repoResolution.repos;
23
- const feedback = normalizeFeedback(options.feedback);
24
- const results = await Promise.all(repos.map((repoPath) => evaluateRepo(repoPath, feedback)));
9
+ const feedback = normalizeDogfoodFeedback(options.feedback);
10
+ const results = await Promise.all(repos.map((repoPath) => evaluateDogfoodRepo(repoPath, feedback)));
25
11
  const totals = summarizeTotals(results);
26
12
  const marketValidation = buildMarketValidation(results, targetRepoCount);
27
13
  return {
@@ -37,127 +23,11 @@ export async function computeDogfoodReport(rootPath, options = {}) {
37
23
  suggestedNextActions: buildDogfoodActions(results.length, targetRepoCount, marketValidation, repoResolution.discovery, results[0]?.feedbackCaptureCommand),
38
24
  };
39
25
  }
40
- async function evaluateRepo(repoPath, feedback) {
41
- const [start, evidence] = await Promise.all([
42
- computeStartReport(repoPath, { mode: 'before_merge', maxTasks: 4, maxRisks: 5 }),
43
- computeEvidencePack(repoPath, { includePrComment: true, maxFindings: 3 }),
44
- ]);
45
- const name = path.basename(repoPath) || repoPath;
46
- const prComment = evidence.prComment ?? '';
47
- const prCommentReady = evidence.prCommentValidation?.status === 'pass' && prComment.includes('### Developer Feedback');
48
- const repeatUseReady = start.adoptionLoop?.cadence === 'every_pr' &&
49
- (start.adoptionLoop.nextCommands.length ?? 0) >= 3;
50
- const mcpReady = start.evidence.mcpReady;
51
- const validation = summarizeRepoFeedback(feedbackForRepo(feedback, repoPath, name));
52
- const feedbackCaptureCommand = feedbackCaptureCommandForRepo(name);
53
- const gaps = buildGaps({
54
- prCommentReady,
55
- repeatUseReady,
56
- mcpReady,
57
- healthScore: start.evidence.healthScore,
58
- validation,
59
- });
60
- return {
61
- path: repoPath,
62
- name,
63
- status: statusFromGaps(gaps, start.evidence.healthScore),
64
- healthScore: start.evidence.healthScore,
65
- mcpReady,
66
- prCommentReady,
67
- repeatUseReady,
68
- verdict: evidence.verdict,
69
- gaps,
70
- feedbackQuestions: [...FEEDBACK_QUESTIONS],
71
- validation,
72
- feedbackCaptureCommand,
73
- nextCommands: [
74
- 'projscan init team --team platform',
75
- 'projscan evidence-pack --pr-comment',
76
- 'projscan preflight --mode before_merge --format json',
77
- FEEDBACK_INIT_COMMAND,
78
- feedbackCaptureCommand,
79
- DOGFOOD_WITH_FEEDBACK_COMMAND,
80
- ],
81
- };
82
- }
83
26
  function normalizeTargetRepoCount(value) {
84
27
  if (typeof value !== 'number' || !Number.isFinite(value))
85
28
  return DEFAULT_TARGET_REPO_COUNT;
86
29
  return Math.max(1, Math.floor(value));
87
30
  }
88
- function normalizeFeedback(input) {
89
- return Array.isArray(input?.responses) ? input.responses : [];
90
- }
91
- function feedbackCaptureCommandForRepo(repoName) {
92
- return ('projscan feedback add --file .projscan-feedback.json --repo ' +
93
- shellQuote(repoName) +
94
- ' --pr <url> --reviewer <handle> --useful true --minutes-saved 10');
95
- }
96
- function shellQuote(value) {
97
- if (/^[A-Za-z0-9_./:@%+=,-]+$/.test(value))
98
- return value;
99
- return "'" + value.replace(/'/g, "'\\''") + "'";
100
- }
101
- function feedbackForRepo(feedback, repoPath, repoName) {
102
- const normalizedPath = normalizeMatchValue(repoPath);
103
- const normalizedName = normalizeMatchValue(repoName);
104
- return feedback.filter((response) => {
105
- const repo = normalizeMatchValue(response.repo ?? '');
106
- if (!repo)
107
- return false;
108
- return matchesRepoKey(repo, normalizedName, normalizedPath);
109
- });
110
- }
111
- function matchesRepoKey(repo, repoName, repoPath) {
112
- if (repo === repoName || repo === repoPath || repoPath.endsWith('/' + repo))
113
- return true;
114
- if (repoName.startsWith(repo + '-') || repoName.endsWith('-' + repo))
115
- return true;
116
- if (repoName.includes('-' + repo + '-'))
117
- return true;
118
- if (repoPath.includes('/' + repo + '-') || repoPath.includes('/' + repo + '/'))
119
- return true;
120
- return repoPath.includes('-' + repo + '-');
121
- }
122
- function summarizeRepoFeedback(feedback) {
123
- return {
124
- feedbackResponses: feedback.length,
125
- usefulResponses: feedback.filter((response) => response.useful === true).length,
126
- prRefs: cleanSignals(feedback.map((response) => response.pr ?? '')),
127
- minutesSaved: sumNumbers(feedback.map((response) => response.minutesSaved)),
128
- preventedBadEdits: feedback.filter((response) => response.preventedBadEdit === true).length,
129
- ownerRoutingClear: feedback.filter((response) => response.ownerRoutingClear === true).length,
130
- nextCommandClear: feedback.filter((response) => response.nextCommandClear === true).length,
131
- falsePositiveRules: cleanSignals(feedback.flatMap((response) => response.falsePositiveRules ?? [])),
132
- missingSignals: cleanSignals(feedback.flatMap((response) => response.missingSignals ?? [])),
133
- noisyFindings: cleanSignals(feedback.flatMap((response) => response.noisyFindings ?? [])),
134
- };
135
- }
136
- function buildGaps(input) {
137
- const gaps = [];
138
- if (input.healthScore < 80)
139
- gaps.push('health score below adoption threshold');
140
- if (!input.mcpReady)
141
- gaps.push('MCP setup not ready');
142
- if (!input.prCommentReady)
143
- gaps.push('PR comment is missing required usefulness sections');
144
- if (!input.repeatUseReady)
145
- gaps.push('repeat-use adoption loop is missing');
146
- if (input.validation.falsePositiveRules.length > 0) {
147
- gaps.push('reviewer reported false-positive rule(s): ' + input.validation.falsePositiveRules.join(', '));
148
- }
149
- if (input.validation.missingSignals.length > 0) {
150
- gaps.push('reviewer reported missing signal(s): ' + input.validation.missingSignals.join('; '));
151
- }
152
- return gaps;
153
- }
154
- function statusFromGaps(gaps, healthScore) {
155
- if (healthScore < 70 || gaps.some((gap) => gap.includes('PR comment')))
156
- return 'fail';
157
- if (gaps.length > 0)
158
- return 'warn';
159
- return 'pass';
160
- }
161
31
  function summarizeTotals(repos) {
162
32
  return {
163
33
  reposEvaluated: repos.length,
@@ -173,225 +43,6 @@ function summarizeTotals(repos) {
173
43
  falsePositiveReports: repos.reduce((sum, repo) => sum + repo.validation.falsePositiveRules.length, 0),
174
44
  };
175
45
  }
176
- function buildMarketValidation(repos, targetRepoCount) {
177
- const responseCount = repos.reduce((sum, repo) => sum + repo.validation.feedbackResponses, 0);
178
- const usefulResponses = repos.reduce((sum, repo) => sum + repo.validation.usefulResponses, 0);
179
- const totalMinutesSaved = repos.reduce((sum, repo) => sum + repo.validation.minutesSaved, 0);
180
- const preventedBadEdits = repos.reduce((sum, repo) => sum + repo.validation.preventedBadEdits, 0);
181
- const ownerRoutingClear = repos.reduce((sum, repo) => sum + repo.validation.ownerRoutingClear, 0);
182
- const nextCommandClear = repos.reduce((sum, repo) => sum + repo.validation.nextCommandClear, 0);
183
- const falsePositive = {
184
- totalReports: repos.reduce((sum, repo) => sum + repo.validation.falsePositiveRules.length, 0),
185
- noisyRules: countSignals(repos.flatMap((repo) => repo.validation.falsePositiveRules), 'rule'),
186
- missingSignals: countSignals(repos.flatMap((repo) => repo.validation.missingSignals), 'signal'),
187
- noisyFindings: countSignals(repos.flatMap((repo) => repo.validation.noisyFindings), 'finding'),
188
- };
189
- const repoCoverage = {
190
- target: targetRepoCount,
191
- evaluated: repos.length,
192
- targetMet: repos.length >= targetRepoCount,
193
- };
194
- const firstPr = {
195
- readyRepos: repos.filter((repo) => repo.prCommentReady).length,
196
- repeatUseReadyRepos: repos.filter((repo) => repo.repeatUseReady).length,
197
- requiredFeedbackQuestions: [...FEEDBACK_QUESTIONS],
198
- };
199
- const feedback = {
200
- responses: responseCount,
201
- usefulResponses,
202
- usefulnessRate: responseCount > 0 ? round(usefulResponses / responseCount) : 0,
203
- preventedBadEdits,
204
- ownerRoutingClear,
205
- nextCommandClear,
206
- minutesSaved: {
207
- total: totalMinutesSaved,
208
- average: responseCount > 0 ? round(totalMinutesSaved / responseCount) : 0,
209
- max: Math.max(0, ...repos.map((repo) => repo.validation.minutesSaved)),
210
- },
211
- };
212
- const repeatUse = summarizeRepeatUse(repos);
213
- const value = {
214
- averageMinutesSaved: feedback.minutesSaved.average,
215
- requiredAverageMinutesSaved: MIN_AVERAGE_MINUTES_SAVED,
216
- preventedBadEdits,
217
- ready: feedback.minutesSaved.average >= MIN_AVERAGE_MINUTES_SAVED || preventedBadEdits > 0,
218
- };
219
- const feedbackCaptureCommand = firstFeedbackCaptureCommand(repos);
220
- const status = marketStatus({
221
- targetMet: repoCoverage.targetMet,
222
- responses: responseCount,
223
- usefulResponses,
224
- falsePositiveReports: falsePositive.totalReports,
225
- valueReady: value.ready,
226
- repeatUseReady: repeatUse.ready,
227
- });
228
- const summary = summarizeMarketValidation(status, repoCoverage.evaluated, targetRepoCount, feedback, falsePositive.totalReports, value, repeatUse);
229
- const proofGates = buildProofGates(repoCoverage, feedback, value, repeatUse, falsePositive.totalReports, feedbackCaptureCommand);
230
- const nextProofStep = nextProofStepFromGates(status, proofGates);
231
- return {
232
- status,
233
- summary,
234
- proofGates,
235
- nextProofStep,
236
- repoCoverage,
237
- feedback,
238
- falsePositive,
239
- firstPr,
240
- value,
241
- repeatUse,
242
- websiteProof: buildWebsiteProof(repos, feedback, falsePositive.totalReports, status, repeatUse),
243
- };
244
- }
245
- function marketStatus(input) {
246
- if (!input.targetMet)
247
- return 'needs_more_repos';
248
- if (input.responses === 0)
249
- return 'needs_feedback';
250
- if (input.usefulResponses < MIN_USEFUL_REVIEWER_RESPONSES)
251
- return 'needs_tuning';
252
- if (input.falsePositiveReports > input.usefulResponses)
253
- return 'needs_tuning';
254
- if (!input.valueReady)
255
- return 'needs_tuning';
256
- if (!input.repeatUseReady)
257
- return 'needs_tuning';
258
- return 'proven';
259
- }
260
- function buildProofGates(repoCoverage, feedback, value, repeatUse, falsePositiveReports, feedbackCaptureCommand) {
261
- const moreRepos = Math.max(0, repoCoverage.target - repoCoverage.evaluated);
262
- const moreUsefulResponses = Math.max(0, MIN_USEFUL_REVIEWER_RESPONSES - feedback.usefulResponses);
263
- const moreRepeatedRepos = Math.max(0, repeatUse.requiredRepeatedRepos - repeatUse.repeatedRepos);
264
- return [
265
- {
266
- id: 'repo-coverage',
267
- status: repoCoverage.targetMet ? 'pass' : 'fail',
268
- summary: repoCoverage.targetMet
269
- ? `${repoCoverage.evaluated}/${repoCoverage.target} repo target met.`
270
- : `Add ${moreRepos} more repo(s) before calling adoption proven.`,
271
- command: 'projscan dogfood --repo <repo-a> --repo <repo-b> --repo <repo-c> --format json',
272
- },
273
- {
274
- id: 'reviewer-feedback',
275
- status: feedback.responses > 0 ? 'pass' : 'fail',
276
- summary: feedback.responses > 0
277
- ? `${feedback.responses} reviewer response(s) captured.`
278
- : 'Capture structured reviewer feedback from the first real PR.',
279
- command: feedbackCaptureCommand,
280
- },
281
- {
282
- id: 'useful-feedback',
283
- status: feedback.usefulResponses >= MIN_USEFUL_REVIEWER_RESPONSES ? 'pass' : 'fail',
284
- summary: feedback.usefulResponses >= MIN_USEFUL_REVIEWER_RESPONSES
285
- ? `${feedback.usefulResponses} useful reviewer response(s) captured.`
286
- : `Collect at least ${moreUsefulResponses} more useful reviewer response(s).`,
287
- command: feedbackCaptureCommand,
288
- },
289
- {
290
- id: 'repeat-use',
291
- status: repeatUse.ready ? 'pass' : 'fail',
292
- summary: repeatUse.ready
293
- ? `${repeatUse.repeatedRepos} repo(s) with repeat PR feedback and ${repeatUse.distinctPrs} distinct PR(s).`
294
- : `Capture repeat PR feedback in at least ${moreRepeatedRepos} repo(s).`,
295
- command: DOGFOOD_WITH_FEEDBACK_COMMAND,
296
- },
297
- {
298
- id: 'measured-value',
299
- status: value.ready ? 'pass' : 'fail',
300
- summary: value.ready
301
- ? `Measured value ready: ${value.averageMinutesSaved} average minutes saved or ${value.preventedBadEdits} risky edit(s) prevented.`
302
- : 'Record 10+ average minutes saved or at least one prevented risky edit.',
303
- command: feedbackCaptureCommand,
304
- },
305
- {
306
- id: 'false-positive-balance',
307
- status: falsePositiveReports <= feedback.usefulResponses ? 'pass' : 'fail',
308
- summary: falsePositiveReports <= feedback.usefulResponses
309
- ? `${falsePositiveReports} false-positive report(s) do not outnumber ${feedback.usefulResponses} useful response(s).`
310
- : 'Tune false-positive reports until they no longer outnumber useful responses.',
311
- command: 'projscan memory stable --format json',
312
- },
313
- ];
314
- }
315
- function firstFeedbackCaptureCommand(repos) {
316
- return repos.find((repo) => repo.feedbackCaptureCommand)?.feedbackCaptureCommand ?? FEEDBACK_CAPTURE_COMMAND;
317
- }
318
- function nextProofStepFromGates(status, proofGates) {
319
- if (status === 'proven')
320
- return 'Adoption proof is ready for public claims.';
321
- return (proofGates.find((gate) => gate.status === 'fail')?.summary ??
322
- 'Review adoption proof gates before expanding rollout.');
323
- }
324
- function summarizeMarketValidation(status, evaluated, target, feedback, falsePositiveReports, value, repeatUse) {
325
- const base = evaluated +
326
- '/' +
327
- target +
328
- ' repo target; ' +
329
- feedback.responses +
330
- ' reviewer response(s); ' +
331
- feedback.minutesSaved.total +
332
- ' minutes saved; avg ' +
333
- value.averageMinutesSaved +
334
- '/' +
335
- value.requiredAverageMinutesSaved +
336
- ' min target; ' +
337
- feedback.preventedBadEdits +
338
- ' risky edit(s) prevented; ' +
339
- falsePositiveReports +
340
- ' false-positive report(s); ' +
341
- repeatUse.repeatedRepos +
342
- ' repo(s) with repeat PR feedback';
343
- if (status === 'proven')
344
- return 'market validation proven: ' + base;
345
- if (status === 'needs_more_repos')
346
- return 'market validation needs more repos: ' + base;
347
- if (status === 'needs_feedback')
348
- return 'market validation needs reviewer feedback: ' + base;
349
- return 'market validation needs tuning: ' + base;
350
- }
351
- function buildWebsiteProof(repos, feedback, falsePositiveReports, status, repeatUse) {
352
- const repoCount = repos.length;
353
- const headline = buildWebsiteProofHeadline(status, repoCount);
354
- const metrics = [
355
- repoCount + ' real repo(s) evaluated',
356
- feedback.responses + ' reviewer response(s)',
357
- feedback.minutesSaved.total + ' minutes saved',
358
- feedback.preventedBadEdits + ' risky edits prevented',
359
- repeatUse.repeatedRepos + ' repo(s) with repeat PR feedback',
360
- falsePositiveReports + ' false-positive report(s) tracked',
361
- ];
362
- const claimBullet = status === 'proven'
363
- ? 'Website claims can cite measured minutes saved and risky edits prevented instead of generic scanner claims.'
364
- : 'Website claims should stay provisional until repo coverage, useful feedback, and false-positive tuning are ready.';
365
- const bullets = [
366
- 'Generated PR comments were validated before posting.',
367
- 'Reviewer feedback is captured as structured dogfood evidence.',
368
- 'Repeat PR use is measured separately from first-PR usefulness.',
369
- 'False positives, missing signals, owner clarity, and next-command clarity are visible in one report.',
370
- claimBullet,
371
- ];
372
- const markdown = [
373
- '## Market Validation Proof',
374
- '',
375
- '**Status:** ' + status,
376
- '**Headline:** ' + headline,
377
- '',
378
- '### Metrics',
379
- ...metrics.map((metric) => '- ' + metric),
380
- '',
381
- '### What To Show On The Website',
382
- ...bullets.map((bullet) => '- ' + bullet),
383
- ].join('\\n');
384
- return { headline, metrics, bullets, markdown };
385
- }
386
- function buildWebsiteProofHeadline(status, repoCount) {
387
- if (status === 'proven')
388
- return 'projscan proved useful across ' + repoCount + ' real repo(s)';
389
- if (status === 'needs_more_repos')
390
- return 'projscan needs more real-repo validation before public proof';
391
- if (status === 'needs_feedback')
392
- return 'projscan needs reviewer feedback before usefulness proof';
393
- return 'projscan needs tuning before usefulness proof';
394
- }
395
46
  function summarizeDogfood(reposEvaluated, targetRepoCount, totals, marketValidation) {
396
47
  const target = reposEvaluated >= targetRepoCount ? 'target met' : 'needs more repos';
397
48
  return ('dogfood: ' +
@@ -473,44 +124,4 @@ function dedupeActions(actions) {
473
124
  }
474
125
  return result;
475
126
  }
476
- function summarizeRepeatUse(repos) {
477
- const distinctPrs = countDistinct(repos.flatMap((repo) => repo.validation.prRefs));
478
- const repeatedRepos = repos.filter((repo) => countDistinct(repo.validation.prRefs) >= 2).length;
479
- return {
480
- distinctPrs,
481
- repeatedRepos,
482
- requiredDistinctPrs: MIN_REPEAT_FEEDBACK_PRS,
483
- requiredRepeatedRepos: MIN_REPEAT_FEEDBACK_REPOS,
484
- ready: distinctPrs >= MIN_REPEAT_FEEDBACK_PRS && repeatedRepos >= MIN_REPEAT_FEEDBACK_REPOS,
485
- };
486
- }
487
- function countDistinct(values) {
488
- return new Set(values.map(normalizeMatchValue).filter(Boolean)).size;
489
- }
490
- function countSignals(values, key) {
491
- const counts = new Map();
492
- for (const value of cleanSignals(values))
493
- counts.set(value, (counts.get(value) ?? 0) + 1);
494
- return [...counts.entries()]
495
- .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
496
- .map(([value, count]) => ({ [key]: value, count }));
497
- }
498
- function cleanSignals(values) {
499
- return values
500
- .map((value) => value.trim())
501
- .filter((value) => value.length > 0 && value.toLowerCase() !== 'none');
502
- }
503
- function sumNumbers(values) {
504
- return values.reduce((sum, value) => {
505
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0)
506
- return sum;
507
- return sum + value;
508
- }, 0);
509
- }
510
- function normalizeMatchValue(value) {
511
- return value.replace(/\\/g, '/').replace(/\/$/, '').trim().toLowerCase();
512
- }
513
- function round(value) {
514
- return Math.round(value * 100) / 100;
515
- }
516
127
  //# sourceMappingURL=dogfood.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dogfood.js","sourceRoot":"","sources":["../../src/core/dogfood.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dogfood.js","sourceRoot":"","sources":["../../src/core/dogfood.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DogfoodMarketValidation, DogfoodRepoResult } from '../types/dogfood.js';
2
+ export declare const FEEDBACK_QUESTIONS: readonly ["Did the PR comment save 10-20 minutes?", "What was missing or noisy?", "Which owner or command should have been clearer?", "Minutes saved: 0, 5, 10, 20+?", "Did projscan prevent a risky edit or missed review step?"];
3
+ export declare const FEEDBACK_CAPTURE_COMMAND = "projscan feedback add --file .projscan-feedback.json --repo <repo> --pr <url> --reviewer <handle> --useful true --minutes-saved 10";
4
+ export declare const DOGFOOD_WITH_FEEDBACK_COMMAND = "projscan dogfood --repo <repo-a> --repo <repo-b> --repo <repo-c> --feedback .projscan-feedback.json --format json";
5
+ export declare function buildMarketValidation(repos: DogfoodRepoResult[], targetRepoCount: number): DogfoodMarketValidation;