@archpilotlabs/archpilot 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/dist/archpilot-cli.js +516 -105
  2. package/dist/cli/src/archpilot-cli.js +5523 -0
  3. package/dist/cli/src/archpilot-cli.js.map +1 -0
  4. package/dist/core/src/adr/adrLoader.js +97 -0
  5. package/dist/core/src/adr/adrLoader.js.map +1 -0
  6. package/dist/core/src/adr/adrParser.js +77 -0
  7. package/dist/core/src/adr/adrParser.js.map +1 -0
  8. package/dist/core/src/adr/adrTemplate.js +45 -0
  9. package/dist/core/src/adr/adrTemplate.js.map +1 -0
  10. package/dist/core/src/adr/adrTypes.js +3 -0
  11. package/dist/core/src/adr/adrTypes.js.map +1 -0
  12. package/dist/core/src/adr/adrValidation.js +160 -0
  13. package/dist/core/src/adr/adrValidation.js.map +1 -0
  14. package/dist/core/src/adr/index.js +9 -0
  15. package/dist/core/src/adr/index.js.map +1 -0
  16. package/dist/core/src/adrManagement.js +174 -0
  17. package/dist/core/src/adrManagement.js.map +1 -0
  18. package/dist/core/src/adrRequirementStatus.js +62 -0
  19. package/dist/core/src/adrRequirementStatus.js.map +1 -0
  20. package/dist/core/src/adrScaffoldGeneration.js +325 -0
  21. package/dist/core/src/adrScaffoldGeneration.js.map +1 -0
  22. package/dist/core/src/apiDesignAnalysis.js +869 -0
  23. package/dist/core/src/apiDesignAnalysis.js.map +1 -0
  24. package/dist/core/src/applicationLayeringAnalysis.js +920 -0
  25. package/dist/core/src/applicationLayeringAnalysis.js.map +1 -0
  26. package/dist/core/src/applyRulePack.js +117 -0
  27. package/dist/core/src/applyRulePack.js.map +1 -0
  28. package/dist/core/src/architectureBaseline.js +271 -0
  29. package/dist/core/src/architectureBaseline.js.map +1 -0
  30. package/dist/core/src/architectureComponentDiscoveryDefaults.js +139 -0
  31. package/dist/core/src/architectureComponentDiscoveryDefaults.js.map +1 -0
  32. package/dist/core/src/architectureDependencyContext.js +316 -0
  33. package/dist/core/src/architectureDependencyContext.js.map +1 -0
  34. package/dist/core/src/architectureDriftDetection.js +96 -0
  35. package/dist/core/src/architectureDriftDetection.js.map +1 -0
  36. package/dist/core/src/architectureDriftTimeline.js +221 -0
  37. package/dist/core/src/architectureDriftTimeline.js.map +1 -0
  38. package/dist/core/src/architectureGovernanceBaseline.js +469 -0
  39. package/dist/core/src/architectureGovernanceBaseline.js.map +1 -0
  40. package/dist/core/src/architectureHealthHistory.js +208 -0
  41. package/dist/core/src/architectureHealthHistory.js.map +1 -0
  42. package/dist/core/src/architectureHealthScore.js +657 -0
  43. package/dist/core/src/architectureHealthScore.js.map +1 -0
  44. package/dist/core/src/architectureInit.js +826 -0
  45. package/dist/core/src/architectureInit.js.map +1 -0
  46. package/dist/core/src/architectureMap.js +727 -0
  47. package/dist/core/src/architectureMap.js.map +1 -0
  48. package/dist/core/src/architectureMigrationPreview.js +467 -0
  49. package/dist/core/src/architectureMigrationPreview.js.map +1 -0
  50. package/dist/core/src/architectureModelRefresh.js +209 -0
  51. package/dist/core/src/architectureModelRefresh.js.map +1 -0
  52. package/dist/core/src/architectureReportWorkflow.js +139 -0
  53. package/dist/core/src/architectureReportWorkflow.js.map +1 -0
  54. package/dist/core/src/architectureValidation.js +3879 -0
  55. package/dist/core/src/architectureValidation.js.map +1 -0
  56. package/dist/core/src/architectureWorkspaceModel.js +166 -0
  57. package/dist/core/src/architectureWorkspaceModel.js.map +1 -0
  58. package/dist/core/src/authorizationTenantAnalysis.js +652 -0
  59. package/dist/core/src/authorizationTenantAnalysis.js.map +1 -0
  60. package/dist/core/src/bootstrapArchitectureConfig.js +150 -0
  61. package/dist/core/src/bootstrapArchitectureConfig.js.map +1 -0
  62. package/dist/core/src/changeRisk/changeRiskAssessment.js +251 -0
  63. package/dist/core/src/changeRisk/changeRiskAssessment.js.map +1 -0
  64. package/dist/core/src/changeRisk/changeRiskTypes.js +3 -0
  65. package/dist/core/src/changeRisk/changeRiskTypes.js.map +1 -0
  66. package/dist/core/src/changeRisk/index.js +6 -0
  67. package/dist/core/src/changeRisk/index.js.map +1 -0
  68. package/dist/core/src/ci/githubInlineAnnotations.js +245 -0
  69. package/dist/core/src/ci/githubInlineAnnotations.js.map +1 -0
  70. package/dist/core/src/ci/githubPrCommentAdapter.js +232 -0
  71. package/dist/core/src/ci/githubPrCommentAdapter.js.map +1 -0
  72. package/dist/core/src/ciWorkflowTemplates.js +1042 -0
  73. package/dist/core/src/ciWorkflowTemplates.js.map +1 -0
  74. package/dist/core/src/compliance/complianceExportBuilder.js +122 -0
  75. package/dist/core/src/compliance/complianceExportBuilder.js.map +1 -0
  76. package/dist/core/src/compliance/complianceExportTypes.js +3 -0
  77. package/dist/core/src/compliance/complianceExportTypes.js.map +1 -0
  78. package/dist/core/src/compliance/complianceExportWriter.js +48 -0
  79. package/dist/core/src/compliance/complianceExportWriter.js.map +1 -0
  80. package/dist/core/src/compliance/complianceRulePackResolver.js +62 -0
  81. package/dist/core/src/compliance/complianceRulePackResolver.js.map +1 -0
  82. package/dist/core/src/config/index.js +17 -0
  83. package/dist/core/src/config/index.js.map +1 -0
  84. package/dist/core/src/config/projectConfig.js +224 -0
  85. package/dist/core/src/config/projectConfig.js.map +1 -0
  86. package/dist/core/src/config/projectIdentity.js +160 -0
  87. package/dist/core/src/config/projectIdentity.js.map +1 -0
  88. package/dist/core/src/dataQueryRiskDetection.js +1203 -0
  89. package/dist/core/src/dataQueryRiskDetection.js.map +1 -0
  90. package/dist/core/src/dependencyValidation.js +2557 -0
  91. package/dist/core/src/dependencyValidation.js.map +1 -0
  92. package/dist/core/src/discoverAdrs.js +15 -0
  93. package/dist/core/src/discoverAdrs.js.map +1 -0
  94. package/dist/core/src/drift/driftComparator.js +49 -0
  95. package/dist/core/src/drift/driftComparator.js.map +1 -0
  96. package/dist/core/src/drift/driftSnapshotLoader.js +136 -0
  97. package/dist/core/src/drift/driftSnapshotLoader.js.map +1 -0
  98. package/dist/core/src/drift/driftSnapshotTypes.js +3 -0
  99. package/dist/core/src/drift/driftSnapshotTypes.js.map +1 -0
  100. package/dist/core/src/drift/driftSnapshotWriter.js +48 -0
  101. package/dist/core/src/drift/driftSnapshotWriter.js.map +1 -0
  102. package/dist/core/src/drift/index.js +6 -0
  103. package/dist/core/src/drift/index.js.map +1 -0
  104. package/dist/core/src/eventArchitectureAnalysis.js +925 -0
  105. package/dist/core/src/eventArchitectureAnalysis.js.map +1 -0
  106. package/dist/core/src/findingTargetResolution.js +117 -0
  107. package/dist/core/src/findingTargetResolution.js.map +1 -0
  108. package/dist/core/src/generateArchitectureDiagrams.js +57 -0
  109. package/dist/core/src/generateArchitectureDiagrams.js.map +1 -0
  110. package/dist/core/src/generateImpactAnalysis.js +366 -0
  111. package/dist/core/src/generateImpactAnalysis.js.map +1 -0
  112. package/dist/core/src/generateOnboardingDocs.js +262 -0
  113. package/dist/core/src/generateOnboardingDocs.js.map +1 -0
  114. package/dist/core/src/governance/cloudConnection.js +203 -0
  115. package/dist/core/src/governance/cloudConnection.js.map +1 -0
  116. package/dist/core/src/governance/governanceContracts.js +129 -0
  117. package/dist/core/src/governance/governanceContracts.js.map +1 -0
  118. package/dist/core/src/governance/governanceGitMetadata.js +78 -0
  119. package/dist/core/src/governance/governanceGitMetadata.js.map +1 -0
  120. package/dist/core/src/governance/governanceUploadClient.js +119 -0
  121. package/dist/core/src/governance/governanceUploadClient.js.map +1 -0
  122. package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js +155 -0
  123. package/dist/core/src/governance/governanceUploadLimitErrorFormatting.js.map +1 -0
  124. package/dist/core/src/governance/governanceUploadPayload.js +439 -0
  125. package/dist/core/src/governance/governanceUploadPayload.js.map +1 -0
  126. package/dist/core/src/governance/runGovernanceUpload.js +103 -0
  127. package/dist/core/src/governance/runGovernanceUpload.js.map +1 -0
  128. package/dist/core/src/impactAnalysisEngine.js +376 -0
  129. package/dist/core/src/impactAnalysisEngine.js.map +1 -0
  130. package/dist/core/src/initializationState.js +99 -0
  131. package/dist/core/src/initializationState.js.map +1 -0
  132. package/dist/core/src/managedArtifacts.js +151 -0
  133. package/dist/core/src/managedArtifacts.js.map +1 -0
  134. package/dist/core/src/moduleContractValidation.js +266 -0
  135. package/dist/core/src/moduleContractValidation.js.map +1 -0
  136. package/dist/core/src/moduleContractsGenerator.js +337 -0
  137. package/dist/core/src/moduleContractsGenerator.js.map +1 -0
  138. package/dist/core/src/moduleDiscovery.js +416 -0
  139. package/dist/core/src/moduleDiscovery.js.map +1 -0
  140. package/dist/core/src/moduleScope.js +426 -0
  141. package/dist/core/src/moduleScope.js.map +1 -0
  142. package/dist/core/src/onboardingGuidance.js +74 -0
  143. package/dist/core/src/onboardingGuidance.js.map +1 -0
  144. package/dist/core/src/operationalLogging.js +7 -0
  145. package/dist/core/src/operationalLogging.js.map +1 -0
  146. package/dist/core/src/packageVersion.js +52 -0
  147. package/dist/core/src/packageVersion.js.map +1 -0
  148. package/dist/core/src/policy/effectivePolicyResolver.js +91 -0
  149. package/dist/core/src/policy/effectivePolicyResolver.js.map +1 -0
  150. package/dist/core/src/policy/exceptionLoader.js +285 -0
  151. package/dist/core/src/policy/exceptionLoader.js.map +1 -0
  152. package/dist/core/src/policy/remotePolicyLoader.js +227 -0
  153. package/dist/core/src/policy/remotePolicyLoader.js.map +1 -0
  154. package/dist/core/src/policy/remotePolicyTypes.js +3 -0
  155. package/dist/core/src/policy/remotePolicyTypes.js.map +1 -0
  156. package/dist/core/src/policy/riskPolicyConfig.js +206 -0
  157. package/dist/core/src/policy/riskPolicyConfig.js.map +1 -0
  158. package/dist/core/src/policy/riskPolicyEnforcement.js +203 -0
  159. package/dist/core/src/policy/riskPolicyEnforcement.js.map +1 -0
  160. package/dist/core/src/policy/riskPolicyExitCode.js +16 -0
  161. package/dist/core/src/policy/riskPolicyExitCode.js.map +1 -0
  162. package/dist/core/src/policy/riskPolicyInitializer.js +90 -0
  163. package/dist/core/src/policy/riskPolicyInitializer.js.map +1 -0
  164. package/dist/core/src/quickFix/quickFixEngine.js +132 -0
  165. package/dist/core/src/quickFix/quickFixEngine.js.map +1 -0
  166. package/dist/core/src/quickFix/quickFixMessaging.js +15 -0
  167. package/dist/core/src/quickFix/quickFixMessaging.js.map +1 -0
  168. package/dist/core/src/quickFix/quickFixProviders.js +87 -0
  169. package/dist/core/src/quickFix/quickFixProviders.js.map +1 -0
  170. package/dist/core/src/quickFix/quickFixTypes.js +3 -0
  171. package/dist/core/src/quickFix/quickFixTypes.js.map +1 -0
  172. package/dist/core/src/remediation/fileHelpers.js +86 -0
  173. package/dist/core/src/remediation/fileHelpers.js.map +1 -0
  174. package/dist/core/src/remediation/fixRegistry.js +645 -0
  175. package/dist/core/src/remediation/fixRegistry.js.map +1 -0
  176. package/dist/core/src/remediation/index.js +8 -0
  177. package/dist/core/src/remediation/index.js.map +1 -0
  178. package/dist/core/src/remediation/remediationEngine.js +207 -0
  179. package/dist/core/src/remediation/remediationEngine.js.map +1 -0
  180. package/dist/core/src/reporting/adrReporter.js +59 -0
  181. package/dist/core/src/reporting/adrReporter.js.map +1 -0
  182. package/dist/core/src/reporting/architectureBaselineReporter.js +64 -0
  183. package/dist/core/src/reporting/architectureBaselineReporter.js.map +1 -0
  184. package/dist/core/src/reporting/architectureDiagramReporter.js +148 -0
  185. package/dist/core/src/reporting/architectureDiagramReporter.js.map +1 -0
  186. package/dist/core/src/reporting/architectureDriftTimelineReporter.js +44 -0
  187. package/dist/core/src/reporting/architectureDriftTimelineReporter.js.map +1 -0
  188. package/dist/core/src/reporting/architectureHealthHistoryReporter.js +51 -0
  189. package/dist/core/src/reporting/architectureHealthHistoryReporter.js.map +1 -0
  190. package/dist/core/src/reporting/architectureMapReporter.js +228 -0
  191. package/dist/core/src/reporting/architectureMapReporter.js.map +1 -0
  192. package/dist/core/src/reporting/architecturePrCommentReporter.js +324 -0
  193. package/dist/core/src/reporting/architecturePrCommentReporter.js.map +1 -0
  194. package/dist/core/src/reporting/architecturePrReviewReporter.js +389 -0
  195. package/dist/core/src/reporting/architecturePrReviewReporter.js.map +1 -0
  196. package/dist/core/src/reporting/architectureReportArtifacts.js +166 -0
  197. package/dist/core/src/reporting/architectureReportArtifacts.js.map +1 -0
  198. package/dist/core/src/reporting/architectureReviewReportGenerator.js +382 -0
  199. package/dist/core/src/reporting/architectureReviewReportGenerator.js.map +1 -0
  200. package/dist/core/src/reporting/architectureReviewReporter.js +1633 -0
  201. package/dist/core/src/reporting/architectureReviewReporter.js.map +1 -0
  202. package/dist/core/src/reporting/architectureRiskAssessment.js +101 -0
  203. package/dist/core/src/reporting/architectureRiskAssessment.js.map +1 -0
  204. package/dist/core/src/reporting/architectureScoreBadge.js +177 -0
  205. package/dist/core/src/reporting/architectureScoreBadge.js.map +1 -0
  206. package/dist/core/src/reporting/architectureSupplementalReporters.js +124 -0
  207. package/dist/core/src/reporting/architectureSupplementalReporters.js.map +1 -0
  208. package/dist/core/src/reporting/changeRiskAssessment.js +6 -0
  209. package/dist/core/src/reporting/changeRiskAssessment.js.map +1 -0
  210. package/dist/core/src/reporting/changeRiskTypes.js +3 -0
  211. package/dist/core/src/reporting/changeRiskTypes.js.map +1 -0
  212. package/dist/core/src/reporting/impactAnalysisReporter.js +111 -0
  213. package/dist/core/src/reporting/impactAnalysisReporter.js.map +1 -0
  214. package/dist/core/src/reporting/onboardingDocsReporter.js +113 -0
  215. package/dist/core/src/reporting/onboardingDocsReporter.js.map +1 -0
  216. package/dist/core/src/reporting/rulePackReporter.js +61 -0
  217. package/dist/core/src/reporting/rulePackReporter.js.map +1 -0
  218. package/dist/core/src/reporting/safetyControlsDetection.js +343 -0
  219. package/dist/core/src/reporting/safetyControlsDetection.js.map +1 -0
  220. package/dist/core/src/resolveRuleAdrs.js +31 -0
  221. package/dist/core/src/resolveRuleAdrs.js.map +1 -0
  222. package/dist/core/src/reviewGenerationWorkflow.js +220 -0
  223. package/dist/core/src/reviewGenerationWorkflow.js.map +1 -0
  224. package/dist/core/src/rulePacks/index.js +17 -0
  225. package/dist/core/src/rulePacks/index.js.map +1 -0
  226. package/dist/core/src/rulePacks/layeredMonolithRulePack.js +45 -0
  227. package/dist/core/src/rulePacks/layeredMonolithRulePack.js.map +1 -0
  228. package/dist/core/src/rulePacks/modularMonolithRulePack.js +41 -0
  229. package/dist/core/src/rulePacks/modularMonolithRulePack.js.map +1 -0
  230. package/dist/core/src/rulePacks/types.js +3 -0
  231. package/dist/core/src/rulePacks/types.js.map +1 -0
  232. package/dist/core/src/setupNextSteps.js +939 -0
  233. package/dist/core/src/setupNextSteps.js.map +1 -0
  234. package/dist/core/src/setupRefresh.js +152 -0
  235. package/dist/core/src/setupRefresh.js.map +1 -0
  236. package/dist/core/src/smartInit/apiDbHintDetection.js +836 -0
  237. package/dist/core/src/smartInit/apiDbHintDetection.js.map +1 -0
  238. package/dist/core/src/smartInit/architectureProposalBuilder.js +1215 -0
  239. package/dist/core/src/smartInit/architectureProposalBuilder.js.map +1 -0
  240. package/dist/core/src/smartInit/architectureStyleDetection.js +472 -0
  241. package/dist/core/src/smartInit/architectureStyleDetection.js.map +1 -0
  242. package/dist/core/src/smartInit/archpilotIgnore.js +139 -0
  243. package/dist/core/src/smartInit/archpilotIgnore.js.map +1 -0
  244. package/dist/core/src/smartInit/componentDetection.js +1084 -0
  245. package/dist/core/src/smartInit/componentDetection.js.map +1 -0
  246. package/dist/core/src/smartInit/implementationProfileResolution.js +53 -0
  247. package/dist/core/src/smartInit/implementationProfileResolution.js.map +1 -0
  248. package/dist/core/src/smartInit/index.js +31 -0
  249. package/dist/core/src/smartInit/index.js.map +1 -0
  250. package/dist/core/src/smartInit/moduleDetection.js +982 -0
  251. package/dist/core/src/smartInit/moduleDetection.js.map +1 -0
  252. package/dist/core/src/smartInit/projectKindDetection.js +437 -0
  253. package/dist/core/src/smartInit/projectKindDetection.js.map +1 -0
  254. package/dist/core/src/smartInit/repoTopologyDetection.js +470 -0
  255. package/dist/core/src/smartInit/repoTopologyDetection.js.map +1 -0
  256. package/dist/core/src/smartInit/runContext.js +112 -0
  257. package/dist/core/src/smartInit/runContext.js.map +1 -0
  258. package/dist/core/src/smartInit/smartInitEngine.js +94 -0
  259. package/dist/core/src/smartInit/smartInitEngine.js.map +1 -0
  260. package/dist/core/src/smartInit/stackDetection.js +503 -0
  261. package/dist/core/src/smartInit/stackDetection.js.map +1 -0
  262. package/dist/core/src/smartInit/toolingHintDetection.js +345 -0
  263. package/dist/core/src/smartInit/toolingHintDetection.js.map +1 -0
  264. package/dist/core/src/sourceScopeClassification.js +83 -0
  265. package/dist/core/src/sourceScopeClassification.js.map +1 -0
  266. package/dist/core/src/stackAdapters.js +2475 -0
  267. package/dist/core/src/stackAdapters.js.map +1 -0
  268. package/dist/core/src/stackMetadata.js +157 -0
  269. package/dist/core/src/stackMetadata.js.map +1 -0
  270. package/dist/core/src/suppressions/index.js +3 -0
  271. package/dist/core/src/suppressions/index.js.map +1 -0
  272. package/dist/core/src/suppressions/suppressionReporter.js +38 -0
  273. package/dist/core/src/suppressions/suppressionReporter.js.map +1 -0
  274. package/dist/core/src/suppressions/suppressionTypes.js +3 -0
  275. package/dist/core/src/suppressions/suppressionTypes.js.map +1 -0
  276. package/dist/core/src/suppressions/suppressionValidator.js +119 -0
  277. package/dist/core/src/suppressions/suppressionValidator.js.map +1 -0
  278. package/dist/core/src/transactionDomainAnalysis.js +1416 -0
  279. package/dist/core/src/transactionDomainAnalysis.js.map +1 -0
  280. package/dist/core/src/validation/changedFilesResolver.js +165 -0
  281. package/dist/core/src/validation/changedFilesResolver.js.map +1 -0
  282. package/dist/core/src/validationProfiling.js +33 -0
  283. package/dist/core/src/validationProfiling.js.map +1 -0
  284. package/dist/core/src/validationRuleExplanations.js +69 -0
  285. package/dist/core/src/validationRuleExplanations.js.map +1 -0
  286. package/dist/core/src/validationSourceInventory.js +200 -0
  287. package/dist/core/src/validationSourceInventory.js.map +1 -0
  288. package/dist/core/src/validationSuppressions.js +231 -0
  289. package/dist/core/src/validationSuppressions.js.map +1 -0
  290. package/dist/core/src/validationTypeScriptAstCache.js +82 -0
  291. package/dist/core/src/validationTypeScriptAstCache.js.map +1 -0
  292. package/dist/core/src/validationWorkflow.js +222 -0
  293. package/dist/core/src/validationWorkflow.js.map +1 -0
  294. package/dist/core/src/workspaceRoot.js +68 -0
  295. package/dist/core/src/workspaceRoot.js.map +1 -0
  296. package/package.json +1 -1
@@ -0,0 +1,657 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.architectureHealthCategoryWeights = exports.defaultArchitectureHealthCategories = void 0;
4
+ exports.summarizeArchitectureScoreProblems = summarizeArchitectureScoreProblems;
5
+ exports.calculateArchitectureHealthScore = calculateArchitectureHealthScore;
6
+ exports.defaultArchitectureHealthCategories = [
7
+ 'architecture',
8
+ 'dependency',
9
+ 'api',
10
+ 'database',
11
+ 'documentation',
12
+ 'security',
13
+ ];
14
+ exports.architectureHealthCategoryWeights = {
15
+ architecture: 0.25,
16
+ dependency: 0.20,
17
+ security: 0.20,
18
+ database: 0.15,
19
+ api: 0.10,
20
+ documentation: 0.10,
21
+ };
22
+ const qualityErrorPenalty = 10;
23
+ const qualityWarningPenalty = 4;
24
+ const qualityInfoPenalty = 1;
25
+ const readinessSetupGapErrorPenalty = 6;
26
+ const readinessSetupGapWarningPenalty = 3;
27
+ const readinessSetupGapInfoPenalty = 1;
28
+ const overallSetupGapErrorPenalty = 2;
29
+ const overallSetupGapWarningPenalty = 1;
30
+ const overallSetupGapInfoPenalty = 1;
31
+ const minScore = 0;
32
+ const maxScore = 100;
33
+ const cycleRuleIds = new Set(['AP-DEP-001', 'AP-DEP-008']);
34
+ const severeDependencyRuleIds = new Set([
35
+ 'AP-DEP-001',
36
+ 'AP-DEP-002',
37
+ 'AP-DEP-003',
38
+ 'AP-DEP-005',
39
+ 'AP-DEP-008',
40
+ 'AP-DEP-010',
41
+ ]);
42
+ const lowWeightHeuristicRuleIds = new Set([
43
+ 'AP-APP-001',
44
+ 'AP-APP-002',
45
+ 'AP-APP-004',
46
+ 'AP-APP-005',
47
+ 'AP-AUTH-001',
48
+ 'AP-AUTH-002',
49
+ 'AP-AUTH-003',
50
+ 'AP-TEN-001',
51
+ 'AP-TEN-004',
52
+ 'AP-TXN-001',
53
+ 'AP-TXN-002',
54
+ 'AP-TXN-003',
55
+ 'AP-TXN-004',
56
+ 'AP-DOM-001',
57
+ 'AP-DOM-004',
58
+ 'AP-API-010',
59
+ 'AP-API-011',
60
+ 'AP-API-012',
61
+ 'AP-API-013',
62
+ 'AP-API-014',
63
+ 'AP-DQR-005',
64
+ 'AP-DQR-006',
65
+ 'AP-DQR-007',
66
+ 'AP-DQR-008',
67
+ 'AP-EVT-001',
68
+ 'AP-EVT-002',
69
+ 'AP-EVT-003',
70
+ 'AP-EVT-004',
71
+ ]);
72
+ const mediumWeightHeuristicRuleIds = new Set([
73
+ 'AP-APP-003',
74
+ 'AP-TEN-002',
75
+ 'AP-TEN-003',
76
+ 'AP-DOM-002',
77
+ 'AP-DOM-003',
78
+ 'AP-DOM-005',
79
+ 'AP-API-015',
80
+ ]);
81
+ const warningFamilyPenaltyCap = 18;
82
+ const heuristicWarningFamilyPenaltyCap = 12;
83
+ const architectureSmellFamilyPenaltyCap = 7;
84
+ function clampScore(value) {
85
+ if (value < minScore) {
86
+ return minScore;
87
+ }
88
+ if (value > maxScore) {
89
+ return maxScore;
90
+ }
91
+ return value;
92
+ }
93
+ function getSeverityRank(severity) {
94
+ if (severity === 'error') {
95
+ return 0;
96
+ }
97
+ if (severity === 'warning') {
98
+ return 1;
99
+ }
100
+ return 2;
101
+ }
102
+ function getRuleFamily(ruleId) {
103
+ if (!ruleId) {
104
+ return 'unknown';
105
+ }
106
+ const match = /^AP-[A-Z]+/u.exec(ruleId);
107
+ return match?.[0] ?? ruleId;
108
+ }
109
+ function extractProblemIdentity(deductionKey) {
110
+ if (!deductionKey) {
111
+ return '';
112
+ }
113
+ if (deductionKey.includes('|')) {
114
+ const parts = deductionKey.split('|');
115
+ if (parts[0] === 'quality' || parts[0] === 'setup' || parts[0] === 'guidance' || parts[0] === 'passed') {
116
+ parts.shift();
117
+ }
118
+ if (parts[0]?.startsWith('AP-')) {
119
+ parts.shift();
120
+ }
121
+ return parts.join('|');
122
+ }
123
+ const parts = deductionKey.split(':');
124
+ if (parts[0] === 'quality' || parts[0] === 'setup' || parts[0] === 'guidance' || parts[0] === 'passed') {
125
+ parts.shift();
126
+ }
127
+ if (parts[0]?.startsWith('AP-')) {
128
+ parts.shift();
129
+ }
130
+ return parts.join(':');
131
+ }
132
+ function normalizeProblemIdentity(result, identity) {
133
+ const normalized = identity.replace(/\\/g, '/').trim().toLowerCase();
134
+ if (!normalized) {
135
+ return '';
136
+ }
137
+ if (normalized.includes('|')) {
138
+ const parts = normalized.split('|');
139
+ if (result.category === 'dependency' &&
140
+ parts.length >= 4 &&
141
+ /^\d+$/u.test(parts[3] ?? '')) {
142
+ return [parts[0], parts[1], parts[2], parts[4] ?? ''].join('|');
143
+ }
144
+ }
145
+ return normalized;
146
+ }
147
+ function buildQualityProblemClusterKey(result) {
148
+ const family = getRuleFamily(result.ruleId);
149
+ const identity = normalizeProblemIdentity(result, extractProblemIdentity(result.deductionKey));
150
+ if (typeof result.ruleId === 'string' && cycleRuleIds.has(result.ruleId)) {
151
+ return ['quality', result.category, family, 'cycle', identity || 'shared-root-cause'].join('|');
152
+ }
153
+ if (result.severity === 'warning') {
154
+ return ['quality', result.category, family, identity || result.ruleId || 'generic'].join('|');
155
+ }
156
+ return ['quality', result.category, family, result.ruleId ?? 'unknown', identity || 'generic'].join('|');
157
+ }
158
+ function getClusterWeight(cluster, index) {
159
+ if (index === 0) {
160
+ return 1;
161
+ }
162
+ if (cluster.severity === 'error') {
163
+ return Math.max(0.35, 0.85 - index * 0.15);
164
+ }
165
+ if (cluster.isArchitectureSmell) {
166
+ return Math.max(0.15, 0.65 - index * 0.12);
167
+ }
168
+ if (cluster.isHeuristic) {
169
+ return Math.max(0.2, 0.75 - index * 0.12);
170
+ }
171
+ return Math.max(0.2, 0.8 - index * 0.12);
172
+ }
173
+ function getFamilyPenaltyCap(cluster) {
174
+ if (cluster.severity !== 'warning') {
175
+ return undefined;
176
+ }
177
+ if (cluster.isArchitectureSmell) {
178
+ return architectureSmellFamilyPenaltyCap;
179
+ }
180
+ if (cluster.isHeuristic) {
181
+ return heuristicWarningFamilyPenaltyCap;
182
+ }
183
+ return warningFamilyPenaltyCap;
184
+ }
185
+ function summarizeArchitectureScoreProblems(input) {
186
+ const qualityResults = input.results.filter((result) => !result.passed && (result.impact ?? 'quality') === 'quality');
187
+ const clusterMap = new Map();
188
+ for (const result of qualityResults) {
189
+ const key = buildQualityProblemClusterKey(result);
190
+ const family = getRuleFamily(result.ruleId);
191
+ const existing = clusterMap.get(key);
192
+ const resultPenalty = getQualityPenaltyForResult(result);
193
+ if (existing) {
194
+ existing.resultCount += 1;
195
+ if (getSeverityRank(result.severity) < getSeverityRank(existing.severity)) {
196
+ existing.severity = result.severity;
197
+ }
198
+ existing.basePenalty = Math.max(existing.basePenalty, resultPenalty);
199
+ if (typeof result.ruleId === 'string') {
200
+ existing.ruleIds.add(result.ruleId);
201
+ }
202
+ existing.isHeuristic = existing.isHeuristic || isHeuristicRuleId(result.ruleId);
203
+ existing.isArchitectureSmell =
204
+ existing.isArchitectureSmell || isArchitectureSmellWarningRuleId(result.ruleId);
205
+ continue;
206
+ }
207
+ clusterMap.set(key, {
208
+ key,
209
+ category: result.category,
210
+ family,
211
+ severity: result.severity,
212
+ impact: result.impact ?? 'quality',
213
+ ruleIds: new Set(typeof result.ruleId === 'string' ? [result.ruleId] : []),
214
+ resultCount: 1,
215
+ basePenalty: resultPenalty,
216
+ isHeuristic: isHeuristicRuleId(result.ruleId),
217
+ isArchitectureSmell: isArchitectureSmellWarningRuleId(result.ruleId),
218
+ });
219
+ }
220
+ const familyGroups = new Map();
221
+ const preliminaryClusters = [...clusterMap.values()]
222
+ .sort((left, right) => {
223
+ const severityCompare = getSeverityRank(left.severity) - getSeverityRank(right.severity);
224
+ if (severityCompare !== 0) {
225
+ return severityCompare;
226
+ }
227
+ const categoryCompare = left.category.localeCompare(right.category);
228
+ if (categoryCompare !== 0) {
229
+ return categoryCompare;
230
+ }
231
+ const familyCompare = left.family.localeCompare(right.family);
232
+ if (familyCompare !== 0) {
233
+ return familyCompare;
234
+ }
235
+ return left.key.localeCompare(right.key);
236
+ })
237
+ .map((entry) => {
238
+ const confidenceBonus = Math.min(3, Math.max(0, entry.ruleIds.size - 1));
239
+ const duplicateBonus = Math.min(2, Math.max(0, Math.ceil(Math.log2(entry.resultCount)) - 1));
240
+ return {
241
+ key: entry.key,
242
+ category: entry.category,
243
+ family: entry.family,
244
+ severity: entry.severity,
245
+ impact: entry.impact,
246
+ ruleIds: [...entry.ruleIds].sort((left, right) => left.localeCompare(right)),
247
+ resultCount: entry.resultCount,
248
+ penalty: entry.basePenalty + confidenceBonus + duplicateBonus,
249
+ isHeuristic: entry.isHeuristic,
250
+ isArchitectureSmell: entry.isArchitectureSmell,
251
+ };
252
+ });
253
+ for (const cluster of preliminaryClusters) {
254
+ const familyKey = `${cluster.category}|${cluster.family}`;
255
+ const existing = familyGroups.get(familyKey) ?? [];
256
+ existing.push(cluster);
257
+ familyGroups.set(familyKey, existing);
258
+ }
259
+ const clusters = [];
260
+ for (const group of [...familyGroups.entries()]
261
+ .sort(([left], [right]) => left.localeCompare(right))
262
+ .map(([, value]) => value)) {
263
+ const ordered = [...group].sort((left, right) => {
264
+ const severityCompare = getSeverityRank(left.severity) - getSeverityRank(right.severity);
265
+ if (severityCompare !== 0) {
266
+ return severityCompare;
267
+ }
268
+ if (left.penalty !== right.penalty) {
269
+ return right.penalty - left.penalty;
270
+ }
271
+ return left.key.localeCompare(right.key);
272
+ });
273
+ let appliedPenalty = 0;
274
+ for (const [index, cluster] of ordered.entries()) {
275
+ const weightedPenalty = Math.round(cluster.penalty * getClusterWeight(cluster, index));
276
+ const familyCap = getFamilyPenaltyCap(cluster);
277
+ const remainingCap = familyCap === undefined ? undefined : Math.max(0, familyCap - appliedPenalty);
278
+ const finalPenalty = remainingCap === undefined
279
+ ? weightedPenalty
280
+ : Math.min(weightedPenalty, remainingCap);
281
+ appliedPenalty += finalPenalty;
282
+ clusters.push({
283
+ ...cluster,
284
+ penalty: finalPenalty,
285
+ });
286
+ }
287
+ }
288
+ const qualityClusterCount = clusters.length;
289
+ const blockingClusterCount = clusters.filter((cluster) => cluster.severity === 'error').length;
290
+ const heuristicClusterCount = clusters.filter((cluster) => cluster.isHeuristic).length;
291
+ return {
292
+ clusters,
293
+ qualityClusterCount,
294
+ blockingClusterCount,
295
+ heuristicClusterCount,
296
+ };
297
+ }
298
+ function getOverallSetupGapPenaltyForSeverity(severity) {
299
+ if (severity === 'error') {
300
+ return overallSetupGapErrorPenalty;
301
+ }
302
+ if (severity === 'warning') {
303
+ return overallSetupGapWarningPenalty;
304
+ }
305
+ return overallSetupGapInfoPenalty;
306
+ }
307
+ function getAdditionalQualityPenalty(result) {
308
+ if (result.impact !== 'quality') {
309
+ return 0;
310
+ }
311
+ let penalty = result.severity === 'error' ? 2 : 0;
312
+ switch (result.ruleId) {
313
+ case 'AP-DEP-004':
314
+ penalty -= result.severity === 'error' ? 8 : 1;
315
+ break;
316
+ case 'AP-DEP-005':
317
+ penalty += 6;
318
+ break;
319
+ case 'AP-DEP-002':
320
+ case 'AP-DEP-003':
321
+ case 'AP-DEP-010':
322
+ penalty += 4;
323
+ break;
324
+ case 'AP-DEP-001':
325
+ case 'AP-DEP-008':
326
+ penalty += 5;
327
+ break;
328
+ default:
329
+ break;
330
+ }
331
+ return penalty;
332
+ }
333
+ function isHeuristicRuleId(ruleId) {
334
+ return (typeof ruleId === 'string' &&
335
+ (lowWeightHeuristicRuleIds.has(ruleId) || mediumWeightHeuristicRuleIds.has(ruleId)));
336
+ }
337
+ function isArchitectureSmellWarningRuleId(ruleId) {
338
+ return (typeof ruleId === 'string' &&
339
+ (/^AP-APP-/u.test(ruleId) || /^AP-DOM-/u.test(ruleId) || /^AP-TXN-/u.test(ruleId)));
340
+ }
341
+ function getQualityPenaltyForResult(result) {
342
+ if (result.severity === 'warning' && isArchitectureSmellWarningRuleId(result.ruleId)) {
343
+ return 1;
344
+ }
345
+ if (result.severity === 'warning' &&
346
+ typeof result.ruleId === 'string' &&
347
+ lowWeightHeuristicRuleIds.has(result.ruleId)) {
348
+ return 2;
349
+ }
350
+ if (result.severity === 'warning' &&
351
+ typeof result.ruleId === 'string' &&
352
+ mediumWeightHeuristicRuleIds.has(result.ruleId)) {
353
+ return 3;
354
+ }
355
+ let base = qualityInfoPenalty;
356
+ if (result.severity === 'error') {
357
+ base = qualityErrorPenalty;
358
+ }
359
+ else if (result.severity === 'warning') {
360
+ base = qualityWarningPenalty;
361
+ }
362
+ return base + getAdditionalQualityPenalty(result);
363
+ }
364
+ function dedupeResultsByDeductionKey(results) {
365
+ const seen = new Set();
366
+ const deduped = [];
367
+ for (const result of results) {
368
+ if (!result.deductionKey) {
369
+ deduped.push(result);
370
+ continue;
371
+ }
372
+ if (seen.has(result.deductionKey)) {
373
+ continue;
374
+ }
375
+ seen.add(result.deductionKey);
376
+ deduped.push(result);
377
+ }
378
+ return deduped;
379
+ }
380
+ function getReadinessPenaltyForSetupGapSeverity(severity) {
381
+ if (severity === 'error') {
382
+ return readinessSetupGapErrorPenalty;
383
+ }
384
+ if (severity === 'warning') {
385
+ return readinessSetupGapWarningPenalty;
386
+ }
387
+ return readinessSetupGapInfoPenalty;
388
+ }
389
+ function deriveGovernanceRiskLevelFromResults(results) {
390
+ const qualityFailures = dedupeResultsByDeductionKey(results).filter((result) => !result.passed && (result.impact ?? 'quality') === 'quality');
391
+ const hasCriticalRule = qualityFailures.some((result) => result.ruleId === 'AP-DEP-008' ||
392
+ result.ruleId === 'AP-DEP-005');
393
+ if (hasCriticalRule) {
394
+ return 'critical';
395
+ }
396
+ if (qualityFailures.length > 0 && qualityFailures.every((result) => isHeuristicRuleId(result.ruleId))) {
397
+ return qualityFailures.some((result) => typeof result.ruleId === 'string' && mediumWeightHeuristicRuleIds.has(result.ruleId))
398
+ ? 'moderate'
399
+ : 'low';
400
+ }
401
+ if (qualityFailures.length > 1) {
402
+ return 'high';
403
+ }
404
+ if (qualityFailures.length === 1) {
405
+ return 'moderate';
406
+ }
407
+ return 'low';
408
+ }
409
+ function applyFinalScoreAdjustments(input) {
410
+ let adjusted = input.baseScore;
411
+ const uniqueResults = dedupeResultsByDeductionKey(input.results);
412
+ const problemSummary = summarizeArchitectureScoreProblems({ results: uniqueResults });
413
+ const publicSurfaceBypassViolations = problemSummary.clusters.filter((cluster) => cluster.ruleIds.includes('AP-DEP-005')).length;
414
+ const cycleViolations = problemSummary.clusters.filter((cluster) => cluster.ruleIds.some((ruleId) => cycleRuleIds.has(ruleId))).length;
415
+ adjusted -= Math.min(6, publicSurfaceBypassViolations * 2);
416
+ adjusted -= Math.min(4, cycleViolations * 2);
417
+ const governanceRiskLevel = input.context?.governanceRiskLevel ??
418
+ deriveGovernanceRiskLevelFromResults(input.results);
419
+ if (governanceRiskLevel === 'critical') {
420
+ adjusted -= 4;
421
+ }
422
+ else if (governanceRiskLevel === 'high') {
423
+ adjusted -= 2;
424
+ }
425
+ if (input.context?.diffContextAvailable === false) {
426
+ adjusted -= 1;
427
+ }
428
+ if (input.context?.enforcementAction === 'fail') {
429
+ adjusted = Math.min(adjusted, 85);
430
+ }
431
+ if (publicSurfaceBypassViolations > 0) {
432
+ adjusted = Math.min(adjusted, 72);
433
+ }
434
+ if (cycleViolations > 0) {
435
+ adjusted = Math.min(adjusted, 78);
436
+ }
437
+ if (governanceRiskLevel === 'critical') {
438
+ adjusted = Math.min(adjusted, 82);
439
+ }
440
+ const apDep004OnlyFloor = getApDep004OnlyContractDriftFloor({
441
+ categoryScores: input.categoryScores,
442
+ results: uniqueResults,
443
+ });
444
+ if (apDep004OnlyFloor !== undefined) {
445
+ adjusted = Math.max(adjusted, apDep004OnlyFloor);
446
+ return clampScore(Math.round(adjusted));
447
+ }
448
+ return clampScore(Math.round(adjusted));
449
+ }
450
+ function getApDep004OnlyContractDriftFloor(input) {
451
+ if (!input.categoryScores) {
452
+ return undefined;
453
+ }
454
+ const failedQualityResults = input.results.filter((result) => !result.passed && (result.impact ?? 'quality') === 'quality');
455
+ const failedErrors = failedQualityResults.filter((result) => result.severity === 'error');
456
+ if (failedErrors.length === 0 ||
457
+ failedErrors.some((result) => result.ruleId !== 'AP-DEP-004')) {
458
+ return undefined;
459
+ }
460
+ const hasSevereDependencyFailure = failedQualityResults.some((result) => typeof result.ruleId === 'string' &&
461
+ severeDependencyRuleIds.has(result.ruleId));
462
+ if (hasSevereDependencyFailure) {
463
+ return undefined;
464
+ }
465
+ const scores = Object.values(input.categoryScores);
466
+ if (scores.length === 0) {
467
+ return undefined;
468
+ }
469
+ const categoryAverage = scores.reduce((total, score) => total + score, 0) / scores.length;
470
+ return clampScore(Math.min(75, Math.max(65, Math.round(categoryAverage - 20))));
471
+ }
472
+ function getCategoryWeight(category) {
473
+ if (Object.prototype.hasOwnProperty.call(exports.architectureHealthCategoryWeights, category)) {
474
+ return exports.architectureHealthCategoryWeights[category];
475
+ }
476
+ return 0;
477
+ }
478
+ function calculateWeightedApplicableCategoryScore(input) {
479
+ let weightedSum = 0;
480
+ let applicableWeightTotal = 0;
481
+ for (const category of input.applicableCategories) {
482
+ const weight = getCategoryWeight(category);
483
+ if (weight <= 0) {
484
+ continue;
485
+ }
486
+ weightedSum += clampScore(input.categoryScores[category] ?? 100) * weight;
487
+ applicableWeightTotal += weight;
488
+ }
489
+ if (applicableWeightTotal <= 0) {
490
+ return 100;
491
+ }
492
+ return clampScore(weightedSum / applicableWeightTotal);
493
+ }
494
+ function calculateScopedScores(results, scopeKey, categories, context) {
495
+ const grouped = new Map();
496
+ for (const result of results) {
497
+ const scopeId = result[scopeKey];
498
+ if (!scopeId) {
499
+ continue;
500
+ }
501
+ const existing = grouped.get(scopeId) ?? [];
502
+ existing.push(result);
503
+ grouped.set(scopeId, existing);
504
+ }
505
+ if (grouped.size === 0) {
506
+ return undefined;
507
+ }
508
+ return [...grouped.entries()]
509
+ .sort(([left], [right]) => left.localeCompare(right))
510
+ .reduce((accumulator, [scopeId, scopedResults]) => {
511
+ accumulator[scopeId] = calculateArchitectureHealthScore({
512
+ results: scopedResults,
513
+ categories,
514
+ context,
515
+ includeScopedScores: false,
516
+ }).overallScore;
517
+ return accumulator;
518
+ }, {});
519
+ }
520
+ function calculateArchitectureHealthScore(input) {
521
+ const applicableResults = input.results.filter((result) => result.applicability !== 'not-applicable');
522
+ const notApplicable = input.results.length - applicableResults.length;
523
+ const categoryOrder = input.categories && input.categories.length > 0
524
+ ? [...input.categories]
525
+ : [...exports.defaultArchitectureHealthCategories];
526
+ const categoryScoreMap = new Map();
527
+ for (const category of categoryOrder) {
528
+ categoryScoreMap.set(category, 100);
529
+ }
530
+ const readinessCategoryScoreMap = new Map();
531
+ for (const category of categoryOrder) {
532
+ readinessCategoryScoreMap.set(category, 100);
533
+ }
534
+ let errors = 0;
535
+ let warnings = 0;
536
+ let info = 0;
537
+ let passed = 0;
538
+ let setupGaps = 0;
539
+ let guidanceFindings = 0;
540
+ let qualityFindings = 0;
541
+ let readinessScore = 100;
542
+ const appliedHealthDeductions = new Set();
543
+ const appliedReadinessDeductions = new Set();
544
+ const qualityResults = [];
545
+ const applicableCategorySet = new Set();
546
+ for (const result of applicableResults) {
547
+ applicableCategorySet.add(result.category);
548
+ if (result.passed) {
549
+ passed += 1;
550
+ continue;
551
+ }
552
+ if (result.severity === 'error') {
553
+ errors += 1;
554
+ }
555
+ else if (result.severity === 'warning') {
556
+ warnings += 1;
557
+ }
558
+ else {
559
+ info += 1;
560
+ }
561
+ const impact = result.impact ?? 'quality';
562
+ const deductionKey = result.deductionKey;
563
+ const healthDeductionKey = deductionKey ? `health:${deductionKey}` : undefined;
564
+ const readinessDeductionKey = deductionKey ? `readiness:${deductionKey}` : undefined;
565
+ if (impact === 'setup-gap') {
566
+ setupGaps += 1;
567
+ }
568
+ else if (impact === 'guidance') {
569
+ guidanceFindings += 1;
570
+ }
571
+ else {
572
+ qualityFindings += 1;
573
+ }
574
+ if (!categoryScoreMap.has(result.category)) {
575
+ categoryScoreMap.set(result.category, 100);
576
+ }
577
+ if (!readinessCategoryScoreMap.has(result.category)) {
578
+ readinessCategoryScoreMap.set(result.category, 100);
579
+ }
580
+ if (impact === 'quality') {
581
+ qualityResults.push(result);
582
+ }
583
+ if (impact === 'setup-gap') {
584
+ const shouldApplyOverall = !healthDeductionKey || !appliedHealthDeductions.has(healthDeductionKey);
585
+ if (shouldApplyOverall) {
586
+ const categoryScore = categoryScoreMap.get(result.category) ?? 100;
587
+ categoryScoreMap.set(result.category, clampScore(categoryScore - getOverallSetupGapPenaltyForSeverity(result.severity)));
588
+ if (healthDeductionKey) {
589
+ appliedHealthDeductions.add(healthDeductionKey);
590
+ }
591
+ }
592
+ const shouldApply = !readinessDeductionKey ||
593
+ !appliedReadinessDeductions.has(readinessDeductionKey);
594
+ if (shouldApply) {
595
+ const penalty = getReadinessPenaltyForSetupGapSeverity(result.severity);
596
+ readinessScore = clampScore(readinessScore - penalty);
597
+ const readinessCategoryScore = readinessCategoryScoreMap.get(result.category) ?? 100;
598
+ readinessCategoryScoreMap.set(result.category, clampScore(readinessCategoryScore - penalty));
599
+ if (readinessDeductionKey) {
600
+ appliedReadinessDeductions.add(readinessDeductionKey);
601
+ }
602
+ }
603
+ }
604
+ }
605
+ for (const cluster of summarizeArchitectureScoreProblems({ results: qualityResults }).clusters) {
606
+ const categoryScore = categoryScoreMap.get(cluster.category) ?? 100;
607
+ categoryScoreMap.set(cluster.category, clampScore(categoryScore - cluster.penalty));
608
+ }
609
+ const categoryScores = [...categoryScoreMap.entries()]
610
+ .sort((left, right) => left[0].localeCompare(right[0]))
611
+ .reduce((accumulator, [category, score]) => {
612
+ accumulator[category] = score;
613
+ return accumulator;
614
+ }, {});
615
+ const readinessCategoryScores = [...readinessCategoryScoreMap.entries()]
616
+ .sort((left, right) => left[0].localeCompare(right[0]))
617
+ .reduce((accumulator, [category, score]) => {
618
+ accumulator[category] = score;
619
+ return accumulator;
620
+ }, {});
621
+ const applicableCategories = [...applicableCategorySet]
622
+ .filter((category) => getCategoryWeight(category) > 0)
623
+ .sort((left, right) => left.localeCompare(right));
624
+ const weightedBaseScore = calculateWeightedApplicableCategoryScore({
625
+ categoryScores,
626
+ applicableCategories,
627
+ });
628
+ return {
629
+ overallScore: applyFinalScoreAdjustments({
630
+ baseScore: weightedBaseScore,
631
+ results: applicableResults,
632
+ categoryScores,
633
+ context: input.context,
634
+ }),
635
+ categoryScores,
636
+ applicableCategories,
637
+ weightedBaseScore: Math.round(weightedBaseScore),
638
+ ...(input.includeScopedScores === false
639
+ ? {}
640
+ : {
641
+ componentScores: calculateScopedScores(applicableResults, 'componentId', input.categories, input.context),
642
+ moduleScores: calculateScopedScores(applicableResults, 'moduleId', input.categories, input.context),
643
+ }),
644
+ readinessScore,
645
+ readinessCategoryScores,
646
+ totalChecks: applicableResults.length,
647
+ notApplicable,
648
+ errors,
649
+ warnings,
650
+ info,
651
+ passed,
652
+ setupGaps,
653
+ guidanceFindings,
654
+ qualityFindings,
655
+ };
656
+ }
657
+ //# sourceMappingURL=architectureHealthScore.js.map