@archpilotlabs/archpilot 0.2.2 → 0.2.4
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/CHANGELOG.md +538 -0
- package/README.md +1 -0
- package/dist/archpilot-cli.js +850 -159
- package/dist/cli/src/archpilot-cli.js +5523 -0
- package/dist/cli/src/archpilot-cli.js.map +1 -0
- package/dist/core/src/adr/adrLoader.js +97 -0
- package/dist/core/src/adr/adrLoader.js.map +1 -0
- package/dist/core/src/adr/adrParser.js +77 -0
- package/dist/core/src/adr/adrParser.js.map +1 -0
- package/dist/core/src/adr/adrTemplate.js +45 -0
- package/dist/core/src/adr/adrTemplate.js.map +1 -0
- package/dist/core/src/adr/adrTypes.js +3 -0
- package/dist/core/src/adr/adrTypes.js.map +1 -0
- package/dist/core/src/adr/adrValidation.js +160 -0
- package/dist/core/src/adr/adrValidation.js.map +1 -0
- package/dist/core/src/adr/index.js +9 -0
- package/dist/core/src/adr/index.js.map +1 -0
- package/dist/core/src/adrManagement.js +174 -0
- package/dist/core/src/adrManagement.js.map +1 -0
- package/dist/core/src/adrRequirementStatus.js +62 -0
- package/dist/core/src/adrRequirementStatus.js.map +1 -0
- package/dist/core/src/adrScaffoldGeneration.js +325 -0
- package/dist/core/src/adrScaffoldGeneration.js.map +1 -0
- package/dist/core/src/apiDesignAnalysis.js +869 -0
- package/dist/core/src/apiDesignAnalysis.js.map +1 -0
- package/dist/core/src/applicationLayeringAnalysis.js +920 -0
- package/dist/core/src/applicationLayeringAnalysis.js.map +1 -0
- package/dist/core/src/applyRulePack.js +117 -0
- package/dist/core/src/applyRulePack.js.map +1 -0
- package/dist/core/src/architectureBaseline.js +271 -0
- package/dist/core/src/architectureBaseline.js.map +1 -0
- package/dist/core/src/architectureComponentDiscoveryDefaults.js +139 -0
- package/dist/core/src/architectureComponentDiscoveryDefaults.js.map +1 -0
- package/dist/core/src/architectureDependencyContext.js +316 -0
- package/dist/core/src/architectureDependencyContext.js.map +1 -0
- package/dist/core/src/architectureDriftDetection.js +96 -0
- package/dist/core/src/architectureDriftDetection.js.map +1 -0
- package/dist/core/src/architectureDriftTimeline.js +221 -0
- package/dist/core/src/architectureDriftTimeline.js.map +1 -0
- package/dist/core/src/architectureGovernanceBaseline.js +469 -0
- package/dist/core/src/architectureGovernanceBaseline.js.map +1 -0
- package/dist/core/src/architectureHealthHistory.js +208 -0
- package/dist/core/src/architectureHealthHistory.js.map +1 -0
- package/dist/core/src/architectureHealthScore.js +657 -0
- package/dist/core/src/architectureHealthScore.js.map +1 -0
- package/dist/core/src/architectureInit.js +826 -0
- package/dist/core/src/architectureInit.js.map +1 -0
- package/dist/core/src/architectureMap.js +727 -0
- package/dist/core/src/architectureMap.js.map +1 -0
- package/dist/core/src/architectureMigrationPreview.js +467 -0
- package/dist/core/src/architectureMigrationPreview.js.map +1 -0
- package/dist/core/src/architectureModelRefresh.js +209 -0
- package/dist/core/src/architectureModelRefresh.js.map +1 -0
- package/dist/core/src/architectureReportWorkflow.js +139 -0
- package/dist/core/src/architectureReportWorkflow.js.map +1 -0
- package/dist/core/src/architectureValidation.js +3879 -0
- package/dist/core/src/architectureValidation.js.map +1 -0
- package/dist/core/src/architectureWorkspaceModel.js +166 -0
- package/dist/core/src/architectureWorkspaceModel.js.map +1 -0
- package/dist/core/src/authorizationTenantAnalysis.js +652 -0
- package/dist/core/src/authorizationTenantAnalysis.js.map +1 -0
- package/dist/core/src/bootstrapArchitectureConfig.js +150 -0
- package/dist/core/src/bootstrapArchitectureConfig.js.map +1 -0
- package/dist/core/src/changeRisk/changeRiskAssessment.js +251 -0
- package/dist/core/src/changeRisk/changeRiskAssessment.js.map +1 -0
- package/dist/core/src/changeRisk/changeRiskTypes.js +3 -0
- package/dist/core/src/changeRisk/changeRiskTypes.js.map +1 -0
- package/dist/core/src/changeRisk/index.js +6 -0
- package/dist/core/src/changeRisk/index.js.map +1 -0
- package/dist/core/src/ci/githubInlineAnnotations.js +245 -0
- package/dist/core/src/ci/githubInlineAnnotations.js.map +1 -0
- package/dist/core/src/ci/githubPrCommentAdapter.js +232 -0
- package/dist/core/src/ci/githubPrCommentAdapter.js.map +1 -0
- package/dist/core/src/ciWorkflowTemplates.js +1042 -0
- package/dist/core/src/ciWorkflowTemplates.js.map +1 -0
- package/dist/core/src/compliance/complianceExportBuilder.js +122 -0
- package/dist/core/src/compliance/complianceExportBuilder.js.map +1 -0
- package/dist/core/src/compliance/complianceExportTypes.js +3 -0
- package/dist/core/src/compliance/complianceExportTypes.js.map +1 -0
- package/dist/core/src/compliance/complianceExportWriter.js +48 -0
- package/dist/core/src/compliance/complianceExportWriter.js.map +1 -0
- package/dist/core/src/compliance/complianceRulePackResolver.js +62 -0
- package/dist/core/src/compliance/complianceRulePackResolver.js.map +1 -0
- package/dist/core/src/config/index.js +17 -0
- package/dist/core/src/config/index.js.map +1 -0
- package/dist/core/src/config/projectConfig.js +224 -0
- package/dist/core/src/config/projectConfig.js.map +1 -0
- package/dist/core/src/config/projectIdentity.js +160 -0
- package/dist/core/src/config/projectIdentity.js.map +1 -0
- package/dist/core/src/dataQueryRiskDetection.js +1203 -0
- package/dist/core/src/dataQueryRiskDetection.js.map +1 -0
- package/dist/core/src/dependencyValidation.js +2557 -0
- package/dist/core/src/dependencyValidation.js.map +1 -0
- package/dist/core/src/discoverAdrs.js +15 -0
- package/dist/core/src/discoverAdrs.js.map +1 -0
- package/dist/core/src/drift/driftComparator.js +49 -0
- package/dist/core/src/drift/driftComparator.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotLoader.js +136 -0
- package/dist/core/src/drift/driftSnapshotLoader.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotTypes.js +3 -0
- package/dist/core/src/drift/driftSnapshotTypes.js.map +1 -0
- package/dist/core/src/drift/driftSnapshotWriter.js +48 -0
- package/dist/core/src/drift/driftSnapshotWriter.js.map +1 -0
- package/dist/core/src/drift/index.js +6 -0
- package/dist/core/src/drift/index.js.map +1 -0
- package/dist/core/src/eventArchitectureAnalysis.js +925 -0
- package/dist/core/src/eventArchitectureAnalysis.js.map +1 -0
- package/dist/core/src/findingTargetResolution.js +117 -0
- package/dist/core/src/findingTargetResolution.js.map +1 -0
- package/dist/core/src/generateArchitectureDiagrams.js +57 -0
- package/dist/core/src/generateArchitectureDiagrams.js.map +1 -0
- package/dist/core/src/generateImpactAnalysis.js +366 -0
- package/dist/core/src/generateImpactAnalysis.js.map +1 -0
- package/dist/core/src/generateOnboardingDocs.js +262 -0
- package/dist/core/src/generateOnboardingDocs.js.map +1 -0
- package/dist/core/src/governance/cloudConnection.js +203 -0
- package/dist/core/src/governance/cloudConnection.js.map +1 -0
- package/dist/core/src/governance/governanceContracts.js +129 -0
- package/dist/core/src/governance/governanceContracts.js.map +1 -0
- package/dist/core/src/governance/governanceGitMetadata.js +78 -0
- package/dist/core/src/governance/governanceGitMetadata.js.map +1 -0
- package/dist/core/src/governance/governanceUploadClient.js +119 -0
- package/dist/core/src/governance/governanceUploadClient.js.map +1 -0
- package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js +155 -0
- package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js.map +1 -0
- package/dist/core/src/governance/governanceUploadPayload.js +439 -0
- package/dist/core/src/governance/governanceUploadPayload.js.map +1 -0
- package/dist/core/src/governance/runGovernanceUpload.js +103 -0
- package/dist/core/src/governance/runGovernanceUpload.js.map +1 -0
- package/dist/core/src/impactAnalysisEngine.js +376 -0
- package/dist/core/src/impactAnalysisEngine.js.map +1 -0
- package/dist/core/src/initializationState.js +99 -0
- package/dist/core/src/initializationState.js.map +1 -0
- package/dist/core/src/managedArtifacts.js +151 -0
- package/dist/core/src/managedArtifacts.js.map +1 -0
- package/dist/core/src/moduleContractValidation.js +266 -0
- package/dist/core/src/moduleContractValidation.js.map +1 -0
- package/dist/core/src/moduleContractsGenerator.js +337 -0
- package/dist/core/src/moduleContractsGenerator.js.map +1 -0
- package/dist/core/src/moduleDiscovery.js +416 -0
- package/dist/core/src/moduleDiscovery.js.map +1 -0
- package/dist/core/src/moduleScope.js +426 -0
- package/dist/core/src/moduleScope.js.map +1 -0
- package/dist/core/src/onboardingGuidance.js +74 -0
- package/dist/core/src/onboardingGuidance.js.map +1 -0
- package/dist/core/src/operationalLogging.js +7 -0
- package/dist/core/src/operationalLogging.js.map +1 -0
- package/dist/core/src/packageVersion.js +52 -0
- package/dist/core/src/packageVersion.js.map +1 -0
- package/dist/core/src/policy/effectivePolicyResolver.js +91 -0
- package/dist/core/src/policy/effectivePolicyResolver.js.map +1 -0
- package/dist/core/src/policy/exceptionLoader.js +285 -0
- package/dist/core/src/policy/exceptionLoader.js.map +1 -0
- package/dist/core/src/policy/remotePolicyLoader.js +227 -0
- package/dist/core/src/policy/remotePolicyLoader.js.map +1 -0
- package/dist/core/src/policy/remotePolicyTypes.js +3 -0
- package/dist/core/src/policy/remotePolicyTypes.js.map +1 -0
- package/dist/core/src/policy/riskPolicyConfig.js +206 -0
- package/dist/core/src/policy/riskPolicyConfig.js.map +1 -0
- package/dist/core/src/policy/riskPolicyEnforcement.js +203 -0
- package/dist/core/src/policy/riskPolicyEnforcement.js.map +1 -0
- package/dist/core/src/policy/riskPolicyExitCode.js +16 -0
- package/dist/core/src/policy/riskPolicyExitCode.js.map +1 -0
- package/dist/core/src/policy/riskPolicyInitializer.js +90 -0
- package/dist/core/src/policy/riskPolicyInitializer.js.map +1 -0
- package/dist/core/src/quickFix/quickFixEngine.js +132 -0
- package/dist/core/src/quickFix/quickFixEngine.js.map +1 -0
- package/dist/core/src/quickFix/quickFixMessaging.js +15 -0
- package/dist/core/src/quickFix/quickFixMessaging.js.map +1 -0
- package/dist/core/src/quickFix/quickFixProviders.js +87 -0
- package/dist/core/src/quickFix/quickFixProviders.js.map +1 -0
- package/dist/core/src/quickFix/quickFixTypes.js +3 -0
- package/dist/core/src/quickFix/quickFixTypes.js.map +1 -0
- package/dist/core/src/remediation/fileHelpers.js +86 -0
- package/dist/core/src/remediation/fileHelpers.js.map +1 -0
- package/dist/core/src/remediation/fixRegistry.js +645 -0
- package/dist/core/src/remediation/fixRegistry.js.map +1 -0
- package/dist/core/src/remediation/index.js +8 -0
- package/dist/core/src/remediation/index.js.map +1 -0
- package/dist/core/src/remediation/remediationEngine.js +207 -0
- package/dist/core/src/remediation/remediationEngine.js.map +1 -0
- package/dist/core/src/reporting/adrReporter.js +59 -0
- package/dist/core/src/reporting/adrReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureBaselineReporter.js +64 -0
- package/dist/core/src/reporting/architectureBaselineReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureDiagramReporter.js +148 -0
- package/dist/core/src/reporting/architectureDiagramReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureDriftTimelineReporter.js +44 -0
- package/dist/core/src/reporting/architectureDriftTimelineReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureHealthHistoryReporter.js +51 -0
- package/dist/core/src/reporting/architectureHealthHistoryReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureMapReporter.js +228 -0
- package/dist/core/src/reporting/architectureMapReporter.js.map +1 -0
- package/dist/core/src/reporting/architecturePrCommentReporter.js +324 -0
- package/dist/core/src/reporting/architecturePrCommentReporter.js.map +1 -0
- package/dist/core/src/reporting/architecturePrReviewReporter.js +389 -0
- package/dist/core/src/reporting/architecturePrReviewReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureReportArtifacts.js +166 -0
- package/dist/core/src/reporting/architectureReportArtifacts.js.map +1 -0
- package/dist/core/src/reporting/architectureReviewReportGenerator.js +382 -0
- package/dist/core/src/reporting/architectureReviewReportGenerator.js.map +1 -0
- package/dist/core/src/reporting/architectureReviewReporter.js +1633 -0
- package/dist/core/src/reporting/architectureReviewReporter.js.map +1 -0
- package/dist/core/src/reporting/architectureRiskAssessment.js +101 -0
- package/dist/core/src/reporting/architectureRiskAssessment.js.map +1 -0
- package/dist/core/src/reporting/architectureScoreBadge.js +177 -0
- package/dist/core/src/reporting/architectureScoreBadge.js.map +1 -0
- package/dist/core/src/reporting/architectureSupplementalReporters.js +124 -0
- package/dist/core/src/reporting/architectureSupplementalReporters.js.map +1 -0
- package/dist/core/src/reporting/changeRiskAssessment.js +6 -0
- package/dist/core/src/reporting/changeRiskAssessment.js.map +1 -0
- package/dist/core/src/reporting/changeRiskTypes.js +3 -0
- package/dist/core/src/reporting/changeRiskTypes.js.map +1 -0
- package/dist/core/src/reporting/impactAnalysisReporter.js +111 -0
- package/dist/core/src/reporting/impactAnalysisReporter.js.map +1 -0
- package/dist/core/src/reporting/onboardingDocsReporter.js +113 -0
- package/dist/core/src/reporting/onboardingDocsReporter.js.map +1 -0
- package/dist/core/src/reporting/rulePackReporter.js +61 -0
- package/dist/core/src/reporting/rulePackReporter.js.map +1 -0
- package/dist/core/src/reporting/safetyControlsDetection.js +343 -0
- package/dist/core/src/reporting/safetyControlsDetection.js.map +1 -0
- package/dist/core/src/resolveRuleAdrs.js +31 -0
- package/dist/core/src/resolveRuleAdrs.js.map +1 -0
- package/dist/core/src/reviewGenerationWorkflow.js +220 -0
- package/dist/core/src/reviewGenerationWorkflow.js.map +1 -0
- package/dist/core/src/rulePacks/index.js +17 -0
- package/dist/core/src/rulePacks/index.js.map +1 -0
- package/dist/core/src/rulePacks/layeredMonolithRulePack.js +45 -0
- package/dist/core/src/rulePacks/layeredMonolithRulePack.js.map +1 -0
- package/dist/core/src/rulePacks/modularMonolithRulePack.js +41 -0
- package/dist/core/src/rulePacks/modularMonolithRulePack.js.map +1 -0
- package/dist/core/src/rulePacks/types.js +3 -0
- package/dist/core/src/rulePacks/types.js.map +1 -0
- package/dist/core/src/setupNextSteps.js +939 -0
- package/dist/core/src/setupNextSteps.js.map +1 -0
- package/dist/core/src/setupRefresh.js +152 -0
- package/dist/core/src/setupRefresh.js.map +1 -0
- package/dist/core/src/smartInit/apiDbHintDetection.js +836 -0
- package/dist/core/src/smartInit/apiDbHintDetection.js.map +1 -0
- package/dist/core/src/smartInit/architectureProposalBuilder.js +1215 -0
- package/dist/core/src/smartInit/architectureProposalBuilder.js.map +1 -0
- package/dist/core/src/smartInit/architectureStyleDetection.js +472 -0
- package/dist/core/src/smartInit/architectureStyleDetection.js.map +1 -0
- package/dist/core/src/smartInit/archpilotIgnore.js +139 -0
- package/dist/core/src/smartInit/archpilotIgnore.js.map +1 -0
- package/dist/core/src/smartInit/componentDetection.js +1084 -0
- package/dist/core/src/smartInit/componentDetection.js.map +1 -0
- package/dist/core/src/smartInit/implementationProfileResolution.js +53 -0
- package/dist/core/src/smartInit/implementationProfileResolution.js.map +1 -0
- package/dist/core/src/smartInit/index.js +31 -0
- package/dist/core/src/smartInit/index.js.map +1 -0
- package/dist/core/src/smartInit/moduleDetection.js +982 -0
- package/dist/core/src/smartInit/moduleDetection.js.map +1 -0
- package/dist/core/src/smartInit/projectKindDetection.js +437 -0
- package/dist/core/src/smartInit/projectKindDetection.js.map +1 -0
- package/dist/core/src/smartInit/repoTopologyDetection.js +470 -0
- package/dist/core/src/smartInit/repoTopologyDetection.js.map +1 -0
- package/dist/core/src/smartInit/runContext.js +112 -0
- package/dist/core/src/smartInit/runContext.js.map +1 -0
- package/dist/core/src/smartInit/smartInitEngine.js +94 -0
- package/dist/core/src/smartInit/smartInitEngine.js.map +1 -0
- package/dist/core/src/smartInit/stackDetection.js +503 -0
- package/dist/core/src/smartInit/stackDetection.js.map +1 -0
- package/dist/core/src/smartInit/toolingHintDetection.js +345 -0
- package/dist/core/src/smartInit/toolingHintDetection.js.map +1 -0
- package/dist/core/src/sourceScopeClassification.js +83 -0
- package/dist/core/src/sourceScopeClassification.js.map +1 -0
- package/dist/core/src/stackAdapters.js +2475 -0
- package/dist/core/src/stackAdapters.js.map +1 -0
- package/dist/core/src/stackMetadata.js +157 -0
- package/dist/core/src/stackMetadata.js.map +1 -0
- package/dist/core/src/suppressions/index.js +3 -0
- package/dist/core/src/suppressions/index.js.map +1 -0
- package/dist/core/src/suppressions/suppressionReporter.js +38 -0
- package/dist/core/src/suppressions/suppressionReporter.js.map +1 -0
- package/dist/core/src/suppressions/suppressionTypes.js +3 -0
- package/dist/core/src/suppressions/suppressionTypes.js.map +1 -0
- package/dist/core/src/suppressions/suppressionValidator.js +119 -0
- package/dist/core/src/suppressions/suppressionValidator.js.map +1 -0
- package/dist/core/src/transactionDomainAnalysis.js +1416 -0
- package/dist/core/src/transactionDomainAnalysis.js.map +1 -0
- package/dist/core/src/validation/changedFilesResolver.js +165 -0
- package/dist/core/src/validation/changedFilesResolver.js.map +1 -0
- package/dist/core/src/validationProfiling.js +33 -0
- package/dist/core/src/validationProfiling.js.map +1 -0
- package/dist/core/src/validationRuleExplanations.js +69 -0
- package/dist/core/src/validationRuleExplanations.js.map +1 -0
- package/dist/core/src/validationSourceInventory.js +200 -0
- package/dist/core/src/validationSourceInventory.js.map +1 -0
- package/dist/core/src/validationSuppressions.js +231 -0
- package/dist/core/src/validationSuppressions.js.map +1 -0
- package/dist/core/src/validationTypeScriptAstCache.js +82 -0
- package/dist/core/src/validationTypeScriptAstCache.js.map +1 -0
- package/dist/core/src/validationWorkflow.js +222 -0
- package/dist/core/src/validationWorkflow.js.map +1 -0
- package/dist/core/src/workspaceRoot.js +68 -0
- package/dist/core/src/workspaceRoot.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderImpactAnalysisJson = renderImpactAnalysisJson;
|
|
4
|
+
exports.renderImpactAnalysisMarkdown = renderImpactAnalysisMarkdown;
|
|
5
|
+
function renderStringList(values) {
|
|
6
|
+
if (values.length === 0) {
|
|
7
|
+
return '- (none)';
|
|
8
|
+
}
|
|
9
|
+
return values.map((value) => `- ${value}`).join('\n');
|
|
10
|
+
}
|
|
11
|
+
function renderImpactAnalysisJson(model) {
|
|
12
|
+
return `${JSON.stringify(model, null, 2)}\n`;
|
|
13
|
+
}
|
|
14
|
+
function renderImpactAnalysisMarkdown(model) {
|
|
15
|
+
const riskModules = model.riskModules.length === 0
|
|
16
|
+
? '- (none)'
|
|
17
|
+
: model.riskModules
|
|
18
|
+
.map((entry) => `- ${entry.moduleName} | in=${entry.incomingDependencyCount}, out=${entry.outgoingDependencyCount} | ${entry.reasons.join(', ')}`)
|
|
19
|
+
.join('\n');
|
|
20
|
+
const suggestedFiles = model.suggestedFilesToInspect.length === 0
|
|
21
|
+
? '- (none)'
|
|
22
|
+
: model.suggestedFilesToInspect
|
|
23
|
+
.map((entry) => `- ${entry.path} (${entry.kind}, ${entry.exists ? 'exists' : 'missing'})`)
|
|
24
|
+
.join('\n');
|
|
25
|
+
const notes = model.notes.length === 0 ? '- (none)' : model.notes.map((note) => `- ${note}`).join('\n');
|
|
26
|
+
const impactedSurface = model.impact.affectedSurface;
|
|
27
|
+
const factors = model.impact.factors.length === 0
|
|
28
|
+
? '- (none)'
|
|
29
|
+
: model.impact.factors
|
|
30
|
+
.map((factor) => `- ${factor.id} | ${factor.label} | ${factor.category} | weight=${factor.weight}`)
|
|
31
|
+
.join('\n');
|
|
32
|
+
const dependencyChains = [
|
|
33
|
+
...model.impact.directDependencyChains.map((entry) => entry.chain.join(' -> ')),
|
|
34
|
+
...model.impact.transitiveDependencyChains.map((entry) => entry.chain.join(' -> ')),
|
|
35
|
+
];
|
|
36
|
+
const reasoning = model.impact.reasoning.length === 0
|
|
37
|
+
? '- (none)'
|
|
38
|
+
: model.impact.reasoning
|
|
39
|
+
.map((entry) => `- ${entry.id} | ${entry.type} | ${entry.evidence}`)
|
|
40
|
+
.join('\n');
|
|
41
|
+
return `# ArchPilot Architecture Impact Analysis
|
|
42
|
+
|
|
43
|
+
- Project: ${model.projectName}
|
|
44
|
+
- Generated at (UTC): ${model.generatedAtUtc}
|
|
45
|
+
- Report version: ${model.reportVersion}
|
|
46
|
+
|
|
47
|
+
## Target
|
|
48
|
+
- Requested target: ${model.target}
|
|
49
|
+
- Module resolved: ${model.moduleResolved ? 'yes' : 'no'}
|
|
50
|
+
- Resolution mode: ${model.resolutionMode}
|
|
51
|
+
- Detected module: ${model.module ?? '(unresolved)'}
|
|
52
|
+
- Modules discovered: ${model.modulesDiscovered}
|
|
53
|
+
|
|
54
|
+
## Dependents
|
|
55
|
+
### Direct Dependents
|
|
56
|
+
${renderStringList(model.directDependents)}
|
|
57
|
+
|
|
58
|
+
### Transitive Dependents
|
|
59
|
+
${renderStringList(model.transitiveDependents)}
|
|
60
|
+
|
|
61
|
+
## Module Dependencies
|
|
62
|
+
${renderStringList(model.dependencies)}
|
|
63
|
+
|
|
64
|
+
## Impact Summary
|
|
65
|
+
- Impact level: ${model.impact.impactLevel}
|
|
66
|
+
- Impact score: ${model.impact.impactRadiusScore}
|
|
67
|
+
- Summary: ${model.impact.summary}
|
|
68
|
+
- Scoring formula: ${model.impact.scoring.formula}
|
|
69
|
+
- Scoring components:
|
|
70
|
+
- changedModules=${model.impact.scoring.components.changedModules}
|
|
71
|
+
- directlyAffectedModules=${model.impact.scoring.components.directlyAffectedModules}
|
|
72
|
+
- transitivelyAffectedModules=${model.impact.scoring.components.transitivelyAffectedModules}
|
|
73
|
+
- governanceSurfaceItems=${model.impact.scoring.components.governanceSurfaceItems}
|
|
74
|
+
- maxTransitiveChainDepth=${model.impact.scoring.components.maxTransitiveChainDepth}
|
|
75
|
+
|
|
76
|
+
## Affected Surface
|
|
77
|
+
- Changed modules: ${impactedSurface.changedModules.join(', ') || '(none)'}
|
|
78
|
+
- Directly affected modules: ${impactedSurface.directlyAffectedModules.join(', ') || '(none)'}
|
|
79
|
+
- Transitively affected modules: ${impactedSurface.transitivelyAffectedModules.join(', ') || '(none)'}
|
|
80
|
+
- Impacted contracts: ${impactedSurface.impactedContracts.join(', ') || '(none)'}
|
|
81
|
+
- Impacted public entrypoints: ${impactedSurface.impactedPublicEntrypoints.join(', ') || '(none)'}
|
|
82
|
+
- Impacted ADRs: ${impactedSurface.impactedAdrs.join(', ') || '(none)'}
|
|
83
|
+
- Impacted architecture artifacts: ${impactedSurface.impactedArchitectureArtifacts.join(', ') || '(none)'}
|
|
84
|
+
|
|
85
|
+
## Dependency Chains
|
|
86
|
+
${dependencyChains.length === 0 ? '- (none)' : dependencyChains.map((entry) => `- ${entry}`).join('\n')}
|
|
87
|
+
|
|
88
|
+
## Impact Factors
|
|
89
|
+
${factors}
|
|
90
|
+
|
|
91
|
+
## Impact Reasoning
|
|
92
|
+
${reasoning}
|
|
93
|
+
|
|
94
|
+
## Cycle and Orphan Status
|
|
95
|
+
- Participates in cycle: ${model.inCycle ? 'yes' : 'no'}
|
|
96
|
+
- Orphan: ${model.orphan ? 'yes' : 'no'}
|
|
97
|
+
|
|
98
|
+
## Potential Architecture Risks
|
|
99
|
+
${riskModules}
|
|
100
|
+
|
|
101
|
+
## Suggested Modules To Review
|
|
102
|
+
${renderStringList(model.suggestedModulesToReview)}
|
|
103
|
+
|
|
104
|
+
## Suggested Files To Inspect
|
|
105
|
+
${suggestedFiles}
|
|
106
|
+
|
|
107
|
+
## Notes
|
|
108
|
+
${notes}
|
|
109
|
+
`.trimEnd() + '\n';
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=impactAnalysisReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impactAnalysisReporter.js","sourceRoot":"","sources":["../../../../../core/src/reporting/impactAnalysisReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderOnboardingGuideJson = renderOnboardingGuideJson;
|
|
4
|
+
exports.renderOnboardingGuideMarkdown = renderOnboardingGuideMarkdown;
|
|
5
|
+
function renderStringList(values) {
|
|
6
|
+
if (values.length === 0) {
|
|
7
|
+
return '- (none)';
|
|
8
|
+
}
|
|
9
|
+
return values.map((value) => `- ${value}`).join('\n');
|
|
10
|
+
}
|
|
11
|
+
function renderOnboardingGuideJson(model) {
|
|
12
|
+
return `${JSON.stringify(model, null, 2)}\n`;
|
|
13
|
+
}
|
|
14
|
+
function renderOnboardingGuideMarkdown(model) {
|
|
15
|
+
const modulesOverview = model.modules.length === 0
|
|
16
|
+
? '- (none)'
|
|
17
|
+
: model.modules.map((moduleEntry) => `- ${moduleEntry.moduleName}`).join('\n');
|
|
18
|
+
const dependencies = model.dependencySummary.edges.length === 0
|
|
19
|
+
? '- (none)'
|
|
20
|
+
: model.dependencySummary.edges
|
|
21
|
+
.map((edge) => `- ${edge.source} -> ${edge.target} (imports: ${edge.importCount})`)
|
|
22
|
+
.join('\n');
|
|
23
|
+
const cycles = model.cycles.length === 0
|
|
24
|
+
? '- (none)'
|
|
25
|
+
: model.cycles
|
|
26
|
+
.map((cycle) => cycle.length > 0 ? `- ${cycle.join(' -> ')} -> ${cycle[0]}` : '- (none)')
|
|
27
|
+
.join('\n');
|
|
28
|
+
const moduleSections = model.modules.length === 0
|
|
29
|
+
? '- (none)'
|
|
30
|
+
: model.modules
|
|
31
|
+
.map((moduleEntry) => {
|
|
32
|
+
const recommendedFiles = moduleEntry.recommendedFirstFiles.length === 0
|
|
33
|
+
? '- (none)'
|
|
34
|
+
: moduleEntry.recommendedFirstFiles
|
|
35
|
+
.map((filePath) => `- ${filePath}`)
|
|
36
|
+
.join('\n');
|
|
37
|
+
return `### ${moduleEntry.moduleName}
|
|
38
|
+
- Path: ${moduleEntry.path}
|
|
39
|
+
- Contract: ${moduleEntry.contractExists
|
|
40
|
+
? `present (${moduleEntry.contractPath ?? 'unknown path'})`
|
|
41
|
+
: `missing${moduleEntry.contractPath ? ` (${moduleEntry.contractPath})` : ''}`}
|
|
42
|
+
- README: ${moduleEntry.readmeExists ? `present (${moduleEntry.readmePath})` : `missing (${moduleEntry.readmePath})`}
|
|
43
|
+
- index.ts: ${moduleEntry.indexExists ? `present (${moduleEntry.indexPath})` : `missing (${moduleEntry.indexPath})`}
|
|
44
|
+
- Incoming dependency count: ${moduleEntry.incomingDependencyCount}
|
|
45
|
+
- Outgoing dependency count: ${moduleEntry.outgoingDependencyCount}
|
|
46
|
+
- Participates in cycle: ${moduleEntry.participatesInCycle ? 'yes' : 'no'}
|
|
47
|
+
- Orphaned: ${moduleEntry.orphan ? 'yes' : 'no'}
|
|
48
|
+
- Public entrypoint mismatch: ${moduleEntry.missingPublicEntrypointAlignment === undefined
|
|
49
|
+
? 'n/a'
|
|
50
|
+
: moduleEntry.missingPublicEntrypointAlignment
|
|
51
|
+
? 'yes'
|
|
52
|
+
: 'no'}
|
|
53
|
+
|
|
54
|
+
Recommended first files to open:
|
|
55
|
+
${recommendedFiles}`;
|
|
56
|
+
})
|
|
57
|
+
.join('\n\n');
|
|
58
|
+
const suggestedReadingOrder = model.suggestedReadingOrder.length === 0
|
|
59
|
+
? '- (none)'
|
|
60
|
+
: model.suggestedReadingOrder
|
|
61
|
+
.map((entry, index) => `- ${index + 1}. ${entry.moduleName} (${entry.reason})${entry.participatesInCycle ? ' [cycle]' : ''}`)
|
|
62
|
+
.join('\n');
|
|
63
|
+
const highRiskModules = model.highRiskModules.length === 0
|
|
64
|
+
? '- (none)'
|
|
65
|
+
: model.highRiskModules
|
|
66
|
+
.map((entry) => `- ${entry.moduleName} (score: ${entry.riskScore}) | ${entry.reasons.join(', ')}`)
|
|
67
|
+
.join('\n');
|
|
68
|
+
return `# ArchPilot Onboarding Guide
|
|
69
|
+
|
|
70
|
+
- Project: ${model.projectName}
|
|
71
|
+
- Generated at (UTC): ${model.generatedAtUtc}
|
|
72
|
+
- Report version: ${model.reportVersion}
|
|
73
|
+
|
|
74
|
+
ArchPilot discovered the current architecture shape from repository modules, module contracts, and cross-module dependencies.
|
|
75
|
+
|
|
76
|
+
## Modules Overview
|
|
77
|
+
${modulesOverview}
|
|
78
|
+
|
|
79
|
+
## Module-by-Module Summary
|
|
80
|
+
${moduleSections}
|
|
81
|
+
|
|
82
|
+
## Dependency Overview
|
|
83
|
+
- Module dependency edges: ${model.summary.edgeCount}
|
|
84
|
+
- Cross-module import references: ${model.dependencySummary.totalCrossModuleImports}
|
|
85
|
+
|
|
86
|
+
${dependencies}
|
|
87
|
+
|
|
88
|
+
## Cycle Summary
|
|
89
|
+
${cycles}
|
|
90
|
+
|
|
91
|
+
## Orphan Modules Summary
|
|
92
|
+
${renderStringList(model.orphanModules)}
|
|
93
|
+
|
|
94
|
+
## Missing Contracts Summary
|
|
95
|
+
${renderStringList(model.missingContracts)}
|
|
96
|
+
|
|
97
|
+
## Public Entrypoint Mismatch Summary
|
|
98
|
+
${renderStringList(model.publicEntrypointMismatches)}
|
|
99
|
+
|
|
100
|
+
## Suggested Reading Order
|
|
101
|
+
${suggestedReadingOrder}
|
|
102
|
+
|
|
103
|
+
## High-Risk Modules To Inspect First
|
|
104
|
+
${highRiskModules}
|
|
105
|
+
|
|
106
|
+
## How To Use This With ArchPilot
|
|
107
|
+
- Run \`archpilot map\` to refresh architecture discovery artifacts.
|
|
108
|
+
- Run \`archpilot baseline check\` to detect drift against approved architecture baseline.
|
|
109
|
+
- Run \`archpilot validate --ci\` for deterministic architecture validation in CI.
|
|
110
|
+
- Run \`archpilot review pr\` to produce PR-ready architecture review content.
|
|
111
|
+
`.trimEnd() + '\n';
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=onboardingDocsReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboardingDocsReporter.js","sourceRoot":"","sources":["../../../../../core/src/reporting/onboardingDocsReporter.ts"],"names":[],"mappings":";;AASA,8DAEC;AAED,sEA8HC;AAzID,SAAS,gBAAgB,CAAC,MAAgB;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,yBAAyB,CAAC,KAA2B;IACpE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAgB,6BAA6B,CAAC,KAA2B;IACxE,MAAM,eAAe,GACpB,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,YAAY,GACjB,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACzC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK;aAC5B,GAAG,CACH,CAAC,IAAI,EAAE,EAAE,CACR,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,cAAc,IAAI,CAAC,WAAW,GAAG,CACpE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,MAAM,GACX,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,MAAM;aACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CACxE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,cAAc,GACnB,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,OAAO;aACZ,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACpB,MAAM,gBAAgB,GACrB,WAAW,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC;gBAC7C,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,WAAW,CAAC,qBAAqB;qBAChC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;qBAClC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO,OAAO,WAAW,CAAC,UAAU;UAChC,WAAW,CAAC,IAAI;cAEnB,WAAW,CAAC,cAAc;gBACzB,CAAC,CAAC,YAAY,WAAW,CAAC,YAAY,IAAI,cAAc,GAAG;gBAC3D,CAAC,CAAC,UAAU,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAC9E;YACM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,UAAU,GAAG;cACtG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,SAAS,GAAG;+BACpF,WAAW,CAAC,uBAAuB;+BACnC,WAAW,CAAC,uBAAuB;2BACvC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;cAC3D,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gCAExC,WAAW,CAAC,gCAAgC,KAAK,SAAS;gBACzD,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,WAAW,CAAC,gCAAgC;oBAC7C,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IACL;;;EAGJ,gBAAgB,EAAE,CAAC;QAChB,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAElB,MAAM,qBAAqB,GAC1B,KAAK,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC;QACvC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,qBAAqB;aAC1B,GAAG,CACH,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAChB,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,MAAM,IACnD,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAC1C,EAAE,CACH;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,eAAe,GACpB,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QACjC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,eAAe;aACpB,GAAG,CACH,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,KAAK,CAAC,UAAU,YAAY,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClF;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO;;aAEK,KAAK,CAAC,WAAW;wBACN,KAAK,CAAC,cAAc;oBACxB,KAAK,CAAC,aAAa;;;;;EAKrC,eAAe;;;EAGf,cAAc;;;6BAGa,KAAK,CAAC,OAAO,CAAC,SAAS;oCAChB,KAAK,CAAC,iBAAiB,CAAC,uBAAuB;;EAEjF,YAAY;;;EAGZ,MAAM;;;EAGN,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC;;;EAGrC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC;;;EAGxC,gBAAgB,CAAC,KAAK,CAAC,0BAA0B,CAAC;;;EAGlD,qBAAqB;;;EAGrB,eAAe;;;;;;;CAOhB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderRulePackListConsole = renderRulePackListConsole;
|
|
4
|
+
exports.renderRulePackShowConsole = renderRulePackShowConsole;
|
|
5
|
+
exports.renderRulePackApplyConsole = renderRulePackApplyConsole;
|
|
6
|
+
function renderRulePackListConsole(packs) {
|
|
7
|
+
if (packs.length === 0) {
|
|
8
|
+
return 'No built-in rule packs available.\n';
|
|
9
|
+
}
|
|
10
|
+
return `${packs
|
|
11
|
+
.map((pack) => `${pack.id} ${pack.description}`)
|
|
12
|
+
.join('\n')}\n`;
|
|
13
|
+
}
|
|
14
|
+
function renderRulePackShowConsole(pack) {
|
|
15
|
+
const rules = Object.entries(pack.validationConfig.rules)
|
|
16
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
17
|
+
.map(([ruleId, config]) => `- ${ruleId}: enabled=${config.enabled ?? true}, severity=${config.severity ?? 'default'}`)
|
|
18
|
+
.join('\n');
|
|
19
|
+
const dependencyBehavior = pack.dependencyRulesTemplate
|
|
20
|
+
? 'Includes dependency-rules template.'
|
|
21
|
+
: 'No dependency-rules template.';
|
|
22
|
+
const layerBehavior = pack.layerRulesTemplate
|
|
23
|
+
? 'Includes layer-rules template.'
|
|
24
|
+
: 'No layer-rules template.';
|
|
25
|
+
const recommendedAdrs = pack.recommendedAdrs.length > 0
|
|
26
|
+
? pack.recommendedAdrs.map((topic) => `- ${topic}`).join('\n')
|
|
27
|
+
: '- (none)';
|
|
28
|
+
const notes = pack.recommendedNotes.length > 0
|
|
29
|
+
? pack.recommendedNotes.map((note) => `- ${note}`).join('\n')
|
|
30
|
+
: '- (none)';
|
|
31
|
+
return `Rule Pack: ${pack.id}
|
|
32
|
+
Title: ${pack.title}
|
|
33
|
+
Description: ${pack.description}
|
|
34
|
+
Architecture style: ${pack.architectureStyle}
|
|
35
|
+
|
|
36
|
+
Rules affected:
|
|
37
|
+
${rules}
|
|
38
|
+
|
|
39
|
+
Dependency governance:
|
|
40
|
+
${dependencyBehavior}
|
|
41
|
+
|
|
42
|
+
Layer governance:
|
|
43
|
+
${layerBehavior}
|
|
44
|
+
|
|
45
|
+
Recommended ADRs:
|
|
46
|
+
${recommendedAdrs}
|
|
47
|
+
|
|
48
|
+
Notes:
|
|
49
|
+
${notes}
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
function renderRulePackApplyConsole(result) {
|
|
53
|
+
const written = result.filesWritten.map((filePath) => `- ${filePath}`).join('\n');
|
|
54
|
+
return `Rule pack applied: ${result.appliedPackId}
|
|
55
|
+
Files written:
|
|
56
|
+
${written}
|
|
57
|
+
|
|
58
|
+
Recommendation: review generated configs and create ADRs for applicable recommended topics.
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=rulePackReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rulePackReporter.js","sourceRoot":"","sources":["../../../../../core/src/reporting/rulePackReporter.ts"],"names":[],"mappings":";;AAGA,8DAOC;AAED,8DA2CC;AAED,gEAQC;AA9DD,SAAgB,yBAAyB,CAAC,KAA2B;IACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,qCAAqC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,KAAK;SACb,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,SAAgB,yBAAyB,CAAC,IAAwB;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CACH,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CACpB,KAAK,MAAM,aAAa,MAAM,CAAC,OAAO,IAAI,IAAI,cAAc,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAC3F;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB;QACtD,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,+BAA+B,CAAC;IACnC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB;QAC5C,CAAC,CAAC,gCAAgC;QAClC,CAAC,CAAC,0BAA0B,CAAC;IAC9B,MAAM,eAAe,GACpB,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAC9B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9D,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,KAAK,GACV,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,UAAU,CAAC;IAEf,OAAO,cAAc,IAAI,CAAC,EAAE;SACpB,IAAI,CAAC,KAAK;eACJ,IAAI,CAAC,WAAW;sBACT,IAAI,CAAC,iBAAiB;;;EAG1C,KAAK;;;EAGL,kBAAkB;;;EAGlB,aAAa;;;EAGb,eAAe;;;EAGf,KAAK;CACN,CAAC;AACF,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAA2B;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,sBAAsB,MAAM,CAAC,aAAa;;EAEhD,OAAO;;;CAGR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.featureFlagsPathRelative = exports.rollbackPlanPathRelative = void 0;
|
|
37
|
+
exports.getRollbackPlanPath = getRollbackPlanPath;
|
|
38
|
+
exports.getFeatureFlagsPath = getFeatureFlagsPath;
|
|
39
|
+
exports.buildDefaultRollbackPlanTemplate = buildDefaultRollbackPlanTemplate;
|
|
40
|
+
exports.buildDefaultFeatureFlagsTemplate = buildDefaultFeatureFlagsTemplate;
|
|
41
|
+
exports.ensureRollbackPlanFile = ensureRollbackPlanFile;
|
|
42
|
+
exports.ensureFeatureFlagsFile = ensureFeatureFlagsFile;
|
|
43
|
+
exports.ensureSafetyControlArtifacts = ensureSafetyControlArtifacts;
|
|
44
|
+
exports.detectMissingSafetyControls = detectMissingSafetyControls;
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const node_fs_1 = require("node:fs");
|
|
47
|
+
exports.rollbackPlanPathRelative = '.archpilot/rollout/rollback-plan.md';
|
|
48
|
+
exports.featureFlagsPathRelative = '.archpilot/rollout/feature-flags.json';
|
|
49
|
+
function toAbsolute(workspaceRoot, relativePath) {
|
|
50
|
+
return path.join(workspaceRoot, ...relativePath.split('/'));
|
|
51
|
+
}
|
|
52
|
+
function getRollbackPlanPath(workspaceRoot) {
|
|
53
|
+
return toAbsolute(workspaceRoot, exports.rollbackPlanPathRelative);
|
|
54
|
+
}
|
|
55
|
+
function getFeatureFlagsPath(workspaceRoot) {
|
|
56
|
+
return toAbsolute(workspaceRoot, exports.featureFlagsPathRelative);
|
|
57
|
+
}
|
|
58
|
+
function buildDefaultRollbackPlanTemplate() {
|
|
59
|
+
return `# Rollback Plan
|
|
60
|
+
|
|
61
|
+
## Change
|
|
62
|
+
Describe the architecture change this rollback plan covers.
|
|
63
|
+
|
|
64
|
+
## Rollback Trigger
|
|
65
|
+
Define deterministic conditions that trigger rollback.
|
|
66
|
+
|
|
67
|
+
## Rollback Steps
|
|
68
|
+
1. Revert to the previous stable architecture boundary state.
|
|
69
|
+
2. Restore impacted contracts and entrypoints.
|
|
70
|
+
3. Re-run \`archpilot validate\` to confirm governance state.
|
|
71
|
+
|
|
72
|
+
## Owner
|
|
73
|
+
- Team: architecture-team
|
|
74
|
+
- Primary owner: <name>
|
|
75
|
+
|
|
76
|
+
## Validation After Rollback
|
|
77
|
+
- \`archpilot validate\`
|
|
78
|
+
- Verify critical architecture violations are resolved.
|
|
79
|
+
`;
|
|
80
|
+
}
|
|
81
|
+
function buildDefaultFeatureFlagsTemplate() {
|
|
82
|
+
return `${JSON.stringify({
|
|
83
|
+
enabled: true,
|
|
84
|
+
flags: [
|
|
85
|
+
{
|
|
86
|
+
name: 'architecture-change-rollout',
|
|
87
|
+
description: 'Controls staged rollout for architecture changes.',
|
|
88
|
+
stage: 'canary',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
}, null, 2)}\n`;
|
|
92
|
+
}
|
|
93
|
+
async function writeFileIfMissing(filePath, contents) {
|
|
94
|
+
try {
|
|
95
|
+
await node_fs_1.promises.access(filePath);
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
await node_fs_1.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
100
|
+
await node_fs_1.promises.writeFile(filePath, contents, { encoding: 'utf8' });
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function ensureRollbackPlanFile(workspaceRoot) {
|
|
105
|
+
const filePath = getRollbackPlanPath(workspaceRoot);
|
|
106
|
+
return {
|
|
107
|
+
path: filePath,
|
|
108
|
+
created: await writeFileIfMissing(filePath, buildDefaultRollbackPlanTemplate()),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async function ensureFeatureFlagsFile(workspaceRoot) {
|
|
112
|
+
const filePath = getFeatureFlagsPath(workspaceRoot);
|
|
113
|
+
return {
|
|
114
|
+
path: filePath,
|
|
115
|
+
created: await writeFileIfMissing(filePath, buildDefaultFeatureFlagsTemplate()),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
async function ensureSafetyControlArtifacts(workspaceRoot) {
|
|
119
|
+
const rollbackPlan = await ensureRollbackPlanFile(workspaceRoot);
|
|
120
|
+
const featureFlags = await ensureFeatureFlagsFile(workspaceRoot);
|
|
121
|
+
return { rollbackPlan, featureFlags };
|
|
122
|
+
}
|
|
123
|
+
async function fileExists(filePath) {
|
|
124
|
+
try {
|
|
125
|
+
await node_fs_1.promises.access(filePath);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function rollbackPlanPresent(filePath) {
|
|
133
|
+
if (!(await fileExists(filePath))) {
|
|
134
|
+
return { present: false, detail: 'rollback plan file is missing' };
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const content = await node_fs_1.promises.readFile(filePath, { encoding: 'utf8' });
|
|
138
|
+
return content.trim().length > 0
|
|
139
|
+
? { present: true }
|
|
140
|
+
: { present: false, detail: 'rollback plan file is empty' };
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return {
|
|
144
|
+
present: false,
|
|
145
|
+
detail: error instanceof Error ? error.message : 'rollback plan could not be read',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async function featureFlagsPresent(filePath) {
|
|
150
|
+
if (!(await fileExists(filePath))) {
|
|
151
|
+
return { present: false, valid: false, detail: 'feature flag config file is missing' };
|
|
152
|
+
}
|
|
153
|
+
let content;
|
|
154
|
+
try {
|
|
155
|
+
content = await node_fs_1.promises.readFile(filePath, { encoding: 'utf8' });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return {
|
|
159
|
+
present: true,
|
|
160
|
+
valid: false,
|
|
161
|
+
detail: error instanceof Error ? error.message : 'feature flag config could not be read',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
let parsed;
|
|
165
|
+
try {
|
|
166
|
+
parsed = JSON.parse(content);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return {
|
|
170
|
+
present: true,
|
|
171
|
+
valid: false,
|
|
172
|
+
detail: 'feature flag config is invalid JSON',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
176
|
+
return {
|
|
177
|
+
present: true,
|
|
178
|
+
valid: false,
|
|
179
|
+
detail: 'feature flag config must be a JSON object',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const typed = parsed;
|
|
183
|
+
const enabled = typed.enabled === true;
|
|
184
|
+
const flagEntries = Array.isArray(typed.flags) ? typed.flags.length : 0;
|
|
185
|
+
if (!enabled && flagEntries === 0) {
|
|
186
|
+
return {
|
|
187
|
+
present: true,
|
|
188
|
+
valid: false,
|
|
189
|
+
detail: 'feature flag config must define flags[] entries or enabled=true',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return { present: true, valid: true };
|
|
193
|
+
}
|
|
194
|
+
function buildTriggerReasons(context) {
|
|
195
|
+
const reasons = [];
|
|
196
|
+
if (context.adrRequirement.required) {
|
|
197
|
+
reasons.push('ADR follow-up is required for this run.');
|
|
198
|
+
}
|
|
199
|
+
if (context.enforcement.action === 'require-adr' || context.enforcement.action === 'fail') {
|
|
200
|
+
reasons.push(`Enforcement outcome is ${context.enforcement.action.toUpperCase()}, requiring governance safety review.`);
|
|
201
|
+
}
|
|
202
|
+
if (context.risk.level === 'high' || context.risk.level === 'critical') {
|
|
203
|
+
reasons.push(`Governance risk is ${context.risk.level.toUpperCase()}, requiring safety controls verification.`);
|
|
204
|
+
}
|
|
205
|
+
if (context.changeRisk.riskLevel !== 'low' &&
|
|
206
|
+
context.changeRisk.signals.diffContextAvailable === true) {
|
|
207
|
+
reasons.push(`Diff-aware change risk is ${context.changeRisk.riskLevel.toUpperCase()}, requiring rollout safety controls.`);
|
|
208
|
+
}
|
|
209
|
+
const structuralFindingCount = context.findings.filter((finding) => (finding.category === 'architecture' || finding.category === 'dependency') &&
|
|
210
|
+
finding.kind === 'violation' &&
|
|
211
|
+
(finding.severity === 'error' || finding.severity === 'warning')).length;
|
|
212
|
+
if (structuralFindingCount > 0) {
|
|
213
|
+
reasons.push(`Detected ${structuralFindingCount} structural/dependency violation(s) in this run.`);
|
|
214
|
+
}
|
|
215
|
+
return reasons;
|
|
216
|
+
}
|
|
217
|
+
function toAdrStatus(context) {
|
|
218
|
+
if (!context.adrRequirement.required) {
|
|
219
|
+
return 'not-required';
|
|
220
|
+
}
|
|
221
|
+
return context.adrRequirement.satisfied ? 'required-satisfied' : 'required-missing';
|
|
222
|
+
}
|
|
223
|
+
async function detectMissingSafetyControls(input) {
|
|
224
|
+
const { workspaceRoot, context } = input;
|
|
225
|
+
const triggerReasons = buildTriggerReasons(context);
|
|
226
|
+
const triggered = triggerReasons.length > 0;
|
|
227
|
+
const relatedRiskLevel = context.risk.level.toUpperCase();
|
|
228
|
+
const relatedEnforcementDecision = context.enforcement.enforcementDecision ?? context.enforcement.action.toUpperCase();
|
|
229
|
+
const relatedAdrStatus = toAdrStatus(context);
|
|
230
|
+
if (!triggered) {
|
|
231
|
+
return {
|
|
232
|
+
modelVersion: 1,
|
|
233
|
+
applicable: false,
|
|
234
|
+
triggered: false,
|
|
235
|
+
triggerReasons: [],
|
|
236
|
+
controlsChecked: [],
|
|
237
|
+
missingControls: [],
|
|
238
|
+
findings: [],
|
|
239
|
+
summary: 'Safety controls review not triggered for this run.',
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const rollbackPath = getRollbackPlanPath(workspaceRoot);
|
|
243
|
+
const featureFlagsPath = getFeatureFlagsPath(workspaceRoot);
|
|
244
|
+
const rollbackEvidence = await rollbackPlanPresent(rollbackPath);
|
|
245
|
+
const featureFlagsEvidence = await featureFlagsPresent(featureFlagsPath);
|
|
246
|
+
const findings = [];
|
|
247
|
+
const controlsChecked = [];
|
|
248
|
+
const adrRequired = context.adrRequirement.required;
|
|
249
|
+
const adrMissing = adrRequired && !context.adrRequirement.satisfied;
|
|
250
|
+
controlsChecked.push({
|
|
251
|
+
controlType: 'adr',
|
|
252
|
+
label: 'ADR coverage',
|
|
253
|
+
required: adrRequired,
|
|
254
|
+
status: !adrRequired ? 'not-applicable' : adrMissing ? 'missing' : 'present',
|
|
255
|
+
description: adrRequired
|
|
256
|
+
? 'ADR requirement signal from current policy/enforcement context.'
|
|
257
|
+
: 'ADR follow-up not required for this run.',
|
|
258
|
+
});
|
|
259
|
+
if (adrMissing) {
|
|
260
|
+
findings.push({
|
|
261
|
+
ruleId: 'AP-SAFE-001',
|
|
262
|
+
title: 'Missing ADR coverage for risky architecture change',
|
|
263
|
+
severity: 'warning',
|
|
264
|
+
category: 'architecture',
|
|
265
|
+
controlType: 'adr',
|
|
266
|
+
message: 'ADR is required but no satisfying ADR coverage was detected.',
|
|
267
|
+
whyItMatters: 'Risky architecture changes should be documented to keep decisions, tradeoffs, and approvals reviewable.',
|
|
268
|
+
howToFix: 'Create or update the ADR referenced by ArchPilot ADR requirement guidance, then re-run validation.',
|
|
269
|
+
relatedRiskLevel,
|
|
270
|
+
relatedEnforcementDecision,
|
|
271
|
+
relatedAdrStatus,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
controlsChecked.push({
|
|
275
|
+
controlType: 'rollback',
|
|
276
|
+
label: 'Rollback plan',
|
|
277
|
+
required: true,
|
|
278
|
+
status: rollbackEvidence.present ? 'present' : 'missing',
|
|
279
|
+
description: 'Rollback evidence artifact is required when safety controls review is triggered.',
|
|
280
|
+
evidencePath: exports.rollbackPlanPathRelative,
|
|
281
|
+
...(rollbackEvidence.detail ? { evidenceDetail: rollbackEvidence.detail } : {}),
|
|
282
|
+
});
|
|
283
|
+
if (!rollbackEvidence.present) {
|
|
284
|
+
findings.push({
|
|
285
|
+
ruleId: 'AP-SAFE-002',
|
|
286
|
+
title: 'Missing rollback plan for risky architecture change',
|
|
287
|
+
severity: 'warning',
|
|
288
|
+
category: 'architecture',
|
|
289
|
+
controlType: 'rollback',
|
|
290
|
+
message: 'Rollback evidence is missing for a risky architecture change context.',
|
|
291
|
+
whyItMatters: 'Rollback preparation reduces governance and operational risk when architecture changes need fast reversal.',
|
|
292
|
+
howToFix: 'Create .archpilot/rollout/rollback-plan.md with trigger conditions, rollback steps, owner, and validation steps.',
|
|
293
|
+
evidencePath: exports.rollbackPlanPathRelative,
|
|
294
|
+
relatedRiskLevel,
|
|
295
|
+
relatedEnforcementDecision,
|
|
296
|
+
relatedAdrStatus,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
controlsChecked.push({
|
|
300
|
+
controlType: 'feature-flag',
|
|
301
|
+
label: 'Feature flag / staged rollout evidence',
|
|
302
|
+
required: true,
|
|
303
|
+
status: !featureFlagsEvidence.present
|
|
304
|
+
? 'missing'
|
|
305
|
+
: featureFlagsEvidence.valid
|
|
306
|
+
? 'present'
|
|
307
|
+
: 'invalid',
|
|
308
|
+
description: 'Feature flag or staged rollout evidence artifact is required when safety controls review is triggered.',
|
|
309
|
+
evidencePath: exports.featureFlagsPathRelative,
|
|
310
|
+
...(featureFlagsEvidence.detail ? { evidenceDetail: featureFlagsEvidence.detail } : {}),
|
|
311
|
+
});
|
|
312
|
+
if (!featureFlagsEvidence.present || !featureFlagsEvidence.valid) {
|
|
313
|
+
findings.push({
|
|
314
|
+
ruleId: 'AP-SAFE-003',
|
|
315
|
+
title: 'Missing feature-flag or staged rollout evidence for risky architecture change',
|
|
316
|
+
severity: 'warning',
|
|
317
|
+
category: 'architecture',
|
|
318
|
+
controlType: 'feature-flag',
|
|
319
|
+
message: !featureFlagsEvidence.present
|
|
320
|
+
? 'Feature flag/staged rollout evidence artifact is missing.'
|
|
321
|
+
: `Feature flag/staged rollout evidence is invalid: ${featureFlagsEvidence.detail ?? 'invalid configuration'}.`,
|
|
322
|
+
whyItMatters: 'Staged rollout controls reduce blast radius when introducing architecture changes with uncertain impact.',
|
|
323
|
+
howToFix: 'Create or fix .archpilot/rollout/feature-flags.json with enabled=true or non-empty flags[] entries.',
|
|
324
|
+
evidencePath: exports.featureFlagsPathRelative,
|
|
325
|
+
relatedRiskLevel,
|
|
326
|
+
relatedEnforcementDecision,
|
|
327
|
+
relatedAdrStatus,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
modelVersion: 1,
|
|
332
|
+
applicable: true,
|
|
333
|
+
triggered: true,
|
|
334
|
+
triggerReasons,
|
|
335
|
+
controlsChecked,
|
|
336
|
+
missingControls: [...new Set(findings.map((finding) => finding.controlType))],
|
|
337
|
+
findings,
|
|
338
|
+
summary: findings.length === 0
|
|
339
|
+
? 'Safety controls review triggered; required controls are present.'
|
|
340
|
+
: `Safety controls review triggered; ${findings.length} missing control finding(s) detected.`,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=safetyControlsDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safetyControlsDetection.js","sourceRoot":"","sources":["../../../../../core/src/reporting/safetyControlsDetection.ts"],"names":[],"mappings":"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"}
|