contradiction-mcp 0.1.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.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +536 -0
  3. package/bin/cli.js +182 -0
  4. package/dist/analysis/claimMatcher.d.ts +48 -0
  5. package/dist/analysis/claimMatcher.js +131 -0
  6. package/dist/analysis/claimMatcher.js.map +1 -0
  7. package/dist/analysis/claimRelationship.d.ts +15 -0
  8. package/dist/analysis/claimRelationship.js +12 -0
  9. package/dist/analysis/claimRelationship.js.map +1 -0
  10. package/dist/analysis/confidenceScorer.d.ts +40 -0
  11. package/dist/analysis/confidenceScorer.js +59 -0
  12. package/dist/analysis/confidenceScorer.js.map +1 -0
  13. package/dist/analysis/contextAnalyzer.d.ts +13 -0
  14. package/dist/analysis/contextAnalyzer.js +187 -0
  15. package/dist/analysis/contextAnalyzer.js.map +1 -0
  16. package/dist/analysis/contradictionClassifier.d.ts +16 -0
  17. package/dist/analysis/contradictionClassifier.js +141 -0
  18. package/dist/analysis/contradictionClassifier.js.map +1 -0
  19. package/dist/analysis/contradictionEngine.d.ts +29 -0
  20. package/dist/analysis/contradictionEngine.js +284 -0
  21. package/dist/analysis/contradictionEngine.js.map +1 -0
  22. package/dist/analysis/explanationBuilder.d.ts +36 -0
  23. package/dist/analysis/explanationBuilder.js +77 -0
  24. package/dist/analysis/explanationBuilder.js.map +1 -0
  25. package/dist/analysis/valueComparator.d.ts +38 -0
  26. package/dist/analysis/valueComparator.js +418 -0
  27. package/dist/analysis/valueComparator.js.map +1 -0
  28. package/dist/config/env.d.ts +46 -0
  29. package/dist/config/env.js +34 -0
  30. package/dist/config/env.js.map +1 -0
  31. package/dist/connectors/base/connectorUtils.d.ts +26 -0
  32. package/dist/connectors/base/connectorUtils.js +63 -0
  33. package/dist/connectors/base/connectorUtils.js.map +1 -0
  34. package/dist/connectors/base/security.d.ts +11 -0
  35. package/dist/connectors/base/security.js +9 -0
  36. package/dist/connectors/base/security.js.map +1 -0
  37. package/dist/connectors/connectorRegistry.d.ts +43 -0
  38. package/dist/connectors/connectorRegistry.js +91 -0
  39. package/dist/connectors/connectorRegistry.js.map +1 -0
  40. package/dist/connectors/document/documentConnector.d.ts +45 -0
  41. package/dist/connectors/document/documentConnector.js +410 -0
  42. package/dist/connectors/document/documentConnector.js.map +1 -0
  43. package/dist/connectors/github/githubClient.d.ts +52 -0
  44. package/dist/connectors/github/githubClient.js +207 -0
  45. package/dist/connectors/github/githubClient.js.map +1 -0
  46. package/dist/connectors/github/githubConnector.d.ts +26 -0
  47. package/dist/connectors/github/githubConnector.js +169 -0
  48. package/dist/connectors/github/githubConnector.js.map +1 -0
  49. package/dist/connectors/github/githubExtractor.d.ts +26 -0
  50. package/dist/connectors/github/githubExtractor.js +469 -0
  51. package/dist/connectors/github/githubExtractor.js.map +1 -0
  52. package/dist/connectors/github/githubNormalizer.d.ts +11 -0
  53. package/dist/connectors/github/githubNormalizer.js +24 -0
  54. package/dist/connectors/github/githubNormalizer.js.map +1 -0
  55. package/dist/connectors/github/githubTypes.d.ts +55 -0
  56. package/dist/connectors/github/githubTypes.js +2 -0
  57. package/dist/connectors/github/githubTypes.js.map +1 -0
  58. package/dist/connectors/syncService.d.ts +60 -0
  59. package/dist/connectors/syncService.js +176 -0
  60. package/dist/connectors/syncService.js.map +1 -0
  61. package/dist/connectors/types/connector.d.ts +34 -0
  62. package/dist/connectors/types/connector.js +2 -0
  63. package/dist/connectors/types/connector.js.map +1 -0
  64. package/dist/connectors/types/fetchResult.d.ts +39 -0
  65. package/dist/connectors/types/fetchResult.js +2 -0
  66. package/dist/connectors/types/fetchResult.js.map +1 -0
  67. package/dist/connectors/website/ssrfGuard.d.ts +11 -0
  68. package/dist/connectors/website/ssrfGuard.js +122 -0
  69. package/dist/connectors/website/ssrfGuard.js.map +1 -0
  70. package/dist/connectors/website/websiteConnector.d.ts +30 -0
  71. package/dist/connectors/website/websiteConnector.js +231 -0
  72. package/dist/connectors/website/websiteConnector.js.map +1 -0
  73. package/dist/discovery/candidateGenerator.d.ts +12 -0
  74. package/dist/discovery/candidateGenerator.js +110 -0
  75. package/dist/discovery/candidateGenerator.js.map +1 -0
  76. package/dist/discovery/contradictionScanner.d.ts +30 -0
  77. package/dist/discovery/contradictionScanner.js +47 -0
  78. package/dist/discovery/contradictionScanner.js.map +1 -0
  79. package/dist/discovery/discoveryService.d.ts +37 -0
  80. package/dist/discovery/discoveryService.js +131 -0
  81. package/dist/discovery/discoveryService.js.map +1 -0
  82. package/dist/discovery/rankingService.d.ts +34 -0
  83. package/dist/discovery/rankingService.js +52 -0
  84. package/dist/discovery/rankingService.js.map +1 -0
  85. package/dist/discovery/similarityIndex.d.ts +20 -0
  86. package/dist/discovery/similarityIndex.js +89 -0
  87. package/dist/discovery/similarityIndex.js.map +1 -0
  88. package/dist/domain/entities/claim.d.ts +99 -0
  89. package/dist/domain/entities/claim.js +92 -0
  90. package/dist/domain/entities/claim.js.map +1 -0
  91. package/dist/domain/entities/contradiction.d.ts +110 -0
  92. package/dist/domain/entities/contradiction.js +74 -0
  93. package/dist/domain/entities/contradiction.js.map +1 -0
  94. package/dist/domain/entities/source.d.ts +43 -0
  95. package/dist/domain/entities/source.js +35 -0
  96. package/dist/domain/entities/source.js.map +1 -0
  97. package/dist/domain/types/common.d.ts +46 -0
  98. package/dist/domain/types/common.js +74 -0
  99. package/dist/domain/types/common.js.map +1 -0
  100. package/dist/httpServer.d.ts +25 -0
  101. package/dist/httpServer.js +164 -0
  102. package/dist/httpServer.js.map +1 -0
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.js +94 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/intelligence/authorityScorer.d.ts +20 -0
  107. package/dist/intelligence/authorityScorer.js +103 -0
  108. package/dist/intelligence/authorityScorer.js.map +1 -0
  109. package/dist/intelligence/entityResolver.d.ts +33 -0
  110. package/dist/intelligence/entityResolver.js +152 -0
  111. package/dist/intelligence/entityResolver.js.map +1 -0
  112. package/dist/intelligence/evidenceEvaluator.d.ts +15 -0
  113. package/dist/intelligence/evidenceEvaluator.js +63 -0
  114. package/dist/intelligence/evidenceEvaluator.js.map +1 -0
  115. package/dist/intelligence/freshnessScorer.d.ts +25 -0
  116. package/dist/intelligence/freshnessScorer.js +90 -0
  117. package/dist/intelligence/freshnessScorer.js.map +1 -0
  118. package/dist/intelligence/provenanceAnalyzer.d.ts +19 -0
  119. package/dist/intelligence/provenanceAnalyzer.js +33 -0
  120. package/dist/intelligence/provenanceAnalyzer.js.map +1 -0
  121. package/dist/intelligence/resolutionAdvisor.d.ts +40 -0
  122. package/dist/intelligence/resolutionAdvisor.js +118 -0
  123. package/dist/intelligence/resolutionAdvisor.js.map +1 -0
  124. package/dist/intelligence/semanticMatcher.d.ts +21 -0
  125. package/dist/intelligence/semanticMatcher.js +71 -0
  126. package/dist/intelligence/semanticMatcher.js.map +1 -0
  127. package/dist/scripts/comprehensiveVerification.d.ts +5 -0
  128. package/dist/scripts/comprehensiveVerification.js +961 -0
  129. package/dist/scripts/comprehensiveVerification.js.map +1 -0
  130. package/dist/scripts/finalLiveDemo.d.ts +5 -0
  131. package/dist/scripts/finalLiveDemo.js +226 -0
  132. package/dist/scripts/finalLiveDemo.js.map +1 -0
  133. package/dist/scripts/liveMcpSmoke.d.ts +1 -0
  134. package/dist/scripts/liveMcpSmoke.js +89 -0
  135. package/dist/scripts/liveMcpSmoke.js.map +1 -0
  136. package/dist/scripts/seedDemoData.d.ts +6 -0
  137. package/dist/scripts/seedDemoData.js +179 -0
  138. package/dist/scripts/seedDemoData.js.map +1 -0
  139. package/dist/server.d.ts +28 -0
  140. package/dist/server.js +1264 -0
  141. package/dist/server.js.map +1 -0
  142. package/dist/services/analysisService.d.ts +40 -0
  143. package/dist/services/analysisService.js +65 -0
  144. package/dist/services/analysisService.js.map +1 -0
  145. package/dist/services/healthService.d.ts +42 -0
  146. package/dist/services/healthService.js +50 -0
  147. package/dist/services/healthService.js.map +1 -0
  148. package/dist/services/metricsService.d.ts +35 -0
  149. package/dist/services/metricsService.js +57 -0
  150. package/dist/services/metricsService.js.map +1 -0
  151. package/dist/services/rateLimiter.d.ts +23 -0
  152. package/dist/services/rateLimiter.js +45 -0
  153. package/dist/services/rateLimiter.js.map +1 -0
  154. package/dist/services/reviewService.d.ts +32 -0
  155. package/dist/services/reviewService.js +94 -0
  156. package/dist/services/reviewService.js.map +1 -0
  157. package/dist/services/schedulerService.d.ts +30 -0
  158. package/dist/services/schedulerService.js +89 -0
  159. package/dist/services/schedulerService.js.map +1 -0
  160. package/dist/storage/backupService.d.ts +14 -0
  161. package/dist/storage/backupService.js +90 -0
  162. package/dist/storage/backupService.js.map +1 -0
  163. package/dist/storage/database.d.ts +119 -0
  164. package/dist/storage/database.js +935 -0
  165. package/dist/storage/database.js.map +1 -0
  166. package/dist/storage/migrations/001_initial.sql +63 -0
  167. package/dist/storage/migrations/002_discovery_uniqueness.sql +8 -0
  168. package/dist/storage/migrations/003_connector_identity.sql +7 -0
  169. package/dist/storage/migrations/004_claim_context.sql +15 -0
  170. package/dist/storage/migrations/005_claim_history.sql +26 -0
  171. package/dist/storage/migrations/006_contradiction_resolution.sql +27 -0
  172. package/dist/utils/logger.d.ts +20 -0
  173. package/dist/utils/logger.js +48 -0
  174. package/dist/utils/logger.js.map +1 -0
  175. package/package.json +73 -0
@@ -0,0 +1,187 @@
1
+ export class ContextAnalyzer {
2
+ analyze(claimA, claimB) {
3
+ const divergences = [];
4
+ // 1. Check Set Membership (e.g., CI matrix items)
5
+ const mvcA = claimA.multiValueContext;
6
+ const mvcB = claimB.multiValueContext;
7
+ const isSetMembership = Boolean(mvcA && mvcB) &&
8
+ mvcA === mvcB &&
9
+ (mvcA === 'ci_matrix' || (mvcA ? mvcA.includes('matrix') || mvcA.includes('set') : false));
10
+ if (isSetMembership && mvcA) {
11
+ return {
12
+ relationship: {
13
+ type: 'SET_MEMBERSHIP',
14
+ confidence: 0.95,
15
+ explanation: `Both claims are members of the same multi-value context (${claimA.multiValueContext}), representing parallel configurations or matrix dimensions rather than conflicting assertions.`,
16
+ isContradictionEligible: false,
17
+ contextFactors: {
18
+ environmentMatch: claimA.environment === claimB.environment,
19
+ scopeMatch: claimA.scope === claimB.scope,
20
+ roleMatch: claimA.sourceRole === claimB.sourceRole,
21
+ temporalMatch: true,
22
+ setMembershipMatch: true,
23
+ },
24
+ },
25
+ isContextCompatible: true,
26
+ compatibilityScore: 1.0,
27
+ reason: 'Claims belong to a valid multi-value set/matrix.',
28
+ divergenceDimensions: [],
29
+ };
30
+ }
31
+ // 2. Check Historical / Temporal Disjointness
32
+ const isTemporalDisjoint = claimA.isHistorical ||
33
+ claimB.isHistorical ||
34
+ claimA.sourceRole === 'historical' ||
35
+ claimB.sourceRole === 'historical' ||
36
+ (claimA.validUntil && claimB.validFrom && claimA.validUntil <= claimB.validFrom) ||
37
+ (claimB.validUntil && claimA.validFrom && claimB.validUntil <= claimA.validFrom);
38
+ if (isTemporalDisjoint) {
39
+ divergences.push('temporal');
40
+ const historicalClaim = claimA.isHistorical || claimA.sourceRole === 'historical' ? 'Claim A' : 'Claim B';
41
+ return {
42
+ relationship: {
43
+ type: 'HISTORICAL',
44
+ confidence: 0.9,
45
+ explanation: `${historicalClaim} describes a historical, previous, or non-overlapping time state. Historical states do not contradict active or subsequent specifications.`,
46
+ isContradictionEligible: false,
47
+ contextFactors: {
48
+ environmentMatch: claimA.environment === claimB.environment,
49
+ scopeMatch: claimA.scope === claimB.scope,
50
+ roleMatch: claimA.sourceRole === claimB.sourceRole,
51
+ temporalMatch: false,
52
+ setMembershipMatch: false,
53
+ },
54
+ },
55
+ isContextCompatible: false,
56
+ compatibilityScore: 0.2,
57
+ reason: 'One or both claims are historical or temporally disjoint.',
58
+ divergenceDimensions: divergences,
59
+ };
60
+ }
61
+ // 3. Check Examples / Illustrative Samples
62
+ const isExample = claimA.sourceRole === 'example' ||
63
+ claimB.sourceRole === 'example' ||
64
+ (claimA.metadata &&
65
+ String(claimA.metadata.evidence || '')
66
+ .toLowerCase()
67
+ .includes('example')) ||
68
+ (claimB.metadata &&
69
+ String(claimB.metadata.evidence || '')
70
+ .toLowerCase()
71
+ .includes('example'));
72
+ if (isExample) {
73
+ divergences.push('sourceRole');
74
+ return {
75
+ relationship: {
76
+ type: 'EXAMPLE',
77
+ confidence: 0.85,
78
+ explanation: 'At least one claim originates from an illustrative tutorial, sample snippet, or example command rather than a normative production specification.',
79
+ isContradictionEligible: false,
80
+ contextFactors: {
81
+ environmentMatch: claimA.environment === claimB.environment,
82
+ scopeMatch: claimA.scope === claimB.scope,
83
+ roleMatch: false,
84
+ temporalMatch: true,
85
+ setMembershipMatch: false,
86
+ },
87
+ },
88
+ isContextCompatible: false,
89
+ compatibilityScore: 0.3,
90
+ reason: 'Illustrative examples do not contradict canonical configuration.',
91
+ divergenceDimensions: divergences,
92
+ };
93
+ }
94
+ // 4. Check Environment Divergence (e.g. dev vs prod, staging vs prod)
95
+ const envA = (claimA.environment || 'unknown').toLowerCase();
96
+ const envB = (claimB.environment || 'unknown').toLowerCase();
97
+ const isEnvDisjoint = (envA === 'development' && (envB === 'production' || envB === 'deployment')) ||
98
+ (envB === 'development' && (envA === 'production' || envA === 'deployment')) ||
99
+ (envA === 'staging' && envB === 'production') ||
100
+ (envB === 'staging' && envA === 'production') ||
101
+ (envA === 'testing' && envB === 'production') ||
102
+ (envB === 'testing' && envA === 'production');
103
+ if (isEnvDisjoint) {
104
+ divergences.push('environment');
105
+ return {
106
+ relationship: {
107
+ type: 'DIFFERENT_ENVIRONMENT',
108
+ confidence: 0.9,
109
+ explanation: `Claims apply to distinct non-overlapping environments (${envA} vs ${envB}). Distinct environments legitimately maintain different parameter values.`,
110
+ isContradictionEligible: false,
111
+ contextFactors: {
112
+ environmentMatch: false,
113
+ scopeMatch: claimA.scope === claimB.scope,
114
+ roleMatch: claimA.sourceRole === claimB.sourceRole,
115
+ temporalMatch: true,
116
+ setMembershipMatch: false,
117
+ },
118
+ },
119
+ isContextCompatible: false,
120
+ compatibilityScore: 0.2,
121
+ reason: `Environments '${envA}' and '${envB}' are distinct operational tiers.`,
122
+ divergenceDimensions: divergences,
123
+ };
124
+ }
125
+ // 5. Check Scope Divergence
126
+ const scopeA = (claimA.scope || 'unknown').toLowerCase();
127
+ const scopeB = (claimB.scope || 'unknown').toLowerCase();
128
+ // If scope differs, but both describe global repo requirement, evaluate cautiously
129
+ if (scopeA !== 'unknown' &&
130
+ scopeB !== 'unknown' &&
131
+ scopeA !== scopeB &&
132
+ scopeA === 'service' &&
133
+ scopeB === 'repository') {
134
+ divergences.push('scope');
135
+ return {
136
+ relationship: {
137
+ type: 'DIFFERENT_SCOPE',
138
+ confidence: 0.8,
139
+ explanation: `Claims operate at distinct architectural scopes (${scopeA} vs ${scopeB}).`,
140
+ isContradictionEligible: false,
141
+ contextFactors: {
142
+ environmentMatch: envA === envB,
143
+ scopeMatch: false,
144
+ roleMatch: claimA.sourceRole === claimB.sourceRole,
145
+ temporalMatch: true,
146
+ setMembershipMatch: false,
147
+ },
148
+ },
149
+ isContextCompatible: false,
150
+ compatibilityScore: 0.4,
151
+ reason: `Scopes '${scopeA}' and '${scopeB}' represent distinct structural layers.`,
152
+ divergenceDimensions: divergences,
153
+ };
154
+ }
155
+ // 6. Contexts are compatible / comparable
156
+ const envMatch = envA === envB ||
157
+ envA === 'unknown' ||
158
+ envB === 'unknown' ||
159
+ envA === 'documentation' ||
160
+ envB === 'documentation';
161
+ const scopeMatch = scopeA === scopeB || scopeA === 'unknown' || scopeB === 'unknown';
162
+ const roleMatch = claimA.sourceRole === claimB.sourceRole ||
163
+ claimA.sourceRole === 'unknown' ||
164
+ claimB.sourceRole === 'unknown';
165
+ return {
166
+ relationship: {
167
+ type: 'SAME_FACT',
168
+ confidence: 0.9,
169
+ explanation: 'Both claims share compatible operational environments, scopes, and source roles.',
170
+ isContradictionEligible: true,
171
+ contextFactors: {
172
+ environmentMatch: envMatch,
173
+ scopeMatch,
174
+ roleMatch,
175
+ temporalMatch: true,
176
+ setMembershipMatch: false,
177
+ },
178
+ },
179
+ isContextCompatible: true,
180
+ compatibilityScore: 0.95,
181
+ reason: 'Claims share compatible operational context.',
182
+ divergenceDimensions: [],
183
+ };
184
+ }
185
+ }
186
+ export const contextAnalyzer = new ContextAnalyzer();
187
+ //# sourceMappingURL=contextAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextAnalyzer.js","sourceRoot":"","sources":["../../src/analysis/contextAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ContradictionSeverity, ContradictionType } from '../domain/entities/contradiction.js';
2
+ import { ValueComparisonResult } from './valueComparator.js';
3
+ export interface ClassificationResult {
4
+ contradictionType: ContradictionType;
5
+ severity: ContradictionSeverity;
6
+ categoryReason: string;
7
+ }
8
+ export declare class ContradictionClassifier {
9
+ classify(options: {
10
+ predicate: string;
11
+ valueType: string;
12
+ comparison: ValueComparisonResult;
13
+ }): ClassificationResult;
14
+ private determineSeverity;
15
+ }
16
+ export declare const contradictionClassifier: ContradictionClassifier;
@@ -0,0 +1,141 @@
1
+ export class ContradictionClassifier {
2
+ classify(options) {
3
+ const { predicate, valueType, comparison } = options;
4
+ const pred = predicate.toLowerCase().trim();
5
+ const type = valueType.toLowerCase().trim();
6
+ // 1. Determine Contradiction Type
7
+ let contradictionType = 'VALUE_MISMATCH';
8
+ let categoryReason = 'Values represent distinct or incompatible data';
9
+ if (type === 'version' || pred.includes('version') || pred.includes('release')) {
10
+ contradictionType = 'VERSION_MISMATCH';
11
+ categoryReason =
12
+ 'Claims specify different version specifications for the same dependency or component';
13
+ }
14
+ else if (type === 'date' ||
15
+ pred.includes('date') ||
16
+ pred.includes('deadline') ||
17
+ pred.includes('expires')) {
18
+ contradictionType = 'DATE_MISMATCH';
19
+ categoryReason = 'Claims report conflicting temporal milestones or dates';
20
+ }
21
+ else if (type === 'status' ||
22
+ pred.includes('status') ||
23
+ pred.includes('state') ||
24
+ pred.includes('phase') ||
25
+ pred.includes('condition')) {
26
+ contradictionType = 'STATUS_MISMATCH';
27
+ categoryReason = 'Claims assert contradictory lifecycle, operational, or execution statuses';
28
+ }
29
+ else if (type === 'quantity' ||
30
+ type === 'number' ||
31
+ pred.includes('count') ||
32
+ pred.includes('quantity') ||
33
+ pred.includes('limit') ||
34
+ pred.includes('capacity') ||
35
+ pred.includes('quota')) {
36
+ contradictionType = 'QUANTITY_MISMATCH';
37
+ categoryReason = 'Claims state differing numeric quantities, counts, or capacity thresholds';
38
+ }
39
+ else if (type === 'policy' ||
40
+ pred.includes('policy') ||
41
+ pred.includes('rule') ||
42
+ pred.includes('permission') ||
43
+ pred.includes('access') ||
44
+ pred.includes('auth') ||
45
+ pred.includes('security')) {
46
+ contradictionType = 'POLICY_MISMATCH';
47
+ categoryReason = 'Claims define mutually incompatible policies, security controls, or rules';
48
+ }
49
+ else if (pred.includes('exists') ||
50
+ pred.includes('deleted') ||
51
+ pred.includes('presence') ||
52
+ pred.includes('available') ||
53
+ comparison.differenceType === 'EMPTY_VS_NONEMPTY') {
54
+ contradictionType = 'EXISTENCE_MISMATCH';
55
+ categoryReason =
56
+ 'One claim asserts the presence or existence of an entity while the other negates or omits it';
57
+ }
58
+ else if (type === 'configuration' ||
59
+ pred.includes('config') ||
60
+ pred.includes('setting') ||
61
+ pred.includes('parameter') ||
62
+ pred.includes('port') ||
63
+ pred.includes('host')) {
64
+ contradictionType = 'CONFIGURATION_MISMATCH';
65
+ categoryReason = 'Claims assert contradictory configuration parameters or runtime settings';
66
+ }
67
+ else if (type === 'requirement' ||
68
+ pred.includes('require') ||
69
+ pred.includes('need') ||
70
+ pred.includes('prerequisite')) {
71
+ contradictionType = 'REQUIREMENT_MISMATCH';
72
+ categoryReason =
73
+ 'Claims specify mutually incompatible operational prerequisites or requirements';
74
+ }
75
+ else if (pred.includes('duration') || pred.includes('interval') || pred.includes('period')) {
76
+ contradictionType = 'TEMPORAL_MISMATCH';
77
+ categoryReason = 'Claims assert inconsistent temporal intervals or durations';
78
+ }
79
+ else if (pred.includes('owner') ||
80
+ pred.includes('assignee') ||
81
+ pred.includes('author') ||
82
+ pred.includes('lead') ||
83
+ pred.includes('entity')) {
84
+ contradictionType = 'ENTITY_MISMATCH';
85
+ categoryReason =
86
+ 'Claims associate different entities, identities, or owners with the same role';
87
+ }
88
+ // 2. Determine Severity
89
+ const severity = this.determineSeverity({
90
+ contradictionType,
91
+ predicate: pred,
92
+ valueType: type,
93
+ comparison,
94
+ });
95
+ return {
96
+ contradictionType,
97
+ severity,
98
+ categoryReason,
99
+ };
100
+ }
101
+ determineSeverity(options) {
102
+ const { contradictionType, predicate, valueType, comparison } = options;
103
+ // CRITICAL cases: security, authorization, destructive configs
104
+ if (contradictionType === 'POLICY_MISMATCH' ||
105
+ predicate.includes('security') ||
106
+ predicate.includes('auth') ||
107
+ predicate.includes('permission')) {
108
+ return 'CRITICAL';
109
+ }
110
+ // HIGH cases: environment conflicts (production vs development/staging), financial/price differences, major version differences
111
+ if (predicate.includes('environment') ||
112
+ predicate.includes('env') ||
113
+ (comparison.normalizedA === 'production' && comparison.normalizedB !== 'production') ||
114
+ (comparison.normalizedB === 'production' && comparison.normalizedA !== 'production')) {
115
+ return 'HIGH';
116
+ }
117
+ if (valueType === 'price' ||
118
+ predicate.includes('price') ||
119
+ predicate.includes('amount') ||
120
+ predicate.includes('cost')) {
121
+ return 'HIGH';
122
+ }
123
+ if (comparison.differenceType === 'MAJOR_VERSION_MISMATCH') {
124
+ return 'HIGH';
125
+ }
126
+ // MEDIUM cases: standard version, dates, quantities
127
+ if (contradictionType === 'VERSION_MISMATCH' ||
128
+ contradictionType === 'DATE_MISMATCH' ||
129
+ contradictionType === 'STATUS_MISMATCH' ||
130
+ contradictionType === 'QUANTITY_MISMATCH') {
131
+ return 'MEDIUM';
132
+ }
133
+ // LOW cases: minor string variation or weak difference
134
+ if (comparison.differenceStrength < 0.6) {
135
+ return 'LOW';
136
+ }
137
+ return 'MEDIUM';
138
+ }
139
+ }
140
+ export const contradictionClassifier = new ContradictionClassifier();
141
+ //# sourceMappingURL=contradictionClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contradictionClassifier.js","sourceRoot":"","sources":["../../src/analysis/contradictionClassifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { Claim } from '../domain/entities/claim.js';
2
+ import { Source } from '../domain/entities/source.js';
3
+ import { ContradictionSeverity, ContradictionType } from '../domain/entities/contradiction.js';
4
+ import { ClaimMatchResult } from './claimMatcher.js';
5
+ import { ValueComparisonResult } from './valueComparator.js';
6
+ import { ContextAnalysisResult } from './contextAnalyzer.js';
7
+ import { ClaimRelationship } from './claimRelationship.js';
8
+ export type ContradictionAnalysisStatus = 'CONFIRMED_CONTRADICTION' | 'NOT_A_CONTRADICTION' | 'UNCERTAIN';
9
+ export interface ContradictionAnalysis {
10
+ isContradiction: boolean;
11
+ analysisStatus: ContradictionAnalysisStatus;
12
+ relationship: ClaimRelationship;
13
+ contradictionType: ContradictionType;
14
+ severity: ContradictionSeverity;
15
+ confidence: number;
16
+ explanation: string;
17
+ evidence: {
18
+ claimA: Claim;
19
+ claimB: Claim;
20
+ match: ClaimMatchResult;
21
+ comparison: ValueComparisonResult;
22
+ context?: ContextAnalysisResult;
23
+ confidenceBreakdown?: Record<string, unknown>;
24
+ };
25
+ }
26
+ export declare class ContradictionEngine {
27
+ analyzePair(claimA: Claim, claimB: Claim, sourceA?: Source | null, sourceB?: Source | null): ContradictionAnalysis;
28
+ }
29
+ export declare const contradictionEngine: ContradictionEngine;