projscan 4.7.0 → 4.8.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.
- package/README.md +22 -22
- package/dist/cli/commands/start.js +5 -28
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/startOptionsRegistration.d.ts +2 -0
- package/dist/cli/commands/startOptionsRegistration.js +29 -0
- package/dist/cli/commands/startOptionsRegistration.js.map +1 -0
- package/dist/core/ast.d.ts +2 -17
- package/dist/core/ast.js +4 -33
- package/dist/core/ast.js.map +1 -1
- package/dist/core/astResult.d.ts +20 -0
- package/dist/core/astResult.js +39 -0
- package/dist/core/astResult.js.map +1 -0
- package/dist/core/codeGraph.d.ts +1 -16
- package/dist/core/codeGraph.js +4 -89
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/codeGraphAdapterContexts.d.ts +8 -0
- package/dist/core/codeGraphAdapterContexts.js +14 -0
- package/dist/core/codeGraphAdapterContexts.js.map +1 -0
- package/dist/core/codeGraphIncremental.d.ts +17 -0
- package/dist/core/codeGraphIncremental.js +64 -0
- package/dist/core/codeGraphIncremental.js.map +1 -0
- package/dist/core/collisionDetector.d.ts +1 -0
- package/dist/core/collisionDetector.js +3 -0
- package/dist/core/collisionDetector.js.map +1 -1
- package/dist/core/coordination.js +23 -5
- package/dist/core/coordination.js.map +1 -1
- package/dist/core/coordinationEvidence.d.ts +1 -0
- package/dist/core/coordinationEvidence.js.map +1 -1
- package/dist/core/frameworkExpressSources.js +6 -31
- package/dist/core/frameworkExpressSources.js.map +1 -1
- package/dist/core/frameworkFastifySources.js +5 -22
- package/dist/core/frameworkFastifySources.js.map +1 -1
- package/dist/core/frameworkHonoSources.js +5 -24
- package/dist/core/frameworkHonoSources.js.map +1 -1
- package/dist/core/frameworkKoaSources.js +5 -24
- package/dist/core/frameworkKoaSources.js.map +1 -1
- package/dist/core/frameworkSourceContext.d.ts +15 -0
- package/dist/core/frameworkSourceContext.js +2 -0
- package/dist/core/frameworkSourceContext.js.map +1 -0
- package/dist/core/frameworkSourceMatching.d.ts +6 -0
- package/dist/core/frameworkSourceMatching.js +29 -0
- package/dist/core/frameworkSourceMatching.js.map +1 -0
- package/dist/core/frameworkSourceResolvers.d.ts +2 -0
- package/dist/core/frameworkSourceResolvers.js +45 -0
- package/dist/core/frameworkSourceResolvers.js.map +1 -0
- package/dist/core/frameworkSources.d.ts +2 -14
- package/dist/core/frameworkSources.js +9 -38
- package/dist/core/frameworkSources.js.map +1 -1
- package/dist/core/frameworkSvelteKitSources.d.ts +2 -0
- package/dist/core/frameworkSvelteKitSources.js +118 -0
- package/dist/core/frameworkSvelteKitSources.js.map +1 -0
- package/dist/core/intentRouter.d.ts +1 -1
- package/dist/core/intentRouter.js +2 -8
- package/dist/core/intentRouter.js.map +1 -1
- package/dist/core/intentRouterCatalog.js +32 -0
- package/dist/core/intentRouterCatalog.js.map +1 -1
- package/dist/core/intentRouterKeywordToolGuards.js +5 -0
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +23 -0
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterReleaseSignals.js +3 -18
- package/dist/core/intentRouterReleaseSignals.js.map +1 -1
- package/dist/core/intentRouterResolution.d.ts +3 -0
- package/dist/core/intentRouterResolution.js +11 -0
- package/dist/core/intentRouterResolution.js.map +1 -0
- package/dist/core/languages/pythonManifests.js +6 -19
- package/dist/core/languages/pythonManifests.js.map +1 -1
- package/dist/core/languages/pythonPep508.js +1 -1
- package/dist/core/languages/pythonPep508.js.map +1 -1
- package/dist/core/languages/pythonProjectEvidence.js +4 -4
- package/dist/core/languages/pythonProjectEvidence.js.map +1 -1
- package/dist/core/languages/pythonPyproject.js +1 -1
- package/dist/core/languages/pythonPyproject.js.map +1 -1
- package/dist/core/languages/pythonPyprojectEvidence.d.ts +7 -0
- package/dist/core/languages/pythonPyprojectEvidence.js +23 -0
- package/dist/core/languages/pythonPyprojectEvidence.js.map +1 -0
- package/dist/core/languages/pythonRequirements.d.ts +2 -0
- package/dist/core/languages/pythonRequirements.js +74 -9
- package/dist/core/languages/pythonRequirements.js.map +1 -1
- package/dist/core/pluginAnalyzerLoading.d.ts +3 -0
- package/dist/core/pluginAnalyzerLoading.js +55 -0
- package/dist/core/pluginAnalyzerLoading.js.map +1 -0
- package/dist/core/pluginAnalyzerRunning.d.ts +10 -0
- package/dist/core/pluginAnalyzerRunning.js +32 -0
- package/dist/core/pluginAnalyzerRunning.js.map +1 -0
- package/dist/core/pluginIssueValidation.d.ts +2 -0
- package/dist/core/pluginIssueValidation.js +22 -0
- package/dist/core/pluginIssueValidation.js.map +1 -0
- package/dist/core/pluginManifestDiscovery.d.ts +25 -0
- package/dist/core/pluginManifestDiscovery.js +80 -0
- package/dist/core/pluginManifestDiscovery.js.map +1 -0
- package/dist/core/pluginModuleLoading.d.ts +8 -0
- package/dist/core/pluginModuleLoading.js +91 -0
- package/dist/core/pluginModuleLoading.js.map +1 -0
- package/dist/core/pluginReporterLoading.d.ts +41 -0
- package/dist/core/pluginReporterLoading.js +105 -0
- package/dist/core/pluginReporterLoading.js.map +1 -0
- package/dist/core/pluginRuntimeTypes.d.ts +20 -0
- package/dist/core/pluginRuntimeTypes.js +2 -0
- package/dist/core/pluginRuntimeTypes.js.map +1 -0
- package/dist/core/plugins.d.ts +9 -86
- package/dist/core/plugins.js +12 -350
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/preflight.d.ts +1 -2
- package/dist/core/preflight.js +4 -91
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/preflightEvidence.js +11 -0
- package/dist/core/preflightEvidence.js.map +1 -1
- package/dist/core/preflightInputs.d.ts +1 -0
- package/dist/core/preflightInputs.js.map +1 -1
- package/dist/core/preflightReasons.d.ts +21 -0
- package/dist/core/preflightReasons.js +28 -0
- package/dist/core/preflightReasons.js.map +1 -0
- package/dist/core/preflightReport.d.ts +9 -0
- package/dist/core/preflightReport.js +67 -0
- package/dist/core/preflightReport.js.map +1 -0
- package/dist/core/review.js +2 -47
- package/dist/core/review.js.map +1 -1
- package/dist/core/reviewChangedReport.d.ts +13 -0
- package/dist/core/reviewChangedReport.js +38 -0
- package/dist/core/reviewChangedReport.js.map +1 -0
- package/dist/core/reviewComputation.d.ts +9 -0
- package/dist/core/reviewComputation.js +14 -0
- package/dist/core/reviewComputation.js.map +1 -0
- package/dist/core/reviewContractChanges.js +22 -8
- package/dist/core/reviewContractChanges.js.map +1 -1
- package/dist/core/reviewDataflow.js +18 -0
- package/dist/core/reviewDataflow.js.map +1 -1
- package/dist/core/roadmapCatalog.js +7 -203
- package/dist/core/roadmapCatalog.js.map +1 -1
- package/dist/core/roadmapCatalogPost44.d.ts +2 -0
- package/dist/core/roadmapCatalogPost44.js +205 -0
- package/dist/core/roadmapCatalogPost44.js.map +1 -0
- package/dist/core/roadmapCatalogTypes.d.ts +6 -0
- package/dist/core/roadmapCatalogTypes.js +2 -0
- package/dist/core/roadmapCatalogTypes.js.map +1 -0
- package/dist/core/startClaimRouteCriteria.d.ts +7 -0
- package/dist/core/startClaimRouteCriteria.js +16 -0
- package/dist/core/startClaimRouteCriteria.js.map +1 -0
- package/dist/core/startCouplingRouteCriteria.d.ts +2 -0
- package/dist/core/startCouplingRouteCriteria.js +13 -0
- package/dist/core/startCouplingRouteCriteria.js.map +1 -0
- package/dist/core/startDependencyRouteCriteria.d.ts +2 -0
- package/dist/core/startDependencyRouteCriteria.js +43 -0
- package/dist/core/startDependencyRouteCriteria.js.map +1 -0
- package/dist/core/startFileRouteCriteria.d.ts +2 -0
- package/dist/core/startFileRouteCriteria.js +56 -0
- package/dist/core/startFileRouteCriteria.js.map +1 -0
- package/dist/core/startFixedRouteCriteria.d.ts +1 -0
- package/dist/core/startFixedRouteCriteria.js +90 -0
- package/dist/core/startFixedRouteCriteria.js.map +1 -0
- package/dist/core/startImpactRouteCriteria.d.ts +7 -0
- package/dist/core/startImpactRouteCriteria.js +14 -0
- package/dist/core/startImpactRouteCriteria.js.map +1 -0
- package/dist/core/startIntentTargets.d.ts +1 -0
- package/dist/core/startIntentTargets.js +28 -0
- package/dist/core/startIntentTargets.js.map +1 -1
- package/dist/core/startMissionControl.js +8 -2
- package/dist/core/startMissionControl.js.map +1 -1
- package/dist/core/startMissionPolicy.js +2 -0
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMode.d.ts +1 -0
- package/dist/core/startMode.js +10 -2
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startPreflightRouteCriteria.d.ts +11 -0
- package/dist/core/startPreflightRouteCriteria.js +29 -0
- package/dist/core/startPreflightRouteCriteria.js.map +1 -0
- package/dist/core/startProductPlanningRouteCriteria.d.ts +8 -0
- package/dist/core/startProductPlanningRouteCriteria.js +29 -0
- package/dist/core/startProductPlanningRouteCriteria.js.map +1 -0
- package/dist/core/startRegressionRouteCriteria.d.ts +3 -0
- package/dist/core/startRegressionRouteCriteria.js +62 -0
- package/dist/core/startRegressionRouteCriteria.js.map +1 -0
- package/dist/core/startRouteActions.js +39 -1
- package/dist/core/startRouteActions.js.map +1 -1
- package/dist/core/startSuccessCriteria.d.ts +2 -3
- package/dist/core/startSuccessCriteria.js +15 -419
- package/dist/core/startSuccessCriteria.js.map +1 -1
- package/dist/core/startUnderstandRouteCriteria.d.ts +3 -0
- package/dist/core/startUnderstandRouteCriteria.js +97 -0
- package/dist/core/startUnderstandRouteCriteria.js.map +1 -0
- package/dist/core/telemetry.d.ts +9 -89
- package/dist/core/telemetry.js +33 -391
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/telemetryConfig.d.ts +58 -0
- package/dist/core/telemetryConfig.js +171 -0
- package/dist/core/telemetryConfig.js.map +1 -0
- package/dist/core/telemetryEvents.d.ts +57 -0
- package/dist/core/telemetryEvents.js +143 -0
- package/dist/core/telemetryEvents.js.map +1 -0
- package/dist/core/telemetryFlushing.d.ts +10 -0
- package/dist/core/telemetryFlushing.js +42 -0
- package/dist/core/telemetryFlushing.js.map +1 -0
- package/dist/core/telemetryRecording.d.ts +26 -0
- package/dist/core/telemetryRecording.js +38 -0
- package/dist/core/telemetryRecording.js.map +1 -0
- package/dist/core/telemetrySender.d.ts +9 -0
- package/dist/core/telemetrySender.js +22 -0
- package/dist/core/telemetrySender.js.map +1 -0
- package/dist/index.d.ts +4 -60
- package/dist/index.js +4 -60
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +2 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/serverMessageHandling.d.ts +3 -0
- package/dist/mcp/serverMessageHandling.js +16 -0
- package/dist/mcp/serverMessageHandling.js.map +1 -0
- package/dist/mcp/toolDefinitions.d.ts +3 -0
- package/dist/mcp/toolDefinitions.js +15 -0
- package/dist/mcp/toolDefinitions.js.map +1 -0
- package/dist/mcp/tools.js +2 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/publicAgent.d.ts +22 -0
- package/dist/publicAgent.js +23 -0
- package/dist/publicAgent.js.map +1 -0
- package/dist/publicCore.d.ts +29 -0
- package/dist/publicCore.js +30 -0
- package/dist/publicCore.js.map +1 -0
- package/dist/publicLanguages.d.ts +1 -0
- package/dist/publicLanguages.js +2 -0
- package/dist/publicLanguages.js.map +1 -0
- package/dist/publicMcp.d.ts +8 -0
- package/dist/publicMcp.js +9 -0
- package/dist/publicMcp.js.map +1 -0
- package/dist/reporters/htmlAnalysisReporter.d.ts +3 -0
- package/dist/reporters/htmlAnalysisReporter.js +98 -0
- package/dist/reporters/htmlAnalysisReporter.js.map +1 -0
- package/dist/reporters/htmlCoverageReporter.d.ts +2 -0
- package/dist/reporters/htmlCoverageReporter.js +52 -0
- package/dist/reporters/htmlCoverageReporter.js.map +1 -0
- package/dist/reporters/htmlImpactReporter.d.ts +2 -0
- package/dist/reporters/htmlImpactReporter.js +41 -0
- package/dist/reporters/htmlImpactReporter.js.map +1 -0
- package/dist/reporters/htmlPrDiffReporter.d.ts +2 -0
- package/dist/reporters/htmlPrDiffReporter.js +84 -0
- package/dist/reporters/htmlPrDiffReporter.js.map +1 -0
- package/dist/reporters/htmlReporter.d.ts +20 -9
- package/dist/reporters/htmlReporter.js +7 -365
- package/dist/reporters/htmlReporter.js.map +1 -1
- package/dist/reporters/htmlReviewReporter.d.ts +2 -0
- package/dist/reporters/htmlReviewReporter.js +94 -0
- package/dist/reporters/htmlReviewReporter.js.map +1 -0
- package/dist/reporters/htmlShared.d.ts +7 -0
- package/dist/reporters/htmlShared.js +106 -0
- package/dist/reporters/htmlShared.js.map +1 -0
- package/dist/tool-manifest.json +2 -2
- package/dist/types/preflight.d.ts +19 -0
- package/dist/types/start.d.ts +7 -451
- package/dist/types/startCommon.d.ts +79 -0
- package/dist/types/startCommon.js +2 -0
- package/dist/types/startCommon.js.map +1 -0
- package/dist/types/startExecution.d.ts +44 -0
- package/dist/types/startExecution.js +2 -0
- package/dist/types/startExecution.js.map +1 -0
- package/dist/types/startMissionControl.d.ts +91 -0
- package/dist/types/startMissionControl.js +2 -0
- package/dist/types/startMissionControl.js.map +1 -0
- package/dist/types/startMissionProof.d.ts +91 -0
- package/dist/types/startMissionProof.js +2 -0
- package/dist/types/startMissionProof.js.map +1 -0
- package/dist/types/startMissionResume.d.ts +100 -0
- package/dist/types/startMissionResume.js +2 -0
- package/dist/types/startMissionResume.js.map +1 -0
- package/dist/types/startMissionReview.d.ts +45 -0
- package/dist/types/startMissionReview.js +2 -0
- package/dist/types/startMissionReview.js.map +1 -0
- package/dist/types/startMissionTooling.d.ts +16 -0
- package/dist/types/startMissionTooling.js +2 -0
- package/dist/types/startMissionTooling.js.map +1 -0
- package/dist/utils/changedFiles.d.ts +1 -0
- package/dist/utils/changedFiles.js +7 -4
- package/dist/utils/changedFiles.js.map +1 -1
- package/docs/GUIDE.md +9 -7
- package/docs/ROADMAP.md +2 -2
- package/docs/examples/adoption-workflows.md +12 -1
- package/docs/examples/swarm-coordination.md +11 -2
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflightReasons.js","sourceRoot":"","sources":["../../src/core/preflightReasons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAe5D,MAAM,UAAU,sBAAsB,CAAC,MAAe;IACpD,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;IACtF,OAAO;QACL,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QACnF,aAAa,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;KACxF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAWrC;IACC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW;YACvC,IAAI,EAAE,iBAAiB;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PreflightInputs } from './preflightInputs.js';
|
|
2
|
+
import type { PreflightMode, PreflightReport } from '../types.js';
|
|
3
|
+
interface BuildPreflightReportInput {
|
|
4
|
+
mode: PreflightMode;
|
|
5
|
+
inputs: PreflightInputs;
|
|
6
|
+
maxChangedFiles: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildPreflightReport({ mode, inputs, maxChangedFiles, }: BuildPreflightReportInput): PreflightReport;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { pluginsEnabled } from './plugins.js';
|
|
2
|
+
import { buildEvidence } from './preflightEvidence.js';
|
|
3
|
+
import { buildPreflightReasons, countSupplyChainIssues } from './preflightReasons.js';
|
|
4
|
+
import { buildReleaseScaleEvidence } from './preflightReleaseScale.js';
|
|
5
|
+
import { buildRequiredChecks } from './preflightRequiredChecks.js';
|
|
6
|
+
import { buildSuggestedActions, buildToolCalls } from './preflightSuggestedActions.js';
|
|
7
|
+
import { isPreflightReportTruncated } from './preflightTruncation.js';
|
|
8
|
+
import { decidePreflightVerdict, summarizePreflight } from './preflightVerdict.js';
|
|
9
|
+
export function buildPreflightReport({ mode, inputs, maxChangedFiles, }) {
|
|
10
|
+
const { issues, health, changedFiles, session, hotspots, review, coordination } = inputs;
|
|
11
|
+
const supplyChain = countSupplyChainIssues(issues);
|
|
12
|
+
const releaseScale = buildReleaseScaleEvidence({
|
|
13
|
+
mode,
|
|
14
|
+
issues,
|
|
15
|
+
changedFiles,
|
|
16
|
+
health,
|
|
17
|
+
review,
|
|
18
|
+
supplyChain,
|
|
19
|
+
maxChangedFiles,
|
|
20
|
+
});
|
|
21
|
+
const reasons = buildPreflightReasons({
|
|
22
|
+
mode,
|
|
23
|
+
issues,
|
|
24
|
+
changedFiles,
|
|
25
|
+
health,
|
|
26
|
+
session,
|
|
27
|
+
hotspots,
|
|
28
|
+
review,
|
|
29
|
+
releaseScale,
|
|
30
|
+
coordination,
|
|
31
|
+
maxChangedFiles,
|
|
32
|
+
});
|
|
33
|
+
const verdict = decidePreflightVerdict(reasons);
|
|
34
|
+
const evidence = buildEvidence({
|
|
35
|
+
health,
|
|
36
|
+
changedFiles,
|
|
37
|
+
session,
|
|
38
|
+
hotspots,
|
|
39
|
+
issues,
|
|
40
|
+
pluginsEnabledForRun: pluginsEnabled(),
|
|
41
|
+
review,
|
|
42
|
+
releaseScale,
|
|
43
|
+
coordination,
|
|
44
|
+
});
|
|
45
|
+
const truncated = isPreflightReportTruncated({ evidence, changedFiles });
|
|
46
|
+
const report = {
|
|
47
|
+
schemaVersion: 1,
|
|
48
|
+
mode,
|
|
49
|
+
verdict,
|
|
50
|
+
summary: '',
|
|
51
|
+
reasons,
|
|
52
|
+
evidence,
|
|
53
|
+
requiredChecks: buildRequiredChecks({
|
|
54
|
+
mode,
|
|
55
|
+
health,
|
|
56
|
+
changedFiles,
|
|
57
|
+
review,
|
|
58
|
+
supplyChain,
|
|
59
|
+
releaseScale,
|
|
60
|
+
}),
|
|
61
|
+
suggestedNextActions: buildSuggestedActions({ reasons, mode, changedFiles }),
|
|
62
|
+
toolCalls: buildToolCalls({ reasons, mode, changedFiles }),
|
|
63
|
+
...(truncated ? { truncated: true } : {}),
|
|
64
|
+
};
|
|
65
|
+
return { ...report, summary: summarizePreflight(report) };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=preflightReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflightReport.js","sourceRoot":"","sources":["../../src/core/preflightReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AASnF,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,eAAe,GACW;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACzF,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,yBAAyB,CAAC;QAC7C,IAAI;QACJ,MAAM;QACN,YAAY;QACZ,MAAM;QACN,MAAM;QACN,WAAW;QACX,eAAe;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,qBAAqB,CAAC;QACpC,IAAI;QACJ,MAAM;QACN,YAAY;QACZ,MAAM;QACN,OAAO;QACP,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,YAAY;QACZ,eAAe;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC7B,MAAM;QACN,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,MAAM;QACN,oBAAoB,EAAE,cAAc,EAAE;QACtC,MAAM;QACN,YAAY;QACZ,YAAY;KACb,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACzE,MAAM,MAAM,GAAoB;QAC9B,aAAa,EAAE,CAAC;QAChB,IAAI;QACJ,OAAO;QACP,OAAO,EAAE,EAAE;QACX,OAAO;QACP,QAAQ;QACR,cAAc,EAAE,mBAAmB,CAAC;YAClC,IAAI;YACJ,MAAM;YACN,YAAY;YACZ,MAAM;YACN,WAAW;YACX,YAAY;SACb,CAAC;QACF,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC5E,SAAS,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC1D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;IACF,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
package/dist/core/review.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { buildReviewBaseSnapshot } from './reviewBaseSnapshot.js';
|
|
3
|
-
import { buildReviewHeadSnapshot } from './reviewHeadSnapshot.js';
|
|
4
|
-
import { readManifests } from './reviewManifests.js';
|
|
5
|
-
import { buildReviewFindings } from './reviewFindings.js';
|
|
6
|
-
import { applyReviewIntent } from './reviewIntent.js';
|
|
7
|
-
import { resolveReviewState, unavailableReviewReport } from './reviewState.js';
|
|
1
|
+
import { computeReviewReport } from './reviewComputation.js';
|
|
8
2
|
export { selectReviewTier, shapeReviewForTier } from './reviewTier.js';
|
|
9
3
|
/**
|
|
10
4
|
* Compose a one-shot PR review. Builds head + base graphs (worktree dance),
|
|
@@ -20,45 +14,6 @@ export { selectReviewTier, shapeReviewForTier } from './reviewTier.js';
|
|
|
20
14
|
* ok - otherwise
|
|
21
15
|
*/
|
|
22
16
|
export async function computeReview(rootPath, options = {}) {
|
|
23
|
-
|
|
24
|
-
if (state.kind === 'unavailable')
|
|
25
|
-
return state.report;
|
|
26
|
-
if (state.kind === 'no-change') {
|
|
27
|
-
applyReviewIntent(state.report, options.intent);
|
|
28
|
-
return state.report;
|
|
29
|
-
}
|
|
30
|
-
const { baseRef, baseSha, headRef, headSha } = state;
|
|
31
|
-
const { graph: headGraph, hotspots: headHotspots } = await buildReviewHeadSnapshot(rootPath);
|
|
32
|
-
const baseSnapshot = await buildReviewBaseSnapshot(rootPath, baseRef, baseSha);
|
|
33
|
-
if (!baseSnapshot.available) {
|
|
34
|
-
return unavailableReviewReport(baseSnapshot.reason, options, baseRef, headRef, headSha, baseSha);
|
|
35
|
-
}
|
|
36
|
-
const baseGraph = baseSnapshot.graph;
|
|
37
|
-
const basePackageManifests = baseSnapshot.packageManifests;
|
|
38
|
-
const headPackageManifests = await readManifests(rootPath);
|
|
39
|
-
const prDiff = diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph);
|
|
40
|
-
const findings = await buildReviewFindings({
|
|
41
|
-
rootPath,
|
|
42
|
-
packageName: options.package,
|
|
43
|
-
prDiff,
|
|
44
|
-
baseGraph,
|
|
45
|
-
headGraph,
|
|
46
|
-
headHotspots,
|
|
47
|
-
basePackageManifests,
|
|
48
|
-
headPackageManifests,
|
|
49
|
-
});
|
|
50
|
-
const report = {
|
|
51
|
-
available: true,
|
|
52
|
-
base: { ref: baseRef, resolvedSha: baseSha },
|
|
53
|
-
head: { ref: headRef, resolvedSha: headSha },
|
|
54
|
-
prDiff,
|
|
55
|
-
...findings,
|
|
56
|
-
};
|
|
57
|
-
// 1.9+ — intent grounding. Parse the agent-supplied description,
|
|
58
|
-
// annotate each finding with an alignment label, and append a
|
|
59
|
-
// small intent summary to the verdict bullets. Does NOT change the
|
|
60
|
-
// verdict — verdict stays structural.
|
|
61
|
-
applyReviewIntent(report, options.intent);
|
|
62
|
-
return report;
|
|
17
|
+
return computeReviewReport(rootPath, options);
|
|
63
18
|
}
|
|
64
19
|
//# sourceMappingURL=review.js.map
|
package/dist/core/review.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/core/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/core/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAmBvE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,UAAyB,EAAE;IAE3B,OAAO,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReviewState } from './reviewState.js';
|
|
2
|
+
import type { ReviewReport } from '../types/review.js';
|
|
3
|
+
interface ChangedReviewOptions {
|
|
4
|
+
base?: string;
|
|
5
|
+
head?: string;
|
|
6
|
+
intent?: string;
|
|
7
|
+
package?: string;
|
|
8
|
+
}
|
|
9
|
+
type ReadyReviewState = Extract<ReviewState, {
|
|
10
|
+
kind: 'ready';
|
|
11
|
+
}>;
|
|
12
|
+
export declare function buildChangedReviewReport(rootPath: string, options: ChangedReviewOptions, state: ReadyReviewState): Promise<ReviewReport>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { diffGraphs } from './prDiff.js';
|
|
2
|
+
import { buildReviewBaseSnapshot } from './reviewBaseSnapshot.js';
|
|
3
|
+
import { buildReviewHeadSnapshot } from './reviewHeadSnapshot.js';
|
|
4
|
+
import { buildReviewFindings } from './reviewFindings.js';
|
|
5
|
+
import { applyReviewIntent } from './reviewIntent.js';
|
|
6
|
+
import { readManifests } from './reviewManifests.js';
|
|
7
|
+
import { unavailableReviewReport } from './reviewState.js';
|
|
8
|
+
export async function buildChangedReviewReport(rootPath, options, state) {
|
|
9
|
+
const { baseRef, baseSha, headRef, headSha } = state;
|
|
10
|
+
const { graph: headGraph, hotspots: headHotspots } = await buildReviewHeadSnapshot(rootPath);
|
|
11
|
+
const baseSnapshot = await buildReviewBaseSnapshot(rootPath, baseRef, baseSha);
|
|
12
|
+
if (!baseSnapshot.available) {
|
|
13
|
+
return unavailableReviewReport(baseSnapshot.reason, options, baseRef, headRef, headSha, baseSha);
|
|
14
|
+
}
|
|
15
|
+
const baseGraph = baseSnapshot.graph;
|
|
16
|
+
const headPackageManifests = await readManifests(rootPath);
|
|
17
|
+
const prDiff = diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph);
|
|
18
|
+
const findings = await buildReviewFindings({
|
|
19
|
+
rootPath,
|
|
20
|
+
packageName: options.package,
|
|
21
|
+
prDiff,
|
|
22
|
+
baseGraph,
|
|
23
|
+
headGraph,
|
|
24
|
+
headHotspots,
|
|
25
|
+
basePackageManifests: baseSnapshot.packageManifests,
|
|
26
|
+
headPackageManifests,
|
|
27
|
+
});
|
|
28
|
+
const report = {
|
|
29
|
+
available: true,
|
|
30
|
+
base: { ref: baseRef, resolvedSha: baseSha },
|
|
31
|
+
head: { ref: headRef, resolvedSha: headSha },
|
|
32
|
+
prDiff,
|
|
33
|
+
...findings,
|
|
34
|
+
};
|
|
35
|
+
applyReviewIntent(report, options.intent);
|
|
36
|
+
return report;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=reviewChangedReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewChangedReport.js","sourceRoot":"","sources":["../../src/core/reviewChangedReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAoB,MAAM,kBAAkB,CAAC;AAY7E,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAgB,EAChB,OAA6B,EAC7B,KAAuB;IAEvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAE7F,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,uBAAuB,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;IACrC,MAAM,oBAAoB,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC;QACzC,QAAQ;QACR,WAAW,EAAE,OAAO,CAAC,OAAO;QAC5B,MAAM;QACN,SAAS;QACT,SAAS;QACT,YAAY;QACZ,oBAAoB,EAAE,YAAY,CAAC,gBAAgB;QACnD,oBAAoB;KACrB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAiB;QAC3B,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;QAC5C,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;QAC5C,MAAM;QACN,GAAG,QAAQ;KACZ,CAAC;IAEF,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReviewReport } from '../types/review.js';
|
|
2
|
+
interface ReviewComputationOptions {
|
|
3
|
+
base?: string;
|
|
4
|
+
head?: string;
|
|
5
|
+
intent?: string;
|
|
6
|
+
package?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function computeReviewReport(rootPath: string, options?: ReviewComputationOptions): Promise<ReviewReport>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { buildChangedReviewReport } from './reviewChangedReport.js';
|
|
2
|
+
import { applyReviewIntent } from './reviewIntent.js';
|
|
3
|
+
import { resolveReviewState } from './reviewState.js';
|
|
4
|
+
export async function computeReviewReport(rootPath, options = {}) {
|
|
5
|
+
const state = await resolveReviewState(rootPath, options);
|
|
6
|
+
if (state.kind === 'unavailable')
|
|
7
|
+
return state.report;
|
|
8
|
+
if (state.kind === 'no-change') {
|
|
9
|
+
applyReviewIntent(state.report, options.intent);
|
|
10
|
+
return state.report;
|
|
11
|
+
}
|
|
12
|
+
return buildChangedReviewReport(rootPath, options, state);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=reviewComputation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewComputation.js","sourceRoot":"","sources":["../../src/core/reviewComputation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUtD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACtD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -3,10 +3,12 @@ export function buildContractChanges(prDiff, baseGraph, headGraph, baseManifests
|
|
|
3
3
|
const scopedBaseManifests = scopeManifestsByPackage(baseManifests, packageName);
|
|
4
4
|
const scopedHeadManifests = scopeManifestsByPackage(headManifests, packageName);
|
|
5
5
|
const publicExportFiles = buildPublicExportFileSet(scopedBaseManifests.values(), scopedHeadManifests.values(), baseGraph, headGraph);
|
|
6
|
+
const basePublicSymbols = publicExportSymbols(baseGraph, publicExportFiles);
|
|
7
|
+
const headPublicSymbols = publicExportSymbols(headGraph, publicExportFiles);
|
|
6
8
|
return [
|
|
7
|
-
...exportContractChangesForFiles('export-added', prDiff.filesAdded, headGraph, publicExportFiles),
|
|
8
|
-
...exportContractChangesForFiles('export-removed', prDiff.filesRemoved, baseGraph, publicExportFiles),
|
|
9
|
-
...modifiedExportContractChanges(prDiff.filesModified, publicExportFiles),
|
|
9
|
+
...exportContractChangesForFiles('export-added', prDiff.filesAdded, headGraph, publicExportFiles, basePublicSymbols),
|
|
10
|
+
...exportContractChangesForFiles('export-removed', prDiff.filesRemoved, baseGraph, publicExportFiles, headPublicSymbols),
|
|
11
|
+
...modifiedExportContractChanges(prDiff.filesModified, publicExportFiles, basePublicSymbols, headPublicSymbols),
|
|
10
12
|
...entrypointContractChanges(scopedBaseManifests, scopedHeadManifests),
|
|
11
13
|
];
|
|
12
14
|
}
|
|
@@ -15,30 +17,42 @@ function scopeManifestsByPackage(manifests, packageName) {
|
|
|
15
17
|
return manifests;
|
|
16
18
|
return new Map([...manifests].filter(([, manifest]) => manifest.workspace === packageName));
|
|
17
19
|
}
|
|
18
|
-
function exportContractChangesForFiles(kind, files, graph, publicExportFiles) {
|
|
20
|
+
function exportContractChangesForFiles(kind, files, graph, publicExportFiles, previouslyPublicSymbols) {
|
|
19
21
|
const changes = [];
|
|
20
22
|
for (const file of files) {
|
|
21
23
|
if (!publicExportFiles.has(file))
|
|
22
24
|
continue;
|
|
23
25
|
for (const exp of graph.files.get(file)?.exports ?? []) {
|
|
26
|
+
if (previouslyPublicSymbols.has(exp.name))
|
|
27
|
+
continue;
|
|
24
28
|
changes.push(exportContractChange(kind, file, exp.name));
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
return changes;
|
|
28
32
|
}
|
|
29
|
-
function modifiedExportContractChanges(files, publicExportFiles) {
|
|
33
|
+
function modifiedExportContractChanges(files, publicExportFiles, basePublicSymbols, headPublicSymbols) {
|
|
30
34
|
const changes = [];
|
|
31
35
|
for (const file of files) {
|
|
32
36
|
if (!publicExportFiles.has(file.relativePath))
|
|
33
37
|
continue;
|
|
34
|
-
appendExportSymbolChanges(changes, 'export-added', file.relativePath, file.exportsAdded);
|
|
35
|
-
appendExportSymbolChanges(changes, 'export-removed', file.relativePath, file.exportsRemoved);
|
|
38
|
+
appendExportSymbolChanges(changes, 'export-added', file.relativePath, file.exportsAdded, basePublicSymbols);
|
|
39
|
+
appendExportSymbolChanges(changes, 'export-removed', file.relativePath, file.exportsRemoved, headPublicSymbols);
|
|
36
40
|
appendRenamedExportChanges(changes, file);
|
|
37
41
|
}
|
|
38
42
|
return changes;
|
|
39
43
|
}
|
|
40
|
-
function
|
|
44
|
+
function publicExportSymbols(graph, publicExportFiles) {
|
|
45
|
+
const symbols = new Set();
|
|
46
|
+
for (const file of publicExportFiles) {
|
|
47
|
+
for (const exp of graph.files.get(file)?.exports ?? [])
|
|
48
|
+
symbols.add(exp.name);
|
|
49
|
+
}
|
|
50
|
+
return symbols;
|
|
51
|
+
}
|
|
52
|
+
function appendExportSymbolChanges(changes, kind, file, symbols, unchangedPublicSymbols) {
|
|
41
53
|
for (const symbol of symbols) {
|
|
54
|
+
if (unchangedPublicSymbols.has(symbol))
|
|
55
|
+
continue;
|
|
42
56
|
changes.push(exportContractChange(kind, file, symbol));
|
|
43
57
|
}
|
|
44
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewContractChanges.js","sourceRoot":"","sources":["../../src/core/reviewContractChanges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAQpE,MAAM,UAAU,oBAAoB,CAClC,MAAoB,EACpB,SAAoB,EACpB,SAAoB,EACpB,aAA4C,EAC5C,aAA4C,EAC5C,WAAoB;IAEpB,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,wBAAwB,CAChD,mBAAmB,CAAC,MAAM,EAAE,EAC5B,mBAAmB,CAAC,MAAM,EAAE,EAC5B,SAAS,EACT,SAAS,CACV,CAAC;IACF,OAAO;QACL,GAAG,6BAA6B,CAC9B,cAAc,EACd,MAAM,CAAC,UAAU,EACjB,SAAS,EACT,iBAAiB,CAClB;QACD,GAAG,6BAA6B,CAC9B,gBAAgB,EAChB,MAAM,CAAC,YAAY,EACnB,SAAS,EACT,iBAAiB,CAClB;QACD,GAAG,6BAA6B,
|
|
1
|
+
{"version":3,"file":"reviewContractChanges.js","sourceRoot":"","sources":["../../src/core/reviewContractChanges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAQpE,MAAM,UAAU,oBAAoB,CAClC,MAAoB,EACpB,SAAoB,EACpB,SAAoB,EACpB,aAA4C,EAC5C,aAA4C,EAC5C,WAAoB;IAEpB,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,wBAAwB,CAChD,mBAAmB,CAAC,MAAM,EAAE,EAC5B,mBAAmB,CAAC,MAAM,EAAE,EAC5B,SAAS,EACT,SAAS,CACV,CAAC;IACF,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC5E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC5E,OAAO;QACL,GAAG,6BAA6B,CAC9B,cAAc,EACd,MAAM,CAAC,UAAU,EACjB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,CAClB;QACD,GAAG,6BAA6B,CAC9B,gBAAgB,EAChB,MAAM,CAAC,YAAY,EACnB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,CAClB;QACD,GAAG,6BAA6B,CAC9B,MAAM,CAAC,aAAa,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CAClB;QACD,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAAwC,EACxC,WAAoB;IAEpB,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,6BAA6B,CACpC,IAAsB,EACtB,KAAe,EACf,KAAgB,EAChB,iBAA8B,EAC9B,uBAAoC;IAEpC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YACvD,IAAI,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpD,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,6BAA6B,CACpC,KAAyB,EACzB,iBAA8B,EAC9B,iBAA8B,EAC9B,iBAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,SAAS;QACxD,yBAAyB,CACvB,OAAO,EACP,cAAc,EACd,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,iBAAiB,CAClB,CAAC;QACF,yBAAyB,CACvB,OAAO,EACP,gBAAgB,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,cAAc,EACnB,iBAAiB,CAClB,CAAC;QACF,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAgB,EAAE,iBAA8B;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAChC,OAA+B,EAC/B,IAAsB,EACtB,IAAY,EACZ,OAAiB,EACjB,sBAAmC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACjD,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA+B,EAC/B,IAAsB;IAEtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,MAAM,CAAC,EAAE;YACjB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,KAAK,EAAE,MAAM,CAAC,EAAE;YAChB,UAAU,EAAE,MAAM;YAClB,GAAG,EAAE,WAAW,MAAM,CAAC,IAAI,qBAAqB,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,YAAY,2EAA2E;SAC9J,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAsB,EACtB,IAAY,EACZ,MAAc;IAEd,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,UAAU,EAAE,MAAM;QAClB,GAAG,EACD,IAAI,KAAK,cAAc;YACrB,CAAC,CAAC,WAAW,MAAM,kBAAkB,IAAI,4DAA4D;YACrG,CAAC,CAAC,WAAW,MAAM,sBAAsB,IAAI,2DAA2D;KAC7G,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAmC,EACnC,IAAmC;IAEnC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,YAAY,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CACN,GAAG,4BAA4B,CAC7B,YAAY,EACZ,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,WAAW,IAAI,EAAE,EACzC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,WAAW,IAAI,EAAE,CAC1C,CACF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAmC,EACnC,IAAmC;IAEnC,OAAO,IAAI,GAAG,CAAS,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,4BAA4B,CACnC,YAAoB,EACpB,eAAuC,EACvC,eAAuC;IAEvC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,wBAAwB,CACrC,YAAY,EACZ,KAAK,EACL,eAAe,CAAC,KAAK,CAAC,EACtB,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACF,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CACvB,eAAuC,EACvC,eAAuC;IAEvC,OAAO,IAAI,GAAG,CAAS,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,wBAAwB,CAC/B,YAAoB,EACpB,KAAa,EACb,MAA0B,EAC1B,KAAyB;IAEzB,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAClF,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,KAAK;QACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,UAAU,EAAE,MAAM;QAClB,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAoD,EACpD,YAAoB,EACpB,KAAa,EACb,MAA0B,EAC1B,KAAyB;IAEzB,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACrC,OAAO,GAAG,YAAY,6EAA6E,CAAC;IACtG,CAAC;IACD,OAAO,GAAG,YAAY,aAAa,KAAK,kBAAkB,MAAM,IAAI,SAAS,OAAO,KAAK,IAAI,SAAS,sDAAsD,CAAC;AAC/J,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAuB,EAAE,CAAuB;IAC1E,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -4,6 +4,8 @@ export function isReviewBlockingFlow(flow, context) {
|
|
|
4
4
|
return false;
|
|
5
5
|
if (isDefaultGeneratedCodeFlow(flow, context))
|
|
6
6
|
return false;
|
|
7
|
+
if (isDefaultTelemetryOptInStorageFlow(flow, context))
|
|
8
|
+
return false;
|
|
7
9
|
return true;
|
|
8
10
|
}
|
|
9
11
|
export function isReviewBlockingDataflowRisk(risk, context) {
|
|
@@ -20,6 +22,16 @@ function isDefaultGeneratedCodeFlow(flow, context) {
|
|
|
20
22
|
return false;
|
|
21
23
|
return !context.customSources.has(flow.source) && !context.customSinks.has(flow.sink);
|
|
22
24
|
}
|
|
25
|
+
function isDefaultTelemetryOptInStorageFlow(flow, context) {
|
|
26
|
+
if (context.customSources.has(flow.source) || context.customSinks.has(flow.sink))
|
|
27
|
+
return false;
|
|
28
|
+
if (flow.source !== 'stdin')
|
|
29
|
+
return false;
|
|
30
|
+
if (!TELEMETRY_OPT_IN_STORAGE_SINKS.has(flow.sink))
|
|
31
|
+
return false;
|
|
32
|
+
const files = new Set(flow.files);
|
|
33
|
+
return TELEMETRY_OPT_IN_STORAGE_FILES.every((file) => files.has(file));
|
|
34
|
+
}
|
|
23
35
|
const BROAD_FILE_IO_REVIEW_SOURCES = new Set(['readFile', 'readFileSync']);
|
|
24
36
|
const BROAD_FILE_IO_REVIEW_SINKS = new Set([
|
|
25
37
|
'writeFile',
|
|
@@ -28,4 +40,10 @@ const BROAD_FILE_IO_REVIEW_SINKS = new Set([
|
|
|
28
40
|
'rm',
|
|
29
41
|
'rmSync',
|
|
30
42
|
]);
|
|
43
|
+
const TELEMETRY_OPT_IN_STORAGE_FILES = [
|
|
44
|
+
'src/cli/commands/init.ts',
|
|
45
|
+
'src/core/telemetry.ts',
|
|
46
|
+
'src/core/telemetryConfig.ts',
|
|
47
|
+
];
|
|
48
|
+
const TELEMETRY_OPT_IN_STORAGE_SINKS = new Set(['writeFile', 'rm']);
|
|
31
49
|
//# sourceMappingURL=reviewDataflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewDataflow.js","sourceRoot":"","sources":["../../src/core/reviewDataflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3E,MAAM,UAAU,oBAAoB,CAClC,IAAuD,EACvD,OAAgC;IAEhC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAAuD,EACvD,OAAgC;IAEhC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAuD,EACvD,OAAgC;IAEhC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3E,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,WAAW;IACX,eAAe;IACf,QAAQ;IACR,IAAI;IACJ,QAAQ;CACT,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"reviewDataflow.js","sourceRoot":"","sources":["../../src/core/reviewDataflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3E,MAAM,UAAU,oBAAoB,CAClC,IAAuD,EACvD,OAAgC;IAEhC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,kCAAkC,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAAuD,EACvD,OAAgC;IAEhC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAuD,EACvD,OAAgC;IAEhC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,kCAAkC,CACzC,IAAuD,EACvD,OAAgC;IAEhC,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3E,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,WAAW;IACX,eAAe;IACf,QAAQ;IACR,IAAI;IACJ,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,8BAA8B,GAAG;IACrC,0BAA0B;IAC1B,uBAAuB;IACvB,6BAA6B;CAC9B,CAAC;AACF,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ROADMAP_POST_4_4_CATALOG } from './roadmapCatalogPost44.js';
|
|
1
2
|
export const ROADMAP_3_2_LINES = [
|
|
2
3
|
'3.2.x',
|
|
3
4
|
'3.3.x',
|
|
@@ -300,207 +301,10 @@ const ROADMAP_3_2_CATALOG = {
|
|
|
300
301
|
},
|
|
301
302
|
],
|
|
302
303
|
},
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
outcome: 'Planning surfaces describe the current post-4.4 product direction instead of stale shipped 3.x/4.0 work.',
|
|
308
|
-
includedInPlan: true,
|
|
309
|
-
scope: [
|
|
310
|
-
'post-4.4 roadmap refresh',
|
|
311
|
-
'release-train default-line refresh',
|
|
312
|
-
'product-planning route verification',
|
|
313
|
-
],
|
|
314
|
-
successCriteria: [
|
|
315
|
-
'release-train defaults to post-4.4 lines on 4.4.x and newer',
|
|
316
|
-
'docs/ROADMAP.md names already-shipped 4.0 through 4.4 work as completed',
|
|
317
|
-
'planning output remains read-only and does not bump versions',
|
|
318
|
-
],
|
|
319
|
-
},
|
|
320
|
-
tasks: [
|
|
321
|
-
{
|
|
322
|
-
id: 'rt-4-5-roadmap-release-train-refresh',
|
|
323
|
-
priority: 'p0',
|
|
324
|
-
title: 'Refresh roadmap and release-train surfaces',
|
|
325
|
-
why: 'Maintainers and agents should see the real next product bets after 4.4.0 instead of a completed 3.4/3.6/4.0 plan.',
|
|
326
|
-
track: '4.5.x',
|
|
327
|
-
files: [
|
|
328
|
-
'src/core/roadmapCatalog.ts',
|
|
329
|
-
'src/core/releaseTrain.ts',
|
|
330
|
-
'docs/ROADMAP.md',
|
|
331
|
-
'docs/GUIDE.md',
|
|
332
|
-
],
|
|
333
|
-
verification: {
|
|
334
|
-
commands: [
|
|
335
|
-
'projscan release-train --format json',
|
|
336
|
-
'projscan start --intent "what should we build next?" --format json',
|
|
337
|
-
],
|
|
338
|
-
expected: 'Planning output names post-4.4 workstreams and stays read-only without package version changes.',
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
],
|
|
342
|
-
},
|
|
343
|
-
'4.6.x': {
|
|
344
|
-
line: '4.6.x',
|
|
345
|
-
track: {
|
|
346
|
-
theme: 'Swarm Coordination Evidence',
|
|
347
|
-
outcome: 'Teams can validate which coordination commands agents actually use before investing in deeper swarm automation.',
|
|
348
|
-
includedInPlan: true,
|
|
349
|
-
scope: [
|
|
350
|
-
'coordination workflow examples',
|
|
351
|
-
'claims and collision evidence recipes',
|
|
352
|
-
'coordinate-watch adoption proof',
|
|
353
|
-
],
|
|
354
|
-
successCriteria: [
|
|
355
|
-
'docs show a real local workflow for collisions, claims, merge-risk, coordinate, and coordinate --watch',
|
|
356
|
-
'agent-brief and preflight coordination evidence stay separated from remembered session context',
|
|
357
|
-
'validation examples stay local-first and require no daemon or cloud service',
|
|
358
|
-
],
|
|
359
|
-
},
|
|
360
|
-
tasks: [
|
|
361
|
-
{
|
|
362
|
-
id: 'rt-4-6-swarm-coordination-validation',
|
|
363
|
-
priority: 'p0',
|
|
364
|
-
title: 'Validate swarm coordination in real agent workflows',
|
|
365
|
-
why: 'The coordination surface is only valuable if teams can see where it prevents collisions and which command answered the coordination question.',
|
|
366
|
-
track: '4.6.x',
|
|
367
|
-
files: [
|
|
368
|
-
'docs/GUIDE.md',
|
|
369
|
-
'README.md',
|
|
370
|
-
'docs/examples/swarm-coordination.md',
|
|
371
|
-
'src/core/agentBrief.ts',
|
|
372
|
-
'src/core/preflight.ts',
|
|
373
|
-
],
|
|
374
|
-
verification: {
|
|
375
|
-
commands: [
|
|
376
|
-
'projscan collisions --format json',
|
|
377
|
-
'projscan coordinate --format json',
|
|
378
|
-
'projscan agent-brief --format json',
|
|
379
|
-
],
|
|
380
|
-
expected: 'Coordination evidence names the active command path, current worktree state, and local-only validation workflow.',
|
|
381
|
-
},
|
|
382
|
-
},
|
|
383
|
-
],
|
|
384
|
-
},
|
|
385
|
-
'4.7.x': {
|
|
386
|
-
line: '4.7.x',
|
|
387
|
-
track: {
|
|
388
|
-
theme: 'Framework Dataflow Precision',
|
|
389
|
-
outcome: 'Framework-specific request sources continue to expand through narrow, tested source patterns instead of broad name matching.',
|
|
390
|
-
includedInPlan: true,
|
|
391
|
-
scope: [
|
|
392
|
-
'Fastify and Koa request source coverage',
|
|
393
|
-
'receiver-sensitive database sink checks',
|
|
394
|
-
'regression fixtures for false-positive suppression',
|
|
395
|
-
],
|
|
396
|
-
successCriteria: [
|
|
397
|
-
'dataflow detects tested framework request sources into database sinks',
|
|
398
|
-
'ordinary helper functions with similar names stay quiet',
|
|
399
|
-
'custom source and sink configuration still overrides defaults',
|
|
400
|
-
],
|
|
401
|
-
},
|
|
402
|
-
tasks: [
|
|
403
|
-
{
|
|
404
|
-
id: 'rt-4-7-framework-dataflow-precision',
|
|
405
|
-
priority: 'p1',
|
|
406
|
-
title: 'Broaden framework dataflow precision',
|
|
407
|
-
why: 'Deeper framework precision is the right static-analysis moat when it is added as small tested patterns.',
|
|
408
|
-
track: '4.7.x',
|
|
409
|
-
files: ['src/core/frameworkSources.ts', 'src/core/dataflow.ts', 'tests/core/dataflow.test.ts'],
|
|
410
|
-
verification: {
|
|
411
|
-
commands: ['npm run test -- tests/core/dataflow.test.ts', 'projscan dataflow --format json'],
|
|
412
|
-
expected: 'New framework request-source fixtures report real source-to-sink paths and suppress lookalike helpers.',
|
|
413
|
-
},
|
|
414
|
-
},
|
|
415
|
-
],
|
|
416
|
-
},
|
|
417
|
-
'4.8.x': {
|
|
418
|
-
line: '4.8.x',
|
|
419
|
-
track: {
|
|
420
|
-
theme: 'Scoped Evidence Exports',
|
|
421
|
-
outcome: 'Teams can share report artifacts with scoped or redacted paths without exposing broader repository structure.',
|
|
422
|
-
includedInPlan: true,
|
|
423
|
-
scope: [
|
|
424
|
-
'path-scope filtering',
|
|
425
|
-
'stable path redaction labels',
|
|
426
|
-
'SARIF and JSON evidence shaping',
|
|
427
|
-
],
|
|
428
|
-
successCriteria: [
|
|
429
|
-
'issue reports can be filtered to a requested path scope',
|
|
430
|
-
'redacted reports replace file paths with stable labels',
|
|
431
|
-
'redaction never reads .env values or adds network calls',
|
|
432
|
-
],
|
|
433
|
-
},
|
|
434
|
-
tasks: [
|
|
435
|
-
{
|
|
436
|
-
id: 'rt-4-8-scoped-redacted-evidence',
|
|
437
|
-
priority: 'p1',
|
|
438
|
-
title: 'Add scoped and redacted report export controls',
|
|
439
|
-
why: 'Security reviewers need useful artifacts they can share without leaking paths outside the reviewed area.',
|
|
440
|
-
track: '4.8.x',
|
|
441
|
-
files: [
|
|
442
|
-
'src/core/reportScope.ts',
|
|
443
|
-
'src/cli/commands/analyze.ts',
|
|
444
|
-
'src/cli/commands/doctor.ts',
|
|
445
|
-
'src/cli/commands/ci.ts',
|
|
446
|
-
'src/reporters/sarifReporter.ts',
|
|
447
|
-
],
|
|
448
|
-
verification: {
|
|
449
|
-
commands: [
|
|
450
|
-
'projscan doctor --report-scope src --redact-paths --format json',
|
|
451
|
-
'projscan analyze --report-scope src --redact-paths --format sarif',
|
|
452
|
-
],
|
|
453
|
-
expected: 'Reports include only scoped issue evidence and expose redacted path labels instead of raw file paths.',
|
|
454
|
-
},
|
|
455
|
-
},
|
|
456
|
-
],
|
|
457
|
-
},
|
|
458
|
-
'4.9.x': {
|
|
459
|
-
line: '4.9.x',
|
|
460
|
-
track: {
|
|
461
|
-
theme: 'Python Upgrade Intelligence And Hotspot Maintainability',
|
|
462
|
-
outcome: 'Python dependency upgrade previews become useful offline, while the highest-churn projscan surfaces keep shrinking through focused tests and extraction.',
|
|
463
|
-
includedInPlan: true,
|
|
464
|
-
scope: [
|
|
465
|
-
'requirements.txt and Poetry dependency lookup',
|
|
466
|
-
'Python importers for upgrade preview',
|
|
467
|
-
'start/types/test hotspot coverage and extraction',
|
|
468
|
-
'real adoption examples for orchestration, ownership, and plugins',
|
|
469
|
-
],
|
|
470
|
-
successCriteria: [
|
|
471
|
-
'projscan_upgrade can preview Python dependencies from local manifests',
|
|
472
|
-
'README and guide no longer describe Python upgrade support as only planned',
|
|
473
|
-
'hotspot work adds focused coverage or extraction without unrelated refactors',
|
|
474
|
-
'docs include concrete adoption examples for agent orchestration, package ownership, and policy plugins',
|
|
475
|
-
],
|
|
476
|
-
},
|
|
477
|
-
tasks: [
|
|
478
|
-
{
|
|
479
|
-
id: 'rt-4-9-python-upgrade-and-hotspot-maintainability',
|
|
480
|
-
priority: 'p1',
|
|
481
|
-
title: 'Ship Python upgrade intelligence and keep reducing hotspots',
|
|
482
|
-
why: 'Python repos should get the same offline upgrade impact preview as Node repos, and the repo should keep paying down known high-churn surfaces.',
|
|
483
|
-
track: '4.9.x',
|
|
484
|
-
files: [
|
|
485
|
-
'src/core/upgradePreview.ts',
|
|
486
|
-
'src/core/languages/pythonManifests.ts',
|
|
487
|
-
'src/types/dependencyHealth.ts',
|
|
488
|
-
'tests/core/upgradePreview.test.ts',
|
|
489
|
-
'src/core/start.ts',
|
|
490
|
-
'src/types.ts',
|
|
491
|
-
'tests/core/start.test.ts',
|
|
492
|
-
],
|
|
493
|
-
verification: {
|
|
494
|
-
commands: [
|
|
495
|
-
'npm run test -- tests/core/upgradePreview.test.ts tests/mcp/pythonUpgradeFallback.test.ts',
|
|
496
|
-
'npm run typecheck:public-types',
|
|
497
|
-
'projscan hotspots --format json',
|
|
498
|
-
],
|
|
499
|
-
expected: 'Python upgrade previews return declared versions and importers, public types compile, and hotspot risk is covered or explicitly deferred.',
|
|
500
|
-
},
|
|
501
|
-
},
|
|
502
|
-
],
|
|
503
|
-
},
|
|
304
|
+
};
|
|
305
|
+
const ROADMAP_CATALOG = {
|
|
306
|
+
...ROADMAP_3_2_CATALOG,
|
|
307
|
+
...ROADMAP_POST_4_4_CATALOG,
|
|
504
308
|
};
|
|
505
309
|
export function defaultRoadmapLinesForVersion(version) {
|
|
506
310
|
if (!version)
|
|
@@ -522,11 +326,11 @@ function isAtLeastRoadmapVersion(version, rule) {
|
|
|
522
326
|
(version.major === rule.minimumMajor && version.minor >= rule.minimumMinor));
|
|
523
327
|
}
|
|
524
328
|
export function roadmapTrackForLine(line) {
|
|
525
|
-
const entry =
|
|
329
|
+
const entry = ROADMAP_CATALOG[line];
|
|
526
330
|
return entry ? { line: entry.line, ...entry.track } : undefined;
|
|
527
331
|
}
|
|
528
332
|
export function roadmapTasksForLine(line) {
|
|
529
|
-
return (
|
|
333
|
+
return (ROADMAP_CATALOG[line]?.tasks.map((task) => ({
|
|
530
334
|
...task,
|
|
531
335
|
files: [...task.files],
|
|
532
336
|
verification: { ...task.verification, commands: [...task.verification.commands] },
|