@nahisaho/musubix-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/musubix.js +18 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +320 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +580 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/cli/base.d.ts +58 -0
- package/dist/cli/base.d.ts.map +1 -0
- package/dist/cli/base.js +93 -0
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/help.d.ts +17 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +228 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +25 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +258 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/coding-standards.d.ts +250 -0
- package/dist/codegen/coding-standards.d.ts.map +1 -0
- package/dist/codegen/coding-standards.js +976 -0
- package/dist/codegen/coding-standards.js.map +1 -0
- package/dist/codegen/coverage-reporter.d.ts +264 -0
- package/dist/codegen/coverage-reporter.d.ts.map +1 -0
- package/dist/codegen/coverage-reporter.js +697 -0
- package/dist/codegen/coverage-reporter.js.map +1 -0
- package/dist/codegen/dependency-analyzer.d.ts +271 -0
- package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
- package/dist/codegen/dependency-analyzer.js +661 -0
- package/dist/codegen/dependency-analyzer.js.map +1 -0
- package/dist/codegen/generator.d.ts +275 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +781 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +27 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/integration-test-generator.d.ts +312 -0
- package/dist/codegen/integration-test-generator.d.ts.map +1 -0
- package/dist/codegen/integration-test-generator.js +765 -0
- package/dist/codegen/integration-test-generator.js.map +1 -0
- package/dist/codegen/pattern-conformance.d.ts +309 -0
- package/dist/codegen/pattern-conformance.d.ts.map +1 -0
- package/dist/codegen/pattern-conformance.js +590 -0
- package/dist/codegen/pattern-conformance.js.map +1 -0
- package/dist/codegen/quality-metrics.d.ts +235 -0
- package/dist/codegen/quality-metrics.d.ts.map +1 -0
- package/dist/codegen/quality-metrics.js +439 -0
- package/dist/codegen/quality-metrics.js.map +1 -0
- package/dist/codegen/security-scanner.d.ts +179 -0
- package/dist/codegen/security-scanner.d.ts.map +1 -0
- package/dist/codegen/security-scanner.js +495 -0
- package/dist/codegen/security-scanner.js.map +1 -0
- package/dist/codegen/static-analyzer.d.ts +188 -0
- package/dist/codegen/static-analyzer.d.ts.map +1 -0
- package/dist/codegen/static-analyzer.js +490 -0
- package/dist/codegen/static-analyzer.js.map +1 -0
- package/dist/codegen/unit-test-generator.d.ts +289 -0
- package/dist/codegen/unit-test-generator.d.ts.map +1 -0
- package/dist/codegen/unit-test-generator.js +634 -0
- package/dist/codegen/unit-test-generator.js.map +1 -0
- package/dist/design/adr-generator.d.ts +227 -0
- package/dist/design/adr-generator.d.ts.map +1 -0
- package/dist/design/adr-generator.js +423 -0
- package/dist/design/adr-generator.js.map +1 -0
- package/dist/design/c4-generator.d.ts +267 -0
- package/dist/design/c4-generator.d.ts.map +1 -0
- package/dist/design/c4-generator.js +453 -0
- package/dist/design/c4-generator.js.map +1 -0
- package/dist/design/framework-optimizer.d.ts +190 -0
- package/dist/design/framework-optimizer.d.ts.map +1 -0
- package/dist/design/framework-optimizer.js +589 -0
- package/dist/design/framework-optimizer.js.map +1 -0
- package/dist/design/index.d.ts +12 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +13 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/pattern-detector.d.ts +270 -0
- package/dist/design/pattern-detector.d.ts.map +1 -0
- package/dist/design/pattern-detector.js +621 -0
- package/dist/design/pattern-detector.js.map +1 -0
- package/dist/design/solid-validator.d.ts +188 -0
- package/dist/design/solid-validator.d.ts.map +1 -0
- package/dist/design/solid-validator.js +579 -0
- package/dist/design/solid-validator.js.map +1 -0
- package/dist/error/data-persistence.d.ts +311 -0
- package/dist/error/data-persistence.d.ts.map +1 -0
- package/dist/error/data-persistence.js +586 -0
- package/dist/error/data-persistence.js.map +1 -0
- package/dist/error/graceful-degradation.d.ts +309 -0
- package/dist/error/graceful-degradation.d.ts.map +1 -0
- package/dist/error/graceful-degradation.js +510 -0
- package/dist/error/graceful-degradation.js.map +1 -0
- package/dist/error/index.d.ts +11 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +19 -0
- package/dist/error/index.js.map +1 -0
- package/dist/explanation/explanation-generator.d.ts +228 -0
- package/dist/explanation/explanation-generator.d.ts.map +1 -0
- package/dist/explanation/explanation-generator.js +662 -0
- package/dist/explanation/explanation-generator.js.map +1 -0
- package/dist/explanation/index.d.ts +11 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +19 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/reasoning-chain.d.ts +314 -0
- package/dist/explanation/reasoning-chain.d.ts.map +1 -0
- package/dist/explanation/reasoning-chain.js +414 -0
- package/dist/explanation/reasoning-chain.js.map +1 -0
- package/dist/explanation/visual-explanation.d.ts +315 -0
- package/dist/explanation/visual-explanation.d.ts.map +1 -0
- package/dist/explanation/visual-explanation.js +667 -0
- package/dist/explanation/visual-explanation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/requirements/decomposer.d.ts +235 -0
- package/dist/requirements/decomposer.d.ts.map +1 -0
- package/dist/requirements/decomposer.js +587 -0
- package/dist/requirements/decomposer.js.map +1 -0
- package/dist/requirements/related-finder.d.ts +261 -0
- package/dist/requirements/related-finder.d.ts.map +1 -0
- package/dist/requirements/related-finder.js +629 -0
- package/dist/requirements/related-finder.js.map +1 -0
- package/dist/traceability/impact.d.ts +196 -0
- package/dist/traceability/impact.d.ts.map +1 -0
- package/dist/traceability/impact.js +438 -0
- package/dist/traceability/impact.js.map +1 -0
- package/dist/traceability/index.d.ts +9 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +10 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/manager.d.ts +266 -0
- package/dist/traceability/manager.d.ts.map +1 -0
- package/dist/traceability/manager.js +412 -0
- package/dist/traceability/manager.js.map +1 -0
- package/dist/types/common.d.ts +294 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +15 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/ears.d.ts +158 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +33 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/errors.d.ts +176 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +55 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/data-protector.d.ts +122 -0
- package/dist/utils/data-protector.d.ts.map +1 -0
- package/dist/utils/data-protector.js +275 -0
- package/dist/utils/data-protector.js.map +1 -0
- package/dist/utils/error-handler.d.ts +101 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +324 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/i18n-manager.d.ts +259 -0
- package/dist/utils/i18n-manager.d.ts.map +1 -0
- package/dist/utils/i18n-manager.js +554 -0
- package/dist/utils/i18n-manager.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +120 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +237 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance-profiler.d.ts +251 -0
- package/dist/utils/performance-profiler.d.ts.map +1 -0
- package/dist/utils/performance-profiler.js +458 -0
- package/dist/utils/performance-profiler.js.map +1 -0
- package/dist/utils/scalability-optimizer.d.ts +294 -0
- package/dist/utils/scalability-optimizer.d.ts.map +1 -0
- package/dist/utils/scalability-optimizer.js +606 -0
- package/dist/utils/scalability-optimizer.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +294 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +630 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/version-compatibility.d.ts +217 -0
- package/dist/utils/version-compatibility.d.ts.map +1 -0
- package/dist/utils/version-compatibility.js +443 -0
- package/dist/utils/version-compatibility.js.map +1 -0
- package/dist/validators/ears-validator.d.ts +182 -0
- package/dist/validators/ears-validator.d.ts.map +1 -0
- package/dist/validators/ears-validator.js +357 -0
- package/dist/validators/ears-validator.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +9 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Impact Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes the impact of changes across the traceability chain
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module traceability/impact
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-TRA-002 - Impact Analysis
|
|
10
|
+
* @see Article IV - Traceability Requirements
|
|
11
|
+
*/
|
|
12
|
+
import type { TraceabilityManager, TraceableArtifact, ArtifactType } from './manager.js';
|
|
13
|
+
/**
|
|
14
|
+
* Change type
|
|
15
|
+
*/
|
|
16
|
+
export type ChangeType = 'add' | 'modify' | 'delete' | 'deprecate';
|
|
17
|
+
/**
|
|
18
|
+
* Change proposal
|
|
19
|
+
*/
|
|
20
|
+
export interface ChangeProposal {
|
|
21
|
+
/** Artifact to change */
|
|
22
|
+
artifactId: string;
|
|
23
|
+
/** Type of change */
|
|
24
|
+
changeType: ChangeType;
|
|
25
|
+
/** Description of change */
|
|
26
|
+
description: string;
|
|
27
|
+
/** New values (for modify) */
|
|
28
|
+
newValues?: Partial<TraceableArtifact>;
|
|
29
|
+
/** Rationale */
|
|
30
|
+
rationale?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Impact severity
|
|
34
|
+
*/
|
|
35
|
+
export type ImpactSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
36
|
+
/**
|
|
37
|
+
* Impacted artifact
|
|
38
|
+
*/
|
|
39
|
+
export interface ImpactedArtifact {
|
|
40
|
+
/** Artifact */
|
|
41
|
+
artifact: TraceableArtifact;
|
|
42
|
+
/** Impact severity */
|
|
43
|
+
severity: ImpactSeverity;
|
|
44
|
+
/** Distance from changed artifact */
|
|
45
|
+
distance: number;
|
|
46
|
+
/** Impact type */
|
|
47
|
+
impactType: 'direct' | 'indirect' | 'ripple';
|
|
48
|
+
/** Required actions */
|
|
49
|
+
requiredActions: string[];
|
|
50
|
+
/** Estimated effort (hours) */
|
|
51
|
+
estimatedEffort: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Impact analysis result
|
|
55
|
+
*/
|
|
56
|
+
export interface ImpactAnalysisResult {
|
|
57
|
+
/** Original change proposal */
|
|
58
|
+
proposal: ChangeProposal;
|
|
59
|
+
/** Changed artifact */
|
|
60
|
+
changedArtifact: TraceableArtifact;
|
|
61
|
+
/** Directly impacted artifacts */
|
|
62
|
+
directImpacts: ImpactedArtifact[];
|
|
63
|
+
/** Indirectly impacted artifacts */
|
|
64
|
+
indirectImpacts: ImpactedArtifact[];
|
|
65
|
+
/** Total impact summary */
|
|
66
|
+
summary: ImpactSummary;
|
|
67
|
+
/** Risk assessment */
|
|
68
|
+
risk: RiskAssessment;
|
|
69
|
+
/** Recommendations */
|
|
70
|
+
recommendations: string[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Impact summary
|
|
74
|
+
*/
|
|
75
|
+
export interface ImpactSummary {
|
|
76
|
+
/** Total affected artifacts */
|
|
77
|
+
totalAffected: number;
|
|
78
|
+
/** By type */
|
|
79
|
+
byType: Record<ArtifactType, number>;
|
|
80
|
+
/** By severity */
|
|
81
|
+
bySeverity: Record<ImpactSeverity, number>;
|
|
82
|
+
/** Total estimated effort */
|
|
83
|
+
totalEffort: number;
|
|
84
|
+
/** Scope percentage (affected / total) */
|
|
85
|
+
scopePercentage: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Risk assessment
|
|
89
|
+
*/
|
|
90
|
+
export interface RiskAssessment {
|
|
91
|
+
/** Overall risk level */
|
|
92
|
+
level: 'critical' | 'high' | 'medium' | 'low';
|
|
93
|
+
/** Risk score (0-100) */
|
|
94
|
+
score: number;
|
|
95
|
+
/** Risk factors */
|
|
96
|
+
factors: RiskFactor[];
|
|
97
|
+
/** Mitigation suggestions */
|
|
98
|
+
mitigations: string[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Risk factor
|
|
102
|
+
*/
|
|
103
|
+
export interface RiskFactor {
|
|
104
|
+
/** Factor name */
|
|
105
|
+
name: string;
|
|
106
|
+
/** Factor description */
|
|
107
|
+
description: string;
|
|
108
|
+
/** Weight (0-1) */
|
|
109
|
+
weight: number;
|
|
110
|
+
/** Score contribution */
|
|
111
|
+
contribution: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Impact analyzer configuration
|
|
115
|
+
*/
|
|
116
|
+
export interface ImpactAnalyzerConfig {
|
|
117
|
+
/** Maximum depth for ripple effect analysis */
|
|
118
|
+
maxDepth: number;
|
|
119
|
+
/** Include deprecated artifacts */
|
|
120
|
+
includeDeprecated: boolean;
|
|
121
|
+
/** Effort estimation multipliers */
|
|
122
|
+
effortMultipliers: Record<ArtifactType, number>;
|
|
123
|
+
/** Severity weights for risk calculation */
|
|
124
|
+
severityWeights: Record<ImpactSeverity, number>;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Default configuration
|
|
128
|
+
*/
|
|
129
|
+
export declare const DEFAULT_IMPACT_CONFIG: ImpactAnalyzerConfig;
|
|
130
|
+
/**
|
|
131
|
+
* Impact Analyzer
|
|
132
|
+
*
|
|
133
|
+
* Analyzes change impacts across the traceability chain
|
|
134
|
+
*/
|
|
135
|
+
export declare class ImpactAnalyzer {
|
|
136
|
+
private config;
|
|
137
|
+
private traceability;
|
|
138
|
+
constructor(traceability: TraceabilityManager, config?: Partial<ImpactAnalyzerConfig>);
|
|
139
|
+
/**
|
|
140
|
+
* Analyze impact of a proposed change
|
|
141
|
+
*/
|
|
142
|
+
analyzeImpact(proposal: ChangeProposal): ImpactAnalysisResult;
|
|
143
|
+
/**
|
|
144
|
+
* Analyze multiple changes together
|
|
145
|
+
*/
|
|
146
|
+
analyzeBatchImpact(proposals: ChangeProposal[]): ImpactAnalysisResult[];
|
|
147
|
+
/**
|
|
148
|
+
* Get directly impacted artifacts
|
|
149
|
+
*/
|
|
150
|
+
private getDirectImpacts;
|
|
151
|
+
/**
|
|
152
|
+
* Get indirectly impacted artifacts (ripple effects)
|
|
153
|
+
*/
|
|
154
|
+
private getIndirectImpacts;
|
|
155
|
+
/**
|
|
156
|
+
* Calculate impact severity
|
|
157
|
+
*/
|
|
158
|
+
private calculateSeverity;
|
|
159
|
+
/**
|
|
160
|
+
* Calculate indirect severity based on distance
|
|
161
|
+
*/
|
|
162
|
+
private calculateIndirectSeverity;
|
|
163
|
+
/**
|
|
164
|
+
* Determine required actions
|
|
165
|
+
*/
|
|
166
|
+
private determineActions;
|
|
167
|
+
/**
|
|
168
|
+
* Estimate effort for impacted artifact
|
|
169
|
+
*/
|
|
170
|
+
private estimateEffort;
|
|
171
|
+
/**
|
|
172
|
+
* Generate impact summary
|
|
173
|
+
*/
|
|
174
|
+
private generateSummary;
|
|
175
|
+
/**
|
|
176
|
+
* Estimate total artifacts
|
|
177
|
+
*/
|
|
178
|
+
private estimateTotalArtifacts;
|
|
179
|
+
/**
|
|
180
|
+
* Assess overall risk
|
|
181
|
+
*/
|
|
182
|
+
private assessRisk;
|
|
183
|
+
/**
|
|
184
|
+
* Generate risk mitigations
|
|
185
|
+
*/
|
|
186
|
+
private generateMitigations;
|
|
187
|
+
/**
|
|
188
|
+
* Generate recommendations
|
|
189
|
+
*/
|
|
190
|
+
private generateRecommendations;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Create impact analyzer instance
|
|
194
|
+
*/
|
|
195
|
+
export declare function createImpactAnalyzer(traceability: TraceabilityManager, config?: Partial<ImpactAnalyzerConfig>): ImpactAnalyzer;
|
|
196
|
+
//# sourceMappingURL=impact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/traceability/impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Impact Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes the impact of changes across the traceability chain
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module traceability/impact
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-TRA-002 - Impact Analysis
|
|
10
|
+
* @see Article IV - Traceability Requirements
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default configuration
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_IMPACT_CONFIG = {
|
|
16
|
+
maxDepth: 5,
|
|
17
|
+
includeDeprecated: false,
|
|
18
|
+
effortMultipliers: {
|
|
19
|
+
requirement: 2,
|
|
20
|
+
design: 4,
|
|
21
|
+
code: 8,
|
|
22
|
+
test: 4,
|
|
23
|
+
task: 1,
|
|
24
|
+
documentation: 2,
|
|
25
|
+
},
|
|
26
|
+
severityWeights: {
|
|
27
|
+
critical: 10,
|
|
28
|
+
high: 5,
|
|
29
|
+
medium: 2,
|
|
30
|
+
low: 1,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Impact Analyzer
|
|
35
|
+
*
|
|
36
|
+
* Analyzes change impacts across the traceability chain
|
|
37
|
+
*/
|
|
38
|
+
export class ImpactAnalyzer {
|
|
39
|
+
config;
|
|
40
|
+
traceability;
|
|
41
|
+
constructor(traceability, config) {
|
|
42
|
+
this.traceability = traceability;
|
|
43
|
+
this.config = { ...DEFAULT_IMPACT_CONFIG, ...config };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Analyze impact of a proposed change
|
|
47
|
+
*/
|
|
48
|
+
analyzeImpact(proposal) {
|
|
49
|
+
const artifact = this.traceability.getArtifact(proposal.artifactId);
|
|
50
|
+
if (!artifact) {
|
|
51
|
+
throw new Error(`Artifact not found: ${proposal.artifactId}`);
|
|
52
|
+
}
|
|
53
|
+
// Get direct impacts (immediate dependencies)
|
|
54
|
+
const directImpacts = this.getDirectImpacts(artifact, proposal);
|
|
55
|
+
// Get indirect impacts (ripple effects)
|
|
56
|
+
const indirectImpacts = this.getIndirectImpacts(artifact, directImpacts, proposal);
|
|
57
|
+
// Generate summary
|
|
58
|
+
const allImpacts = [...directImpacts, ...indirectImpacts];
|
|
59
|
+
const summary = this.generateSummary(allImpacts);
|
|
60
|
+
// Assess risk
|
|
61
|
+
const risk = this.assessRisk(proposal, allImpacts, summary);
|
|
62
|
+
// Generate recommendations
|
|
63
|
+
const recommendations = this.generateRecommendations(proposal, allImpacts, risk);
|
|
64
|
+
return {
|
|
65
|
+
proposal,
|
|
66
|
+
changedArtifact: artifact,
|
|
67
|
+
directImpacts,
|
|
68
|
+
indirectImpacts,
|
|
69
|
+
summary,
|
|
70
|
+
risk,
|
|
71
|
+
recommendations,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Analyze multiple changes together
|
|
76
|
+
*/
|
|
77
|
+
analyzeBatchImpact(proposals) {
|
|
78
|
+
return proposals.map((p) => this.analyzeImpact(p));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get directly impacted artifacts
|
|
82
|
+
*/
|
|
83
|
+
getDirectImpacts(artifact, proposal) {
|
|
84
|
+
const impacts = [];
|
|
85
|
+
// Get downstream artifacts (depend on this)
|
|
86
|
+
const downstream = this.traceability.getDownstream(artifact.id);
|
|
87
|
+
// Get upstream artifacts (this depends on)
|
|
88
|
+
const upstream = this.traceability.getUpstream(artifact.id);
|
|
89
|
+
// Process downstream
|
|
90
|
+
for (const affected of downstream) {
|
|
91
|
+
if (!this.config.includeDeprecated && affected.status === 'deprecated') {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
impacts.push({
|
|
95
|
+
artifact: affected,
|
|
96
|
+
severity: this.calculateSeverity(artifact, affected, proposal, 'direct'),
|
|
97
|
+
distance: 1,
|
|
98
|
+
impactType: 'direct',
|
|
99
|
+
requiredActions: this.determineActions(affected, proposal),
|
|
100
|
+
estimatedEffort: this.estimateEffort(affected, proposal),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// For delete/modify, upstream may need updates too
|
|
104
|
+
if (proposal.changeType === 'delete' || proposal.changeType === 'modify') {
|
|
105
|
+
for (const affected of upstream) {
|
|
106
|
+
if (!this.config.includeDeprecated && affected.status === 'deprecated') {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
impacts.push({
|
|
110
|
+
artifact: affected,
|
|
111
|
+
severity: this.calculateSeverity(artifact, affected, proposal, 'direct'),
|
|
112
|
+
distance: 1,
|
|
113
|
+
impactType: 'direct',
|
|
114
|
+
requiredActions: ['Review dependency', 'Update references'],
|
|
115
|
+
estimatedEffort: this.estimateEffort(affected, proposal) * 0.5,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return impacts;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get indirectly impacted artifacts (ripple effects)
|
|
123
|
+
*/
|
|
124
|
+
getIndirectImpacts(_source, directImpacts, proposal) {
|
|
125
|
+
const impacts = [];
|
|
126
|
+
const visited = new Set();
|
|
127
|
+
// Mark source and direct impacts as visited
|
|
128
|
+
visited.add(proposal.artifactId);
|
|
129
|
+
for (const impact of directImpacts) {
|
|
130
|
+
visited.add(impact.artifact.id);
|
|
131
|
+
}
|
|
132
|
+
// BFS for ripple effects
|
|
133
|
+
const queue = [];
|
|
134
|
+
for (const impact of directImpacts) {
|
|
135
|
+
const downstream = this.traceability.getDownstream(impact.artifact.id);
|
|
136
|
+
for (const d of downstream) {
|
|
137
|
+
if (!visited.has(d.id)) {
|
|
138
|
+
queue.push({ artifact: d, distance: 2 });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
while (queue.length > 0) {
|
|
143
|
+
const { artifact, distance } = queue.shift();
|
|
144
|
+
if (visited.has(artifact.id) || distance > this.config.maxDepth) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (!this.config.includeDeprecated && artifact.status === 'deprecated') {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
visited.add(artifact.id);
|
|
151
|
+
impacts.push({
|
|
152
|
+
artifact,
|
|
153
|
+
severity: this.calculateIndirectSeverity(distance),
|
|
154
|
+
distance,
|
|
155
|
+
impactType: distance === 2 ? 'indirect' : 'ripple',
|
|
156
|
+
requiredActions: ['Review for consistency', 'Update if affected'],
|
|
157
|
+
estimatedEffort: this.estimateEffort(artifact, proposal) * Math.pow(0.5, distance - 1),
|
|
158
|
+
});
|
|
159
|
+
// Continue BFS
|
|
160
|
+
const downstream = this.traceability.getDownstream(artifact.id);
|
|
161
|
+
for (const d of downstream) {
|
|
162
|
+
if (!visited.has(d.id)) {
|
|
163
|
+
queue.push({ artifact: d, distance: distance + 1 });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return impacts;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Calculate impact severity
|
|
171
|
+
*/
|
|
172
|
+
calculateSeverity(source, target, proposal, _impactType) {
|
|
173
|
+
// Delete always has high impact on direct dependencies
|
|
174
|
+
if (proposal.changeType === 'delete') {
|
|
175
|
+
return 'critical';
|
|
176
|
+
}
|
|
177
|
+
// Requirements changes are high impact
|
|
178
|
+
if (source.type === 'requirement') {
|
|
179
|
+
if (target.type === 'code' || target.type === 'test') {
|
|
180
|
+
return 'high';
|
|
181
|
+
}
|
|
182
|
+
return 'medium';
|
|
183
|
+
}
|
|
184
|
+
// Design changes impact code
|
|
185
|
+
if (source.type === 'design' && target.type === 'code') {
|
|
186
|
+
return 'high';
|
|
187
|
+
}
|
|
188
|
+
// Deprecation is medium impact
|
|
189
|
+
if (proposal.changeType === 'deprecate') {
|
|
190
|
+
return 'medium';
|
|
191
|
+
}
|
|
192
|
+
return 'low';
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Calculate indirect severity based on distance
|
|
196
|
+
*/
|
|
197
|
+
calculateIndirectSeverity(distance) {
|
|
198
|
+
if (distance <= 2)
|
|
199
|
+
return 'medium';
|
|
200
|
+
if (distance <= 3)
|
|
201
|
+
return 'low';
|
|
202
|
+
return 'low';
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Determine required actions
|
|
206
|
+
*/
|
|
207
|
+
determineActions(artifact, proposal) {
|
|
208
|
+
const actions = [];
|
|
209
|
+
switch (proposal.changeType) {
|
|
210
|
+
case 'delete':
|
|
211
|
+
actions.push(`Remove dependency on ${proposal.artifactId}`);
|
|
212
|
+
actions.push('Find alternative implementation');
|
|
213
|
+
break;
|
|
214
|
+
case 'modify':
|
|
215
|
+
if (artifact.type === 'code') {
|
|
216
|
+
actions.push('Update implementation');
|
|
217
|
+
actions.push('Run tests');
|
|
218
|
+
}
|
|
219
|
+
else if (artifact.type === 'test') {
|
|
220
|
+
actions.push('Update test cases');
|
|
221
|
+
actions.push('Verify test coverage');
|
|
222
|
+
}
|
|
223
|
+
else if (artifact.type === 'design') {
|
|
224
|
+
actions.push('Review design consistency');
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
case 'deprecate':
|
|
228
|
+
actions.push('Plan migration');
|
|
229
|
+
actions.push('Update to new version');
|
|
230
|
+
break;
|
|
231
|
+
case 'add':
|
|
232
|
+
actions.push('Review compatibility');
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
return actions;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Estimate effort for impacted artifact
|
|
239
|
+
*/
|
|
240
|
+
estimateEffort(artifact, proposal) {
|
|
241
|
+
const baseEffort = this.config.effortMultipliers[artifact.type] ?? 1;
|
|
242
|
+
let multiplier = 1;
|
|
243
|
+
switch (proposal.changeType) {
|
|
244
|
+
case 'delete':
|
|
245
|
+
multiplier = 2;
|
|
246
|
+
break;
|
|
247
|
+
case 'modify':
|
|
248
|
+
multiplier = 1;
|
|
249
|
+
break;
|
|
250
|
+
case 'deprecate':
|
|
251
|
+
multiplier = 0.5;
|
|
252
|
+
break;
|
|
253
|
+
case 'add':
|
|
254
|
+
multiplier = 0.25;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
return baseEffort * multiplier;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Generate impact summary
|
|
261
|
+
*/
|
|
262
|
+
generateSummary(impacts) {
|
|
263
|
+
const byType = {
|
|
264
|
+
requirement: 0,
|
|
265
|
+
design: 0,
|
|
266
|
+
code: 0,
|
|
267
|
+
test: 0,
|
|
268
|
+
task: 0,
|
|
269
|
+
documentation: 0,
|
|
270
|
+
};
|
|
271
|
+
const bySeverity = {
|
|
272
|
+
critical: 0,
|
|
273
|
+
high: 0,
|
|
274
|
+
medium: 0,
|
|
275
|
+
low: 0,
|
|
276
|
+
};
|
|
277
|
+
let totalEffort = 0;
|
|
278
|
+
for (const impact of impacts) {
|
|
279
|
+
byType[impact.artifact.type]++;
|
|
280
|
+
bySeverity[impact.severity]++;
|
|
281
|
+
totalEffort += impact.estimatedEffort;
|
|
282
|
+
}
|
|
283
|
+
// Get total artifacts from traceability (estimate)
|
|
284
|
+
const totalArtifacts = this.estimateTotalArtifacts();
|
|
285
|
+
return {
|
|
286
|
+
totalAffected: impacts.length,
|
|
287
|
+
byType,
|
|
288
|
+
bySeverity,
|
|
289
|
+
totalEffort: Math.round(totalEffort * 10) / 10,
|
|
290
|
+
scopePercentage: totalArtifacts > 0
|
|
291
|
+
? Math.round((impacts.length / totalArtifacts) * 100 * 10) / 10
|
|
292
|
+
: 0,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Estimate total artifacts
|
|
297
|
+
*/
|
|
298
|
+
estimateTotalArtifacts() {
|
|
299
|
+
// This would need access to all artifacts
|
|
300
|
+
// For now, estimate from the traceability manager
|
|
301
|
+
let count = 0;
|
|
302
|
+
const types = ['requirement', 'design', 'code', 'test', 'task', 'documentation'];
|
|
303
|
+
for (const type of types) {
|
|
304
|
+
count += this.traceability.getArtifactsByType(type).length;
|
|
305
|
+
}
|
|
306
|
+
return count;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Assess overall risk
|
|
310
|
+
*/
|
|
311
|
+
assessRisk(proposal, impacts, summary) {
|
|
312
|
+
const factors = [];
|
|
313
|
+
let totalScore = 0;
|
|
314
|
+
// Factor 1: Change type
|
|
315
|
+
const changeTypeScores = {
|
|
316
|
+
delete: 30,
|
|
317
|
+
modify: 15,
|
|
318
|
+
deprecate: 10,
|
|
319
|
+
add: 5,
|
|
320
|
+
};
|
|
321
|
+
const changeScore = changeTypeScores[proposal.changeType];
|
|
322
|
+
factors.push({
|
|
323
|
+
name: 'Change Type',
|
|
324
|
+
description: `${proposal.changeType} operation`,
|
|
325
|
+
weight: 0.3,
|
|
326
|
+
contribution: changeScore,
|
|
327
|
+
});
|
|
328
|
+
totalScore += changeScore;
|
|
329
|
+
// Factor 2: Scope
|
|
330
|
+
const scopeScore = Math.min(summary.scopePercentage, 30);
|
|
331
|
+
factors.push({
|
|
332
|
+
name: 'Scope',
|
|
333
|
+
description: `${summary.scopePercentage}% of artifacts affected`,
|
|
334
|
+
weight: 0.3,
|
|
335
|
+
contribution: scopeScore,
|
|
336
|
+
});
|
|
337
|
+
totalScore += scopeScore;
|
|
338
|
+
// Factor 3: Severity distribution
|
|
339
|
+
const severityScore = summary.bySeverity.critical * 10 +
|
|
340
|
+
summary.bySeverity.high * 5 +
|
|
341
|
+
summary.bySeverity.medium * 2 +
|
|
342
|
+
summary.bySeverity.low * 0.5;
|
|
343
|
+
const normalizedSeverity = Math.min(severityScore, 30);
|
|
344
|
+
factors.push({
|
|
345
|
+
name: 'Severity Distribution',
|
|
346
|
+
description: `${summary.bySeverity.critical} critical, ${summary.bySeverity.high} high impacts`,
|
|
347
|
+
weight: 0.4,
|
|
348
|
+
contribution: normalizedSeverity,
|
|
349
|
+
});
|
|
350
|
+
totalScore += normalizedSeverity;
|
|
351
|
+
// Determine level
|
|
352
|
+
let level;
|
|
353
|
+
if (totalScore >= 60)
|
|
354
|
+
level = 'critical';
|
|
355
|
+
else if (totalScore >= 40)
|
|
356
|
+
level = 'high';
|
|
357
|
+
else if (totalScore >= 20)
|
|
358
|
+
level = 'medium';
|
|
359
|
+
else
|
|
360
|
+
level = 'low';
|
|
361
|
+
// Generate mitigations
|
|
362
|
+
const mitigations = this.generateMitigations(level, impacts, summary);
|
|
363
|
+
return {
|
|
364
|
+
level,
|
|
365
|
+
score: Math.round(totalScore),
|
|
366
|
+
factors,
|
|
367
|
+
mitigations,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Generate risk mitigations
|
|
372
|
+
*/
|
|
373
|
+
generateMitigations(level, impacts, summary) {
|
|
374
|
+
const mitigations = [];
|
|
375
|
+
if (level === 'critical' || level === 'high') {
|
|
376
|
+
mitigations.push('Consider phased rollout');
|
|
377
|
+
mitigations.push('Create comprehensive test plan');
|
|
378
|
+
mitigations.push('Schedule stakeholder review');
|
|
379
|
+
}
|
|
380
|
+
if (summary.bySeverity.critical > 0) {
|
|
381
|
+
mitigations.push('Address critical impacts first');
|
|
382
|
+
mitigations.push('Create rollback plan');
|
|
383
|
+
}
|
|
384
|
+
if (summary.byType.test > 0) {
|
|
385
|
+
mitigations.push('Update and run affected tests');
|
|
386
|
+
}
|
|
387
|
+
if (summary.byType.code > 3) {
|
|
388
|
+
mitigations.push('Consider code review for all changes');
|
|
389
|
+
}
|
|
390
|
+
if (impacts.some((i) => i.distance > 3)) {
|
|
391
|
+
mitigations.push('Verify ripple effects manually');
|
|
392
|
+
}
|
|
393
|
+
if (mitigations.length === 0) {
|
|
394
|
+
mitigations.push('Standard review process sufficient');
|
|
395
|
+
}
|
|
396
|
+
return mitigations;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Generate recommendations
|
|
400
|
+
*/
|
|
401
|
+
generateRecommendations(proposal, impacts, risk) {
|
|
402
|
+
const recommendations = [];
|
|
403
|
+
// Based on risk level
|
|
404
|
+
if (risk.level === 'critical') {
|
|
405
|
+
recommendations.push('🚨 High-risk change - require approval from tech lead');
|
|
406
|
+
recommendations.push('Create detailed change plan before proceeding');
|
|
407
|
+
}
|
|
408
|
+
else if (risk.level === 'high') {
|
|
409
|
+
recommendations.push('⚠️ Significant change - schedule dedicated time for updates');
|
|
410
|
+
}
|
|
411
|
+
// Based on change type
|
|
412
|
+
if (proposal.changeType === 'delete') {
|
|
413
|
+
recommendations.push('Verify no runtime dependencies before deletion');
|
|
414
|
+
recommendations.push('Consider deprecation before hard delete');
|
|
415
|
+
}
|
|
416
|
+
// Based on impacts
|
|
417
|
+
const codeImpacts = impacts.filter((i) => i.artifact.type === 'code');
|
|
418
|
+
if (codeImpacts.length > 0) {
|
|
419
|
+
recommendations.push(`Update ${codeImpacts.length} code file(s)`);
|
|
420
|
+
}
|
|
421
|
+
const testImpacts = impacts.filter((i) => i.artifact.type === 'test');
|
|
422
|
+
if (testImpacts.length > 0) {
|
|
423
|
+
recommendations.push(`Update ${testImpacts.length} test(s) for verification`);
|
|
424
|
+
}
|
|
425
|
+
// Effort-based
|
|
426
|
+
if (risk.score > 40) {
|
|
427
|
+
recommendations.push(`Estimated effort: ~${Math.round(impacts.reduce((sum, i) => sum + i.estimatedEffort, 0))} hours`);
|
|
428
|
+
}
|
|
429
|
+
return recommendations;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Create impact analyzer instance
|
|
434
|
+
*/
|
|
435
|
+
export function createImpactAnalyzer(traceability, config) {
|
|
436
|
+
return new ImpactAnalyzer(traceability, config);
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=impact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/traceability/impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traceability Module
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module traceability
|
|
6
|
+
*/
|
|
7
|
+
export { TraceabilityManager, createTraceabilityManager, type TraceLinkType, type TraceableArtifact, type ArtifactStatus, type TraceLink, type MatrixEntry, type TraceabilityGap, type TraceabilityReport, type CoverageStats, type TraceabilityConfig, DEFAULT_TRACEABILITY_CONFIG, } from './manager.js';
|
|
8
|
+
export { ImpactAnalyzer, createImpactAnalyzer, type ChangeType, type ChangeProposal, type ImpactSeverity, type ImpactedArtifact, type ImpactAnalysisResult, type ImpactSummary, type RiskAssessment, type RiskFactor, type ImpactAnalyzerConfig, DEFAULT_IMPACT_CONFIG, } from './impact.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/traceability/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traceability Module
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module traceability
|
|
6
|
+
*/
|
|
7
|
+
export { TraceabilityManager, createTraceabilityManager, DEFAULT_TRACEABILITY_CONFIG, } from './manager.js';
|
|
8
|
+
// Note: ArtifactType is exported from types module
|
|
9
|
+
export { ImpactAnalyzer, createImpactAnalyzer, DEFAULT_IMPACT_CONFIG, } from './impact.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|