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 @@
1
+ {"version":3,"file":"qualityScorecardDimensions.js","sourceRoot":"","sources":["../../src/core/qualityScorecardDimensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Issue } from '../types/common.js';
2
+ import type { FileHotspot } from '../types/hotspots.js';
3
+ import type { PreflightSuggestedAction } from '../types/preflight.js';
4
+ import type { QualityScorecardRisk } from '../types/qualityScorecard.js';
5
+ import type { SessionConflict } from '../types/session.js';
6
+ export declare function qualityScorecardRisks(issues: Issue[], hotspots: FileHotspot[], conflicts: SessionConflict[]): QualityScorecardRisk[];
7
+ export declare function baselineQualityScorecardRisk(): QualityScorecardRisk;
8
+ export declare function suggestQualityScorecardActions(risks: QualityScorecardRisk[]): PreflightSuggestedAction[];
@@ -0,0 +1,107 @@
1
+ import { isMaintainabilityPenaltyHotspot } from './qualityScorecardDimensions.js';
2
+ import { quoteShellArg } from './startShellArgs.js';
3
+ export function qualityScorecardRisks(issues, hotspots, conflicts) {
4
+ return rankRisks([
5
+ ...issues.map(issueToRisk),
6
+ ...hotspots.map(hotspotToRisk),
7
+ ...conflicts.map(conflictToRisk),
8
+ ]);
9
+ }
10
+ export function baselineQualityScorecardRisk() {
11
+ return {
12
+ id: 'qs-baseline',
13
+ priority: 'p2',
14
+ title: 'Preserve the clean quality baseline',
15
+ files: [],
16
+ source: 'issue',
17
+ command: 'projscan quality-scorecard --format json',
18
+ };
19
+ }
20
+ export function suggestQualityScorecardActions(risks) {
21
+ return risks.slice(0, 8).map((risk) => ({
22
+ label: risk.title,
23
+ command: risk.command,
24
+ }));
25
+ }
26
+ function issueToRisk(issue) {
27
+ return {
28
+ id: `qs-issue-${issue.id}`,
29
+ priority: severityPriority(issue.severity),
30
+ title: issue.title,
31
+ files: issueFiles(issue),
32
+ source: 'issue',
33
+ command: 'projscan doctor --format json',
34
+ };
35
+ }
36
+ function hotspotToRisk(hotspot) {
37
+ return {
38
+ id: `qs-hotspot-${slug(hotspot.relativePath)}`,
39
+ priority: hotspotRiskPriority(hotspot),
40
+ title: `Hotspot ${hotspot.relativePath}`,
41
+ files: [hotspot.relativePath],
42
+ source: 'hotspot',
43
+ command: `projscan file ${quoteShellArg(hotspot.relativePath)} --format json`,
44
+ };
45
+ }
46
+ function hotspotRiskPriority(hotspot) {
47
+ if (!isMaintainabilityPenaltyHotspot(hotspot))
48
+ return 'p2';
49
+ return 'p1';
50
+ }
51
+ function conflictToRisk(conflict, index) {
52
+ return {
53
+ id: `qs-conflict-${index + 1}`,
54
+ priority: conflict.severity === 'error' ? 'p0' : 'p1',
55
+ title: conflict.message,
56
+ files: conflict.files,
57
+ source: 'coordination',
58
+ command: 'projscan session touched --format json',
59
+ };
60
+ }
61
+ function rankRisks(risks) {
62
+ const seen = new Set();
63
+ return risks
64
+ .map((risk, index) => ({ risk, index }))
65
+ .filter((entry) => {
66
+ const { risk } = entry;
67
+ if (seen.has(risk.id))
68
+ return false;
69
+ seen.add(risk.id);
70
+ return true;
71
+ })
72
+ .sort((a, b) => priorityRank(a.risk.priority) - priorityRank(b.risk.priority) ||
73
+ sourceRank(a.risk.source) - sourceRank(b.risk.source) ||
74
+ a.index - b.index)
75
+ .map((entry) => entry.risk);
76
+ }
77
+ function issueFiles(issue) {
78
+ return [...new Set((issue.locations ?? []).map((location) => location.file).filter(Boolean))];
79
+ }
80
+ function severityPriority(severity) {
81
+ if (severity === 'error')
82
+ return 'p0';
83
+ if (severity === 'warning')
84
+ return 'p1';
85
+ return 'p2';
86
+ }
87
+ function priorityRank(priority) {
88
+ if (priority === 'p0')
89
+ return 0;
90
+ if (priority === 'p1')
91
+ return 1;
92
+ return 2;
93
+ }
94
+ function sourceRank(source) {
95
+ if (source === 'issue')
96
+ return 0;
97
+ if (source === 'hotspot')
98
+ return 1;
99
+ return 2;
100
+ }
101
+ function slug(value) {
102
+ return (value
103
+ .replace(/[^a-zA-Z0-9]+/g, '-')
104
+ .replace(/^-+|-+$/g, '')
105
+ .toLowerCase() || 'root');
106
+ }
107
+ //# sourceMappingURL=qualityScorecardRisks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualityScorecardRisks.js","sourceRoot":"","sources":["../../src/core/qualityScorecardRisks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ProjectSignals } from './sessionResources.js';
2
+ import { calculateScore } from '../utils/scoreCalculator.js';
3
+ import type { Issue } from '../types/common.js';
4
+ import type { FileHotspot } from '../types/hotspots.js';
5
+ import type { SessionConflict } from '../types/session.js';
6
+ export interface QualityScorecardHotspotSignals {
7
+ available: boolean;
8
+ hotspots: FileHotspot[];
9
+ projectSignals?: ProjectSignals;
10
+ }
11
+ export interface QualityScorecardSignals {
12
+ issues: Issue[];
13
+ health: ReturnType<typeof calculateScore>;
14
+ hotspots: QualityScorecardHotspotSignals;
15
+ riskNow: {
16
+ touchedFiles: string[];
17
+ conflicts: SessionConflict[];
18
+ };
19
+ }
20
+ export declare function collectQualityScorecardSignals(rootPath: string, maxRisks: number): Promise<QualityScorecardSignals>;
@@ -0,0 +1,59 @@
1
+ import { buildCodeGraph } from './codeGraph.js';
2
+ import { analyzeHotspots } from './hotspotAnalyzer.js';
3
+ import { collectIssues } from './issueEngine.js';
4
+ import { scanRepository } from './repositoryScanner.js';
5
+ import { buildRiskNow } from './sessionResources.js';
6
+ import { applyConfigToIssues, loadConfig } from '../utils/config.js';
7
+ import { calculateScore } from '../utils/scoreCalculator.js';
8
+ const RISK_NOW_HOTSPOT_LIMIT = 50;
9
+ export async function collectQualityScorecardSignals(rootPath, maxRisks) {
10
+ const configResult = await loadConfig(rootPath).catch(() => ({ config: { ignore: [] } }));
11
+ const scan = await scanRepository(rootPath, {
12
+ ignore: configResult.config.ignore,
13
+ countIgnoredFiles: false,
14
+ });
15
+ const issues = applyConfigToIssues(await collectIssues(rootPath, scan.files), configResult.config);
16
+ const health = calculateScore(issues);
17
+ const hotspots = await safeHotspots(rootPath, scan.files, issues, maxRisks);
18
+ const riskNow = await safeRiskNow(rootPath, hotspots.projectSignals);
19
+ return { issues, health, hotspots, riskNow };
20
+ }
21
+ async function safeRiskNow(rootPath, projectSignals) {
22
+ try {
23
+ return await buildRiskNow(rootPath, projectSignals ? { projectSignals } : {});
24
+ }
25
+ catch {
26
+ return { touchedFiles: [], conflicts: [] };
27
+ }
28
+ }
29
+ async function safeHotspots(rootPath, files, issues, limit) {
30
+ try {
31
+ const graph = await buildCodeGraph(rootPath, files).catch(() => undefined);
32
+ const report = await analyzeHotspots(rootPath, files, issues, {
33
+ limit: Math.max(limit, RISK_NOW_HOTSPOT_LIMIT),
34
+ ...(graph ? { graph } : {}),
35
+ });
36
+ const projectSignals = {
37
+ issues,
38
+ hotspots: report.available
39
+ ? report.hotspots.map((hotspot) => ({
40
+ file: hotspot.relativePath,
41
+ riskScore: hotspot.riskScore,
42
+ }))
43
+ : null,
44
+ staleSignals: report.available
45
+ ? []
46
+ : [`hotspots unavailable: ${report.reason ?? 'unknown reason'}`],
47
+ ...(graph ? { graph } : {}),
48
+ };
49
+ return {
50
+ available: report.available,
51
+ hotspots: report.hotspots.slice(0, limit),
52
+ projectSignals,
53
+ };
54
+ }
55
+ catch {
56
+ return { available: false, hotspots: [] };
57
+ }
58
+ }
59
+ //# sourceMappingURL=qualityScorecardSignals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualityScorecardSignals.js","sourceRoot":"","sources":["../../src/core/qualityScorecardSignals.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export interface ComputeEvidencePackOptions {
8
8
  includePrComment?: boolean;
9
9
  maxFindings?: number;
10
10
  preflightMaxChangedFiles?: number;
11
+ baseRef?: string;
11
12
  }
12
13
  export declare function computeEvidencePack(rootPath: string, options?: ComputeEvidencePackOptions): Promise<EvidencePackReport>;
@@ -2,22 +2,26 @@ import { computeBugHunt } from './bugHunt.js';
2
2
  import { buildDailyPrWorkflow, renderEvidencePackPrComment, validateEvidencePackPrComment, } from './evidenceComment.js';
3
3
  export { buildDailyPrWorkflow, renderEvidencePackPrComment, validateEvidencePackPrComment };
4
4
  import { computePreflight } from './preflight.js';
5
- import { computeProve } from './prove.js';
6
5
  import { buildEvidencePackArtifacts } from './releaseEvidenceArtifacts.js';
7
6
  import { safeBaselineTrend } from './releaseEvidenceBaseline.js';
8
7
  import { buildEvidencePackPrSummary } from './releaseEvidencePrSummary.js';
8
+ import { safeProofReceipt } from './releaseEvidenceProofReceipt.js';
9
9
  export { calibratePreflightTrust } from './releaseEvidencePrSummary.js';
10
- import { approvalRecommendation, blockingEvidence, calibrateEvidencePackVerdict, evidencePackVerdict, summarizeEvidencePack, } from './releaseEvidenceVerdict.js';
10
+ import { approvalRecommendation, blockingEvidence, calibrateEvidencePackVerdict, calibrateEvidencePackVerdictForProof, evidencePackVerdict, summarizeEvidencePack, } from './releaseEvidenceVerdict.js';
11
11
  import { computeReleaseTrain } from './releaseTrain.js';
12
12
  import { computeWorkplan } from './workplan.js';
13
13
  import { loadOwnership } from './ownership.js';
14
+ import { getChangedFiles } from '../utils/changedFiles.js';
14
15
  export async function computeEvidencePack(rootPath, options = {}) {
16
+ const changedFiles = await safeChangedFilesResult(rootPath, options.baseRef);
15
17
  const [train, bugHunt, workplan, preflight] = await Promise.all([
16
18
  computeReleaseTrain(rootPath, { lines: options.lines }),
17
19
  computeBugHunt(rootPath, { maxFindings: options.maxFindings }),
18
20
  computeWorkplan(rootPath, { mode: 'release', maxTasks: 6 }),
19
21
  computePreflight(rootPath, {
20
22
  mode: 'before_merge',
23
+ baseRef: options.baseRef,
24
+ changedFiles,
21
25
  maxChangedFiles: options.preflightMaxChangedFiles,
22
26
  }),
23
27
  ]);
@@ -46,10 +50,10 @@ export async function computeEvidencePack(rootPath, options = {}) {
46
50
  baselineTrend,
47
51
  ownership,
48
52
  });
49
- const verdict = calibrateEvidencePackVerdict(rawVerdict, prSummary);
50
53
  const proofReceipt = options.includePrComment
51
- ? await safeProofReceipt(rootPath)
54
+ ? await safeProofReceipt(rootPath, { baseRef: options.baseRef, changedFiles })
52
55
  : undefined;
56
+ const verdict = calibrateEvidencePackVerdictForProof(calibrateEvidencePackVerdict(rawVerdict, prSummary), proofReceipt);
53
57
  const report = {
54
58
  schemaVersion: 1,
55
59
  currentVersion: train.currentVersion,
@@ -62,7 +66,7 @@ export async function computeEvidencePack(rootPath, options = {}) {
62
66
  },
63
67
  approval: {
64
68
  required: true,
65
- recommendation: approvalRecommendation(verdict),
69
+ recommendation: approvalRecommendation(verdict, proofReceipt),
66
70
  blockingReasons,
67
71
  },
68
72
  artifacts,
@@ -84,46 +88,17 @@ export async function computeEvidencePack(rootPath, options = {}) {
84
88
  prCommentValidation: validateEvidencePackPrComment(prComment, report),
85
89
  };
86
90
  }
87
- async function safeProofReceipt(rootPath) {
88
- const command = 'projscan prove --changed --format markdown';
91
+ async function safeChangedFilesResult(rootPath, baseRef) {
89
92
  try {
90
- const report = await computeProve(rootPath, { changed: true });
91
- const receipt = report.receipt;
92
- if (!receipt || receipt.scope.status === 'missing-contract') {
93
- return {
94
- available: false,
95
- command,
96
- summary: 'No Proof Contract was available for this evidence pack.',
97
- proofStatus: 'missing',
98
- reviewerDecision: 'needs-focused-review',
99
- missingCommands: [],
100
- failedCommands: [],
101
- staleCommands: [],
102
- };
103
- }
104
- return {
105
- available: true,
106
- command,
107
- summary: receipt.summary,
108
- proofStatus: receipt.proofStatus.status,
109
- reviewerDecision: receipt.reviewerDecision,
110
- scopeStatus: receipt.scope.status,
111
- riskDeltaDirection: receipt.riskDeltaDirection,
112
- missingCommands: receipt.proofStatus.missingCommands,
113
- failedCommands: receipt.proofStatus.failedCommands,
114
- staleCommands: receipt.proofStatus.staleCommands,
115
- };
93
+ return await getChangedFiles(rootPath, baseRef);
116
94
  }
117
95
  catch (error) {
118
96
  return {
119
97
  available: false,
120
- command,
121
- summary: `Proof Receipt unavailable: ${error instanceof Error ? error.message : 'unknown error'}`,
122
- proofStatus: 'missing',
123
- reviewerDecision: 'needs-focused-review',
124
- missingCommands: [],
125
- failedCommands: [],
126
- staleCommands: [],
98
+ reason: error instanceof Error ? error.message : String(error),
99
+ baseRef: null,
100
+ files: [],
101
+ uncommittedFiles: [],
127
102
  };
128
103
  }
129
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"releaseEvidence.js","sourceRoot":"","sources":["../../src/core/releaseEvidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"releaseEvidence.js","sourceRoot":"","sources":["../../src/core/releaseEvidence.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,10 @@ export async function safeBaselineTrend(rootPath) {
15
15
  }
16
16
  try {
17
17
  const configResult = await loadConfig(rootPath).catch(() => ({ config: { ignore: [] } }));
18
- const scan = await scanRepository(rootPath, { ignore: configResult.config.ignore });
18
+ const scan = await scanRepository(rootPath, {
19
+ ignore: configResult.config.ignore,
20
+ countIgnoredFiles: false,
21
+ });
19
22
  const issues = applyConfigToIssues(await collectIssues(rootPath, scan.files), configResult.config);
20
23
  const hotspots = await analyzeHotspots(rootPath, scan.files, issues, { limit: 20 });
21
24
  const baseline = await loadBaseline(baselinePath, rootPath);
@@ -1 +1 @@
1
- {"version":3,"file":"releaseEvidenceBaseline.js","sourceRoot":"","sources":["../../src/core/releaseEvidenceBaseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EACzC,YAAY,CAAC,MAAM,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"releaseEvidenceBaseline.js","sourceRoot":"","sources":["../../src/core/releaseEvidenceBaseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE;YAC1C,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM;YAClC,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EACzC,YAAY,CAAC,MAAM,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ChangedFilesResult } from '../utils/changedFiles.js';
2
+ import type { EvidencePackProofReceiptSummary } from '../types.js';
3
+ export declare function safeProofReceipt(rootPath: string, options: {
4
+ baseRef?: string;
5
+ changedFiles: ChangedFilesResult;
6
+ }): Promise<EvidencePackProofReceiptSummary>;
@@ -0,0 +1,140 @@
1
+ import { computeProve } from './prove.js';
2
+ export async function safeProofReceipt(rootPath, options) {
3
+ const command = 'projscan prove --changed --format markdown';
4
+ try {
5
+ const report = await computeProve(rootPath, {
6
+ changed: true,
7
+ baseRef: options.baseRef,
8
+ changedFiles: options.changedFiles,
9
+ });
10
+ const receipt = report.receipt;
11
+ if (!receipt || receipt.scope.status === 'missing-contract') {
12
+ return {
13
+ available: false,
14
+ command,
15
+ summary: 'No Proof Contract was available for this evidence pack.',
16
+ proofStatus: 'missing',
17
+ reviewerDecision: 'needs-focused-review',
18
+ proofSufficiencyStatus: 'missing',
19
+ proofReplayStatus: 'needs-proof',
20
+ changedAfterProof: [],
21
+ weakRequirements: [],
22
+ missingRequirements: [],
23
+ staleRequirements: [],
24
+ failedRequirements: [],
25
+ missingCommands: [],
26
+ failedCommands: [],
27
+ staleCommands: [],
28
+ teamProofRecipes: [],
29
+ requiredReviewers: [],
30
+ recipeGaps: [],
31
+ recipeDrift: [],
32
+ };
33
+ }
34
+ const proofSufficiency = receipt.proofSufficiency;
35
+ const proofReplay = receipt.proofReplay;
36
+ if (!proofSufficiency || !proofReplay) {
37
+ return {
38
+ available: false,
39
+ command,
40
+ summary: 'Proof Receipt was missing replay or sufficiency evidence.',
41
+ proofStatus: receipt.proofStatus.status,
42
+ reviewerDecision: receipt.reviewerDecision,
43
+ proofSufficiencyStatus: 'missing',
44
+ proofReplayStatus: 'needs-proof',
45
+ changedAfterProof: [],
46
+ weakRequirements: [],
47
+ missingRequirements: [],
48
+ staleRequirements: [],
49
+ failedRequirements: [],
50
+ missingCommands: receipt.proofStatus.missingCommands,
51
+ failedCommands: receipt.proofStatus.failedCommands,
52
+ staleCommands: receipt.proofStatus.staleCommands,
53
+ teamProofRecipes: [],
54
+ requiredReviewers: [],
55
+ recipeGaps: [],
56
+ recipeDrift: [],
57
+ };
58
+ }
59
+ return {
60
+ available: true,
61
+ command,
62
+ summary: receipt.summary,
63
+ proofStatus: receipt.proofStatus.status,
64
+ reviewerDecision: receipt.reviewerDecision,
65
+ scopeStatus: receipt.scope.status,
66
+ riskDeltaDirection: receipt.riskDeltaDirection,
67
+ proofSufficiencyStatus: proofSufficiency.status,
68
+ proofReplayStatus: proofReplay.status,
69
+ changedAfterProof: proofReplay.changedAfterProof,
70
+ receiptFingerprint: proofReplay.receiptFingerprint,
71
+ weakRequirements: proofSufficiency.weakRequirements,
72
+ missingRequirements: proofSufficiency.missingRequirements,
73
+ staleRequirements: proofSufficiency.staleRequirements,
74
+ failedRequirements: proofSufficiency.failedRequirements,
75
+ missingCommands: receipt.proofStatus.missingCommands,
76
+ failedCommands: receipt.proofStatus.failedCommands,
77
+ staleCommands: receipt.proofStatus.staleCommands,
78
+ proofEvidenceSources: proofEvidenceSourcesFor(receipt.proofStatus.commandEvidence),
79
+ teamProofRecipes: receipt.teamProofRecipes?.map((recipe) => recipe.id) ?? [],
80
+ requiredReviewers: receipt.requiredReviewers ?? [],
81
+ recipeGaps: receipt.recipeGaps ?? [],
82
+ recipeDrift: receipt.recipeDrift ?? [],
83
+ };
84
+ }
85
+ catch (error) {
86
+ return {
87
+ available: false,
88
+ command,
89
+ summary: `Proof Receipt unavailable: ${error instanceof Error ? error.message : 'unknown error'}`,
90
+ proofStatus: 'missing',
91
+ reviewerDecision: 'needs-focused-review',
92
+ proofSufficiencyStatus: 'missing',
93
+ proofReplayStatus: 'needs-proof',
94
+ changedAfterProof: [],
95
+ weakRequirements: [],
96
+ missingRequirements: [],
97
+ staleRequirements: [],
98
+ failedRequirements: [],
99
+ missingCommands: [],
100
+ failedCommands: [],
101
+ staleCommands: [],
102
+ teamProofRecipes: [],
103
+ requiredReviewers: [],
104
+ recipeGaps: [],
105
+ recipeDrift: [],
106
+ };
107
+ }
108
+ }
109
+ function proofEvidenceSourcesFor(commandEvidence) {
110
+ const summary = {
111
+ total: 0,
112
+ executed: 0,
113
+ recorded: 0,
114
+ mission: 0,
115
+ external: 0,
116
+ unknown: 0,
117
+ };
118
+ for (const evidence of commandEvidence) {
119
+ if (!evidence.source)
120
+ continue;
121
+ summary.total += 1;
122
+ if (evidence.source === 'prove-run') {
123
+ summary.executed += 1;
124
+ }
125
+ else if (evidence.source === 'prove-record') {
126
+ summary.recorded += 1;
127
+ }
128
+ else if (evidence.source === 'mission') {
129
+ summary.mission += 1;
130
+ }
131
+ else if (evidence.source === 'external') {
132
+ summary.external += 1;
133
+ }
134
+ else {
135
+ summary.unknown += 1;
136
+ }
137
+ }
138
+ return summary;
139
+ }
140
+ //# sourceMappingURL=releaseEvidenceProofReceipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseEvidenceProofReceipt.js","sourceRoot":"","sources":["../../src/core/releaseEvidenceProofReceipt.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
- import type { BugHuntReport, EvidencePackArtifact, EvidencePackPrSummary, EvidencePackVerdict, PreflightReport, WorkplanReport } from '../types.js';
1
+ import type { BugHuntReport, EvidencePackArtifact, EvidencePackPrSummary, EvidencePackProofReceiptSummary, EvidencePackVerdict, PreflightReport, WorkplanReport } from '../types.js';
2
2
  export declare function blockingEvidence(preflight: PreflightReport, bugHunt: BugHuntReport, workplan: WorkplanReport): string[];
3
3
  export declare function evidencePackVerdict(artifacts: EvidencePackArtifact[]): EvidencePackVerdict;
4
4
  export declare function calibrateEvidencePackVerdict(verdict: EvidencePackVerdict, prSummary: EvidencePackPrSummary): EvidencePackVerdict;
5
+ export declare function calibrateEvidencePackVerdictForProof(verdict: EvidencePackVerdict, proofReceipt: EvidencePackProofReceiptSummary | undefined): EvidencePackVerdict;
5
6
  export declare function summarizeEvidencePack(verdict: EvidencePackVerdict, currentVersion: string | null | undefined, blockingReasons: string[]): string;
6
- export declare function approvalRecommendation(verdict: EvidencePackVerdict): string;
7
+ export declare function approvalRecommendation(verdict: EvidencePackVerdict, proofReceipt?: EvidencePackProofReceiptSummary): string;
8
+ export declare function proofReceiptBlocksApproval(proofReceipt: EvidencePackProofReceiptSummary | undefined): boolean;
9
+ export declare function proofReceiptNeedsFocusedReview(proofReceipt: EvidencePackProofReceiptSummary | undefined): boolean;
@@ -31,6 +31,13 @@ export function calibrateEvidencePackVerdict(verdict, prSummary) {
31
31
  }
32
32
  return verdict;
33
33
  }
34
+ export function calibrateEvidencePackVerdictForProof(verdict, proofReceipt) {
35
+ if (proofReceiptBlocksApproval(proofReceipt))
36
+ return 'blocked';
37
+ if (proofReceiptNeedsFocusedReview(proofReceipt) && verdict === 'ready')
38
+ return 'caution';
39
+ return verdict;
40
+ }
34
41
  export function summarizeEvidencePack(verdict, currentVersion, blockingReasons) {
35
42
  const version = currentVersion ?? 'current version';
36
43
  if (verdict === 'blocked') {
@@ -41,13 +48,44 @@ export function summarizeEvidencePack(verdict, currentVersion, blockingReasons)
41
48
  }
42
49
  return `ready: ${version} evidence is assembled for approval`;
43
50
  }
44
- export function approvalRecommendation(verdict) {
51
+ export function approvalRecommendation(verdict, proofReceipt) {
52
+ if (proofReceiptBlocksApproval(proofReceipt))
53
+ return `Do not approve until the Proof Receipt is fixed. Run ${proofReceipt?.command ?? 'projscan prove --changed --format markdown'}.`;
54
+ if (proofReceiptNeedsFocusedReview(proofReceipt))
55
+ return `Review the Proof Receipt before approval. Run ${proofReceipt?.command ?? 'projscan prove --changed --format markdown'}.`;
45
56
  if (verdict === 'blocked')
46
57
  return 'Do not approve launch until p0 evidence is cleared or accepted.';
47
58
  if (verdict === 'caution')
48
59
  return 'Review cautions, then approve only after the regression plan passes.';
49
60
  return 'Approval can proceed after the recorded regression commands pass.';
50
61
  }
62
+ export function proofReceiptBlocksApproval(proofReceipt) {
63
+ if (!proofReceipt)
64
+ return false;
65
+ return (proofReceipt.reviewerDecision === 'stop' ||
66
+ proofReceipt.proofStatus === 'failed' ||
67
+ proofReceipt.proofSufficiencyStatus === 'failed' ||
68
+ proofReceipt.failedCommands.length > 0 ||
69
+ proofReceipt.failedRequirements.length > 0);
70
+ }
71
+ export function proofReceiptNeedsFocusedReview(proofReceipt) {
72
+ if (!proofReceipt)
73
+ return false;
74
+ if (proofReceiptBlocksApproval(proofReceipt))
75
+ return true;
76
+ return (!proofReceipt.available ||
77
+ proofReceipt.proofStatus !== 'passed' ||
78
+ proofReceipt.proofReplayStatus !== 'verified' ||
79
+ ['missing', 'stale', 'weak'].includes(proofReceipt.proofSufficiencyStatus ?? '') ||
80
+ proofReceipt.changedAfterProof.length > 0 ||
81
+ proofReceipt.missingCommands.length > 0 ||
82
+ proofReceipt.staleCommands.length > 0 ||
83
+ proofReceipt.missingRequirements.length > 0 ||
84
+ proofReceipt.staleRequirements.length > 0 ||
85
+ proofReceipt.weakRequirements.length > 0 ||
86
+ (proofReceipt.recipeGaps?.length ?? 0) > 0 ||
87
+ (proofReceipt.recipeDrift?.length ?? 0) > 0);
88
+ }
51
89
  function dedupeStrings(values) {
52
90
  return [...new Set(values.filter(Boolean))];
53
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"releaseEvidenceVerdict.js","sourceRoot":"","sources":["../../src/core/releaseEvidenceVerdict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"releaseEvidenceVerdict.js","sourceRoot":"","sources":["../../src/core/releaseEvidenceVerdict.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { ScanResult } from '../types.js';
2
2
  export interface ScanOptions {
3
3
  ignore?: string[];
4
4
  includeIgnored?: boolean;
5
+ countIgnoredFiles?: boolean;
5
6
  useConfig?: boolean;
6
7
  }
7
8
  export declare function scanRepository(rootPath: string, options?: ScanOptions): Promise<ScanResult>;