@codeledger/engine 0.7.1 → 0.7.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 (129) hide show
  1. package/dist/claims/claims.d.ts +14 -0
  2. package/dist/claims/claims.d.ts.map +1 -0
  3. package/dist/claims/claims.js +125 -0
  4. package/dist/claims/claims.js.map +1 -0
  5. package/dist/claims/index.d.ts +2 -0
  6. package/dist/claims/index.d.ts.map +1 -0
  7. package/dist/claims/index.js +2 -0
  8. package/dist/claims/index.js.map +1 -0
  9. package/dist/dashboard/index.d.ts +3 -0
  10. package/dist/dashboard/index.d.ts.map +1 -0
  11. package/dist/dashboard/index.js +3 -0
  12. package/dist/dashboard/index.js.map +1 -0
  13. package/dist/dashboard/metrics.d.ts +24 -0
  14. package/dist/dashboard/metrics.d.ts.map +1 -0
  15. package/dist/dashboard/metrics.js +358 -0
  16. package/dist/dashboard/metrics.js.map +1 -0
  17. package/dist/dashboard/store.d.ts +26 -0
  18. package/dist/dashboard/store.d.ts.map +1 -0
  19. package/dist/dashboard/store.js +97 -0
  20. package/dist/dashboard/store.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +19 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/integration/ambient-coordinator.d.ts +75 -0
  26. package/dist/integration/ambient-coordinator.d.ts.map +1 -0
  27. package/dist/integration/ambient-coordinator.js +183 -0
  28. package/dist/integration/ambient-coordinator.js.map +1 -0
  29. package/dist/integration/index.d.ts +4 -0
  30. package/dist/integration/index.d.ts.map +1 -0
  31. package/dist/integration/index.js +3 -0
  32. package/dist/integration/index.js.map +1 -0
  33. package/dist/integration/warning-throttle.d.ts +63 -0
  34. package/dist/integration/warning-throttle.d.ts.map +1 -0
  35. package/dist/integration/warning-throttle.js +347 -0
  36. package/dist/integration/warning-throttle.js.map +1 -0
  37. package/dist/intervention/escalation.d.ts +23 -0
  38. package/dist/intervention/escalation.d.ts.map +1 -0
  39. package/dist/intervention/escalation.js +149 -0
  40. package/dist/intervention/escalation.js.map +1 -0
  41. package/dist/intervention/generator.d.ts +12 -0
  42. package/dist/intervention/generator.d.ts.map +1 -0
  43. package/dist/intervention/generator.js +191 -0
  44. package/dist/intervention/generator.js.map +1 -0
  45. package/dist/intervention/index.d.ts +4 -0
  46. package/dist/intervention/index.d.ts.map +1 -0
  47. package/dist/intervention/index.js +4 -0
  48. package/dist/intervention/index.js.map +1 -0
  49. package/dist/intervention/signal-aggregator.d.ts +26 -0
  50. package/dist/intervention/signal-aggregator.d.ts.map +1 -0
  51. package/dist/intervention/signal-aggregator.js +274 -0
  52. package/dist/intervention/signal-aggregator.js.map +1 -0
  53. package/dist/layer-d/conflict-detector.d.ts +12 -0
  54. package/dist/layer-d/conflict-detector.d.ts.map +1 -0
  55. package/dist/layer-d/conflict-detector.js +150 -0
  56. package/dist/layer-d/conflict-detector.js.map +1 -0
  57. package/dist/layer-d/index.d.ts +3 -0
  58. package/dist/layer-d/index.d.ts.map +1 -0
  59. package/dist/layer-d/index.js +3 -0
  60. package/dist/layer-d/index.js.map +1 -0
  61. package/dist/layer-d/surface-extractor.d.ts +10 -0
  62. package/dist/layer-d/surface-extractor.d.ts.map +1 -0
  63. package/dist/layer-d/surface-extractor.js +96 -0
  64. package/dist/layer-d/surface-extractor.js.map +1 -0
  65. package/dist/policy-domains/domains.d.ts +31 -0
  66. package/dist/policy-domains/domains.d.ts.map +1 -0
  67. package/dist/policy-domains/domains.js +445 -0
  68. package/dist/policy-domains/domains.js.map +1 -0
  69. package/dist/policy-domains/index.d.ts +8 -0
  70. package/dist/policy-domains/index.d.ts.map +1 -0
  71. package/dist/policy-domains/index.js +8 -0
  72. package/dist/policy-domains/index.js.map +1 -0
  73. package/dist/pulse/index.d.ts +2 -0
  74. package/dist/pulse/index.d.ts.map +1 -0
  75. package/dist/pulse/index.js +2 -0
  76. package/dist/pulse/index.js.map +1 -0
  77. package/dist/pulse/pulse.d.ts +20 -0
  78. package/dist/pulse/pulse.d.ts.map +1 -0
  79. package/dist/pulse/pulse.js +253 -0
  80. package/dist/pulse/pulse.js.map +1 -0
  81. package/dist/severity/index.d.ts +2 -0
  82. package/dist/severity/index.d.ts.map +1 -0
  83. package/dist/severity/index.js +2 -0
  84. package/dist/severity/index.js.map +1 -0
  85. package/dist/severity/severity.d.ts +48 -0
  86. package/dist/severity/severity.d.ts.map +1 -0
  87. package/dist/severity/severity.js +134 -0
  88. package/dist/severity/severity.js.map +1 -0
  89. package/dist/staleness/index.d.ts +2 -0
  90. package/dist/staleness/index.d.ts.map +1 -0
  91. package/dist/staleness/index.js +2 -0
  92. package/dist/staleness/index.js.map +1 -0
  93. package/dist/staleness/jit-staleness.d.ts +29 -0
  94. package/dist/staleness/jit-staleness.d.ts.map +1 -0
  95. package/dist/staleness/jit-staleness.js +240 -0
  96. package/dist/staleness/jit-staleness.js.map +1 -0
  97. package/dist/team-policy/index.d.ts +1 -1
  98. package/dist/team-policy/index.d.ts.map +1 -1
  99. package/dist/team-policy/index.js +1 -1
  100. package/dist/team-policy/index.js.map +1 -1
  101. package/dist/team-policy/policy.d.ts +7 -0
  102. package/dist/team-policy/policy.d.ts.map +1 -1
  103. package/dist/team-policy/policy.js +38 -0
  104. package/dist/team-policy/policy.js.map +1 -1
  105. package/dist/trust/approval.d.ts +16 -0
  106. package/dist/trust/approval.d.ts.map +1 -0
  107. package/dist/trust/approval.js +183 -0
  108. package/dist/trust/approval.js.map +1 -0
  109. package/dist/trust/capsule.d.ts +36 -0
  110. package/dist/trust/capsule.d.ts.map +1 -0
  111. package/dist/trust/capsule.js +206 -0
  112. package/dist/trust/capsule.js.map +1 -0
  113. package/dist/trust/index.d.ts +6 -0
  114. package/dist/trust/index.d.ts.map +1 -0
  115. package/dist/trust/index.js +6 -0
  116. package/dist/trust/index.js.map +1 -0
  117. package/dist/trust/learning-feedback.d.ts +18 -0
  118. package/dist/trust/learning-feedback.d.ts.map +1 -0
  119. package/dist/trust/learning-feedback.js +146 -0
  120. package/dist/trust/learning-feedback.js.map +1 -0
  121. package/dist/trust/risk-scoring.d.ts +16 -0
  122. package/dist/trust/risk-scoring.d.ts.map +1 -0
  123. package/dist/trust/risk-scoring.js +142 -0
  124. package/dist/trust/risk-scoring.js.map +1 -0
  125. package/dist/trust/timeline.d.ts +42 -0
  126. package/dist/trust/timeline.d.ts.map +1 -0
  127. package/dist/trust/timeline.js +154 -0
  128. package/dist/trust/timeline.js.map +1 -0
  129. package/package.json +6 -2
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Intervention Generator — Architecture Intervention Engine
3
+ *
4
+ * Takes escalation result + aggregated signals and generates prioritized,
5
+ * actionable interventions with agent-ready execution templates.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ /**
9
+ * Map a signal category to a default action type.
10
+ */
11
+ function categoryToActionType(category) {
12
+ switch (category) {
13
+ case 'drift_spike':
14
+ return 'refactor';
15
+ case 'duplication_pressure':
16
+ return 'consolidate_duplicates';
17
+ case 'governance_breakdown':
18
+ return 'update_policy';
19
+ case 'architectural_violation':
20
+ return 'fix_violation';
21
+ case 'test_gap':
22
+ return 'add_test';
23
+ case 'scope_creep':
24
+ return 'refactor';
25
+ case 'sot_instability':
26
+ return 'fix_violation';
27
+ case 'coverage_gap':
28
+ return 'add_test';
29
+ case 'extension_failure':
30
+ return 'extend_existing';
31
+ }
32
+ }
33
+ /**
34
+ * Assign priority (1-5, 1 = highest) based on severity and escalation level.
35
+ */
36
+ function assignPriority(severity, escalationLevel) {
37
+ const PRIORITY_LEVELS = ['critical', 'high', 'medium', 'low'];
38
+ const severityIndex = {
39
+ critical: 0,
40
+ high: 1,
41
+ medium: 2,
42
+ low: 3,
43
+ };
44
+ let idx = severityIndex[severity] ?? 3;
45
+ // Blocking escalation promotes priority by 1 (but never below 0)
46
+ if (escalationLevel === 'blocking' && idx > 0) {
47
+ idx -= 1;
48
+ }
49
+ return PRIORITY_LEVELS[idx];
50
+ }
51
+ /**
52
+ * Generate a human-readable title for an intervention.
53
+ */
54
+ function generateTitle(category) {
55
+ switch (category) {
56
+ case 'drift_spike':
57
+ return 'Address task drift before continuing';
58
+ case 'duplication_pressure':
59
+ return 'Consolidate duplicate implementations';
60
+ case 'governance_breakdown':
61
+ return 'Update governance policy';
62
+ case 'architectural_violation':
63
+ return 'Fix architectural violation';
64
+ case 'test_gap':
65
+ return 'Add missing test coverage';
66
+ case 'scope_creep':
67
+ return 'Reduce scope to original intent';
68
+ case 'sot_instability':
69
+ return 'Stabilize source-of-truth assignments';
70
+ case 'coverage_gap':
71
+ return 'Improve discovery adoption coverage';
72
+ case 'extension_failure':
73
+ return 'Fix extension-only implementation violations';
74
+ }
75
+ }
76
+ /**
77
+ * Generate a suggested fix description from the signal.
78
+ */
79
+ function generateSuggestedFix(signal) {
80
+ const files = signal.affected_files;
81
+ const fileList = files.length > 0 ? files.slice(0, 3).join(', ') : 'affected files';
82
+ switch (signal.category) {
83
+ case 'drift_spike':
84
+ return `Re-align implementation with original task intent. Review ${fileList} for scope deviation.`;
85
+ case 'duplication_pressure':
86
+ return files.length >= 2
87
+ ? `Merge duplicate logic from ${files.slice(1).join(', ')} into ${files[0] ?? 'primary file'} to eliminate redundancy.`
88
+ : `Consolidate duplicated code in ${fileList}.`;
89
+ case 'governance_breakdown':
90
+ return `Update team policy to cover the gap described: ${signal.description}`;
91
+ case 'architectural_violation':
92
+ return `Fix the violation in ${fileList}: ${signal.description}`;
93
+ case 'test_gap':
94
+ return `Add test coverage for ${fileList} to close the testing gap.`;
95
+ case 'scope_creep':
96
+ return `Remove or defer changes in ${fileList} that fall outside the current task scope.`;
97
+ case 'sot_instability':
98
+ return `Stabilize the source-of-truth for ${fileList}. Ensure canonical ownership is consistent across discovery runs.`;
99
+ case 'coverage_gap':
100
+ return `Run discovery before implementing tasks affecting ${fileList}. Increase adoption of the discovery gate.`;
101
+ case 'extension_failure':
102
+ return `Refactor changes in ${fileList} to extend the existing system instead of creating parallel implementations.`;
103
+ }
104
+ }
105
+ /**
106
+ * Generate an agent-ready execution template for a given intervention.
107
+ * These are plain-text prompts an AI agent can execute directly.
108
+ */
109
+ function generateAgentTemplate(intervention) {
110
+ const fileSection = intervention.affected_files.length > 0
111
+ ? `\nFiles to modify:\n${intervention.affected_files.map((file) => ` - ${file}`).join('\n')}`
112
+ : '';
113
+ return `Task: ${intervention.title}
114
+ Priority: P${intervention.priority}
115
+ Category: ${intervention.category}
116
+ Action type: ${intervention.action_type}
117
+ ${fileSection}
118
+
119
+ Instructions:
120
+ ${intervention.suggested_fix}
121
+
122
+ Constraints:
123
+ - Do not introduce new dependencies
124
+ - Preserve existing public API contracts
125
+ - Add or update tests for any changed behavior
126
+ - Follow existing code conventions in the repository`;
127
+ }
128
+ /**
129
+ * Generate prioritized interventions from escalation result and aggregated signals.
130
+ *
131
+ * Each intervention is actionable: it includes a title, description, affected files,
132
+ * a suggested fix, and optionally an agent-ready execution template.
133
+ *
134
+ * Interventions are sorted by priority (1 = highest), then by affected file count
135
+ * (more impacted first).
136
+ */
137
+ export function generateInterventions(escalation, signals) {
138
+ if (signals.length === 0 || escalation.level === 'none') {
139
+ return [];
140
+ }
141
+ const interventions = signals.map((signal) => {
142
+ const priority = assignPriority(signal.severity, escalation.level);
143
+ const title = generateTitle(signal.category);
144
+ const actionType = categoryToActionType(signal.category);
145
+ const suggestedFix = generateSuggestedFix(signal);
146
+ const id = createHash('sha256')
147
+ .update(`${signal.category}:${signal.id}:${signal.description}`)
148
+ .digest('hex')
149
+ .slice(0, 12);
150
+ const intervention = {
151
+ id: `int_${id}`,
152
+ priority,
153
+ title,
154
+ description: signal.description,
155
+ action_type: actionType,
156
+ category: signal.category,
157
+ affected_files: signal.affected_files,
158
+ affected_systems: [],
159
+ suggested_fix: suggestedFix,
160
+ suggested_actions: [suggestedFix],
161
+ estimated_impact: severity2impact(signal.severity),
162
+ };
163
+ // Generate agent template
164
+ intervention.agent_template = generateAgentTemplate(intervention);
165
+ return intervention;
166
+ });
167
+ // Sort by priority ascending (critical first), then by affected file count descending
168
+ const PRIORITY_RANK = {
169
+ critical: 0,
170
+ high: 1,
171
+ medium: 2,
172
+ low: 3,
173
+ };
174
+ interventions.sort((a, b) => {
175
+ const pa = PRIORITY_RANK[a.priority] ?? 3;
176
+ const pb = PRIORITY_RANK[b.priority] ?? 3;
177
+ if (pa !== pb)
178
+ return pa - pb;
179
+ return b.affected_files.length - a.affected_files.length;
180
+ });
181
+ return interventions;
182
+ }
183
+ function severity2impact(severity) {
184
+ switch (severity) {
185
+ case 'critical': return 15;
186
+ case 'high': return 10;
187
+ case 'medium': return 5;
188
+ case 'low': return 2;
189
+ }
190
+ }
191
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/intervention/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { aggregateSignals, normalizeSeverity, deduplicateSignals } from './signal-aggregator.js';
2
+ export { determineEscalation } from './escalation.js';
3
+ export { generateInterventions } from './generator.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intervention/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { aggregateSignals, normalizeSeverity, deduplicateSignals } from './signal-aggregator.js';
2
+ export { determineEscalation } from './escalation.js';
3
+ export { generateInterventions } from './generator.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intervention/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { AggregatedSignal } from '@codeledger/types';
2
+ /**
3
+ * Normalize severity from various subsystem formats to the unified scale.
4
+ *
5
+ * Detection subsystems use different scales:
6
+ * - Drift: NONE / MINOR / MAJOR / CRITICAL
7
+ * - Review Intelligence: P0 / P1 / P2
8
+ * - Severity matrix: HIGH / MEDIUM / LOW
9
+ * - Policy: error / warning / info
10
+ */
11
+ export declare function normalizeSeverity(raw: string): AggregatedSignal['severity'];
12
+ /**
13
+ * Deduplicate signals: when two signals share the same affected file set
14
+ * (sorted) and category, merge them — keeping the higher severity and
15
+ * concatenating descriptions.
16
+ */
17
+ export declare function deduplicateSignals(signals: AggregatedSignal[]): AggregatedSignal[];
18
+ /**
19
+ * Aggregate signals from all detection subsystems into a unified,
20
+ * deduplicated signal list with normalized severity.
21
+ *
22
+ * @param dataDir - Path to the `.codeledger` data directory
23
+ * @returns Deduplicated, severity-normalized signals sorted by severity descending
24
+ */
25
+ export declare function aggregateSignals(dataDir: string): Promise<AggregatedSignal[]>;
26
+ //# sourceMappingURL=signal-aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-aggregator.d.ts","sourceRoot":"","sources":["../../src/intervention/signal-aggregator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAchF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAsB3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAkClF;AA6MD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAiCnF"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Signal Aggregator — Architecture Intervention Engine
3
+ *
4
+ * Collects signals from all detection subsystems (drift, discovery,
5
+ * review intelligence, layer-d, policy, verify) into a unified,
6
+ * deduplicated signal list with normalized severity.
7
+ */
8
+ import { randomUUID } from 'node:crypto';
9
+ import { readFileSync, existsSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ /**
12
+ * Normalize severity from various subsystem formats to the unified scale.
13
+ *
14
+ * Detection subsystems use different scales:
15
+ * - Drift: NONE / MINOR / MAJOR / CRITICAL
16
+ * - Review Intelligence: P0 / P1 / P2
17
+ * - Severity matrix: HIGH / MEDIUM / LOW
18
+ * - Policy: error / warning / info
19
+ */
20
+ export function normalizeSeverity(raw) {
21
+ const upper = raw.toUpperCase().trim();
22
+ switch (upper) {
23
+ case 'CRITICAL':
24
+ case 'P0':
25
+ return 'critical';
26
+ case 'HIGH':
27
+ case 'MAJOR':
28
+ case 'P1':
29
+ case 'ERROR':
30
+ return 'high';
31
+ case 'MEDIUM':
32
+ case 'MINOR':
33
+ case 'P2':
34
+ case 'WARNING':
35
+ return 'medium';
36
+ case 'LOW':
37
+ case 'NONE':
38
+ case 'INFO':
39
+ default:
40
+ return 'low';
41
+ }
42
+ }
43
+ /**
44
+ * Deduplicate signals: when two signals share the same affected file set
45
+ * (sorted) and category, merge them — keeping the higher severity and
46
+ * concatenating descriptions.
47
+ */
48
+ export function deduplicateSignals(signals) {
49
+ const SEVERITY_ORDER = {
50
+ critical: 4,
51
+ high: 3,
52
+ medium: 2,
53
+ low: 1,
54
+ };
55
+ const map = new Map();
56
+ for (const signal of signals) {
57
+ const filesKey = [...signal.affected_files].sort().join('|');
58
+ const dedupeKey = `${signal.category}::${filesKey}`;
59
+ const existing = map.get(dedupeKey);
60
+ if (existing) {
61
+ // Keep higher severity
62
+ if (SEVERITY_ORDER[signal.severity] > SEVERITY_ORDER[existing.severity]) {
63
+ existing.severity = signal.severity;
64
+ }
65
+ // Merge descriptions if different
66
+ if (!existing.description.includes(signal.description)) {
67
+ existing.description = `${existing.description}; ${signal.description}`;
68
+ }
69
+ // Merge metadata
70
+ if (signal.metadata) {
71
+ existing.metadata = { ...existing.metadata, ...signal.metadata };
72
+ }
73
+ }
74
+ else {
75
+ map.set(dedupeKey, { ...signal });
76
+ }
77
+ }
78
+ return [...map.values()];
79
+ }
80
+ /**
81
+ * Collect drift signals from .codeledger/cache/ directory.
82
+ */
83
+ function collectDriftSignals(dataDir) {
84
+ const signals = [];
85
+ const driftPath = join(dataDir, 'cache', 'drift-result.json');
86
+ if (!existsSync(driftPath))
87
+ return signals;
88
+ try {
89
+ const raw = JSON.parse(readFileSync(driftPath, 'utf-8'));
90
+ if (raw.drift_level && raw.drift_level !== 'NONE') {
91
+ const topReasons = (raw.reasons ?? [])
92
+ .filter((r) => r.distance > 0.1)
93
+ .map((r) => r.field);
94
+ signals.push({
95
+ source: 'drift',
96
+ severity: raw.drift_level,
97
+ category: 'drift_spike',
98
+ description: `Drift detected (score: ${raw.drift_score ?? 0}, level: ${raw.drift_level}). Top drift fields: ${topReasons.join(', ') || 'none'}`,
99
+ affected_files: [],
100
+ metadata: { drift_score: raw.drift_score, drift_level: raw.drift_level },
101
+ });
102
+ }
103
+ }
104
+ catch {
105
+ // Malformed drift data — skip
106
+ }
107
+ return signals;
108
+ }
109
+ /**
110
+ * Collect review intelligence signals from verify results.
111
+ */
112
+ function collectReviewIntelligenceSignals(dataDir) {
113
+ const signals = [];
114
+ const verifyPath = join(dataDir, 'cache', 'verify-result.json');
115
+ if (!existsSync(verifyPath))
116
+ return signals;
117
+ try {
118
+ const raw = JSON.parse(readFileSync(verifyPath, 'utf-8'));
119
+ const findings = raw.review_intelligence?.findings ?? [];
120
+ for (const finding of findings) {
121
+ if (finding.disposition === 'baselined' || finding.disposition === 'suppressed')
122
+ continue;
123
+ const category = mapRuleToCategory(finding.rule_id ?? '');
124
+ signals.push({
125
+ source: 'review_intelligence',
126
+ severity: finding.severity ?? 'P2',
127
+ category,
128
+ description: finding.message ?? `Violation: ${finding.rule_id ?? 'unknown'}`,
129
+ affected_files: finding.file ? [`${finding.file}${finding.line ? `:${finding.line}` : ''}`] : [],
130
+ metadata: { rule_id: finding.rule_id },
131
+ });
132
+ }
133
+ }
134
+ catch {
135
+ // Malformed verify data — skip
136
+ }
137
+ return signals;
138
+ }
139
+ /**
140
+ * Map a review intelligence rule_id to an intervention category.
141
+ */
142
+ function mapRuleToCategory(ruleId) {
143
+ if (ruleId.includes('runtime_validation'))
144
+ return 'architectural_violation';
145
+ if (ruleId.includes('outbound_io'))
146
+ return 'architectural_violation';
147
+ if (ruleId.includes('test_integrity'))
148
+ return 'test_gap';
149
+ if (ruleId.includes('architecture_graph'))
150
+ return 'architectural_violation';
151
+ if (ruleId.includes('platform_helpers'))
152
+ return 'duplication_pressure';
153
+ if (ruleId.includes('build_runtime'))
154
+ return 'governance_breakdown';
155
+ return 'architectural_violation';
156
+ }
157
+ /**
158
+ * Collect discovery (overlap/duplication) signals.
159
+ */
160
+ function collectDiscoverySignals(dataDir) {
161
+ const signals = [];
162
+ const discoveryPath = join(dataDir, 'cache', 'discovery-result.json');
163
+ if (!existsSync(discoveryPath))
164
+ return signals;
165
+ try {
166
+ const raw = JSON.parse(readFileSync(discoveryPath, 'utf-8'));
167
+ if (raw.overlap === 'STRONG_OVERLAP' || raw.overlap === 'FEATURE_ALREADY_EXISTS') {
168
+ const affectedFiles = (raw.matches ?? []).map((m) => m.file);
169
+ signals.push({
170
+ source: 'discovery',
171
+ severity: raw.overlap === 'FEATURE_ALREADY_EXISTS' ? 'HIGH' : 'MEDIUM',
172
+ category: 'duplication_pressure',
173
+ description: raw.duplication_risk ?? `Duplication detected: ${raw.overlap}`,
174
+ affected_files: affectedFiles,
175
+ metadata: { overlap: raw.overlap },
176
+ });
177
+ }
178
+ }
179
+ catch {
180
+ // Malformed discovery data — skip
181
+ }
182
+ return signals;
183
+ }
184
+ /**
185
+ * Collect Layer D (semantic conflict) signals.
186
+ */
187
+ function collectLayerDSignals(dataDir) {
188
+ const signals = [];
189
+ const layerDPath = join(dataDir, 'cache', 'layer-d-result.json');
190
+ if (!existsSync(layerDPath))
191
+ return signals;
192
+ try {
193
+ const raw = JSON.parse(readFileSync(layerDPath, 'utf-8'));
194
+ for (const conflict of raw.conflicts ?? []) {
195
+ const sev = (conflict.severity ?? 0) >= 0.7 ? 'HIGH' : (conflict.severity ?? 0) >= 0.4 ? 'MEDIUM' : 'LOW';
196
+ signals.push({
197
+ source: 'layer_d',
198
+ severity: sev,
199
+ category: 'architectural_violation',
200
+ description: conflict.description ?? `Semantic conflict on ${conflict.affectedSymbol ?? 'unknown'}`,
201
+ affected_files: conflict.file ? [conflict.file] : [],
202
+ metadata: { symbol: conflict.affectedSymbol, severity_score: conflict.severity },
203
+ });
204
+ }
205
+ }
206
+ catch {
207
+ // Malformed layer-d data — skip
208
+ }
209
+ return signals;
210
+ }
211
+ /**
212
+ * Collect policy violation signals.
213
+ */
214
+ function collectPolicySignals(dataDir) {
215
+ const signals = [];
216
+ const policyPath = join(dataDir, 'cache', 'policy-result.json');
217
+ if (!existsSync(policyPath))
218
+ return signals;
219
+ try {
220
+ const raw = JSON.parse(readFileSync(policyPath, 'utf-8'));
221
+ for (const violation of raw.violations ?? []) {
222
+ signals.push({
223
+ source: 'policy',
224
+ severity: violation.severity ?? 'WARNING',
225
+ category: 'governance_breakdown',
226
+ description: violation.message ?? `Policy violation: ${violation.rule ?? 'unknown'}`,
227
+ affected_files: violation.files ?? [],
228
+ metadata: { rule: violation.rule },
229
+ });
230
+ }
231
+ }
232
+ catch {
233
+ // Malformed policy data — skip
234
+ }
235
+ return signals;
236
+ }
237
+ /**
238
+ * Aggregate signals from all detection subsystems into a unified,
239
+ * deduplicated signal list with normalized severity.
240
+ *
241
+ * @param dataDir - Path to the `.codeledger` data directory
242
+ * @returns Deduplicated, severity-normalized signals sorted by severity descending
243
+ */
244
+ export async function aggregateSignals(dataDir) {
245
+ const rawSignals = [
246
+ ...collectDriftSignals(dataDir),
247
+ ...collectReviewIntelligenceSignals(dataDir),
248
+ ...collectDiscoverySignals(dataDir),
249
+ ...collectLayerDSignals(dataDir),
250
+ ...collectPolicySignals(dataDir),
251
+ ];
252
+ const now = Date.now();
253
+ const normalized = rawSignals.map((raw) => ({
254
+ id: randomUUID(),
255
+ source: raw.source,
256
+ severity: normalizeSeverity(raw.severity),
257
+ category: raw.category,
258
+ description: raw.description,
259
+ affected_files: raw.affected_files,
260
+ timestamp: now,
261
+ metadata: raw.metadata,
262
+ }));
263
+ const deduplicated = deduplicateSignals(normalized);
264
+ // Sort by severity: critical > high > medium > low
265
+ const SEVERITY_ORDER = {
266
+ critical: 4,
267
+ high: 3,
268
+ medium: 2,
269
+ low: 1,
270
+ };
271
+ deduplicated.sort((a, b) => SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity]);
272
+ return deduplicated;
273
+ }
274
+ //# sourceMappingURL=signal-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-aggregator.js","sourceRoot":"","sources":["../../src/intervention/signal-aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Layer D — Semantic/Signature Conflict Detector
3
+ *
4
+ * Compares public surfaces across sessions to detect breaking changes
5
+ * that affect other sessions' dependency surfaces.
6
+ */
7
+ import type { PublicSurfaceEntry, SessionPublicSurface, SignatureChange, LayerDAnalysis } from '@codeledger/types';
8
+ /** Detect signature changes between two surfaces of the same file */
9
+ export declare function detectSignatureChanges(previous: PublicSurfaceEntry[], current: PublicSurfaceEntry[]): SignatureChange[];
10
+ /** Detect Layer D conflicts across multiple sessions */
11
+ export declare function detectLayerDConflicts(sessions: SessionPublicSurface[], dependencySurfaces: Map<string, string[]>): LayerDAnalysis;
12
+ //# sourceMappingURL=conflict-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-detector.d.ts","sourceRoot":"","sources":["../../src/layer-d/conflict-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EAEf,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,OAAO,EAAE,kBAAkB,EAAE,GAC5B,eAAe,EAAE,CA8CnB;AA4BD,wDAAwD;AACxD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACxC,cAAc,CAkDhB"}