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.
- package/LICENSE +21 -0
- package/README.md +536 -0
- package/bin/cli.js +182 -0
- package/dist/analysis/claimMatcher.d.ts +48 -0
- package/dist/analysis/claimMatcher.js +131 -0
- package/dist/analysis/claimMatcher.js.map +1 -0
- package/dist/analysis/claimRelationship.d.ts +15 -0
- package/dist/analysis/claimRelationship.js +12 -0
- package/dist/analysis/claimRelationship.js.map +1 -0
- package/dist/analysis/confidenceScorer.d.ts +40 -0
- package/dist/analysis/confidenceScorer.js +59 -0
- package/dist/analysis/confidenceScorer.js.map +1 -0
- package/dist/analysis/contextAnalyzer.d.ts +13 -0
- package/dist/analysis/contextAnalyzer.js +187 -0
- package/dist/analysis/contextAnalyzer.js.map +1 -0
- package/dist/analysis/contradictionClassifier.d.ts +16 -0
- package/dist/analysis/contradictionClassifier.js +141 -0
- package/dist/analysis/contradictionClassifier.js.map +1 -0
- package/dist/analysis/contradictionEngine.d.ts +29 -0
- package/dist/analysis/contradictionEngine.js +284 -0
- package/dist/analysis/contradictionEngine.js.map +1 -0
- package/dist/analysis/explanationBuilder.d.ts +36 -0
- package/dist/analysis/explanationBuilder.js +77 -0
- package/dist/analysis/explanationBuilder.js.map +1 -0
- package/dist/analysis/valueComparator.d.ts +38 -0
- package/dist/analysis/valueComparator.js +418 -0
- package/dist/analysis/valueComparator.js.map +1 -0
- package/dist/config/env.d.ts +46 -0
- package/dist/config/env.js +34 -0
- package/dist/config/env.js.map +1 -0
- package/dist/connectors/base/connectorUtils.d.ts +26 -0
- package/dist/connectors/base/connectorUtils.js +63 -0
- package/dist/connectors/base/connectorUtils.js.map +1 -0
- package/dist/connectors/base/security.d.ts +11 -0
- package/dist/connectors/base/security.js +9 -0
- package/dist/connectors/base/security.js.map +1 -0
- package/dist/connectors/connectorRegistry.d.ts +43 -0
- package/dist/connectors/connectorRegistry.js +91 -0
- package/dist/connectors/connectorRegistry.js.map +1 -0
- package/dist/connectors/document/documentConnector.d.ts +45 -0
- package/dist/connectors/document/documentConnector.js +410 -0
- package/dist/connectors/document/documentConnector.js.map +1 -0
- package/dist/connectors/github/githubClient.d.ts +52 -0
- package/dist/connectors/github/githubClient.js +207 -0
- package/dist/connectors/github/githubClient.js.map +1 -0
- package/dist/connectors/github/githubConnector.d.ts +26 -0
- package/dist/connectors/github/githubConnector.js +169 -0
- package/dist/connectors/github/githubConnector.js.map +1 -0
- package/dist/connectors/github/githubExtractor.d.ts +26 -0
- package/dist/connectors/github/githubExtractor.js +469 -0
- package/dist/connectors/github/githubExtractor.js.map +1 -0
- package/dist/connectors/github/githubNormalizer.d.ts +11 -0
- package/dist/connectors/github/githubNormalizer.js +24 -0
- package/dist/connectors/github/githubNormalizer.js.map +1 -0
- package/dist/connectors/github/githubTypes.d.ts +55 -0
- package/dist/connectors/github/githubTypes.js +2 -0
- package/dist/connectors/github/githubTypes.js.map +1 -0
- package/dist/connectors/syncService.d.ts +60 -0
- package/dist/connectors/syncService.js +176 -0
- package/dist/connectors/syncService.js.map +1 -0
- package/dist/connectors/types/connector.d.ts +34 -0
- package/dist/connectors/types/connector.js +2 -0
- package/dist/connectors/types/connector.js.map +1 -0
- package/dist/connectors/types/fetchResult.d.ts +39 -0
- package/dist/connectors/types/fetchResult.js +2 -0
- package/dist/connectors/types/fetchResult.js.map +1 -0
- package/dist/connectors/website/ssrfGuard.d.ts +11 -0
- package/dist/connectors/website/ssrfGuard.js +122 -0
- package/dist/connectors/website/ssrfGuard.js.map +1 -0
- package/dist/connectors/website/websiteConnector.d.ts +30 -0
- package/dist/connectors/website/websiteConnector.js +231 -0
- package/dist/connectors/website/websiteConnector.js.map +1 -0
- package/dist/discovery/candidateGenerator.d.ts +12 -0
- package/dist/discovery/candidateGenerator.js +110 -0
- package/dist/discovery/candidateGenerator.js.map +1 -0
- package/dist/discovery/contradictionScanner.d.ts +30 -0
- package/dist/discovery/contradictionScanner.js +47 -0
- package/dist/discovery/contradictionScanner.js.map +1 -0
- package/dist/discovery/discoveryService.d.ts +37 -0
- package/dist/discovery/discoveryService.js +131 -0
- package/dist/discovery/discoveryService.js.map +1 -0
- package/dist/discovery/rankingService.d.ts +34 -0
- package/dist/discovery/rankingService.js +52 -0
- package/dist/discovery/rankingService.js.map +1 -0
- package/dist/discovery/similarityIndex.d.ts +20 -0
- package/dist/discovery/similarityIndex.js +89 -0
- package/dist/discovery/similarityIndex.js.map +1 -0
- package/dist/domain/entities/claim.d.ts +99 -0
- package/dist/domain/entities/claim.js +92 -0
- package/dist/domain/entities/claim.js.map +1 -0
- package/dist/domain/entities/contradiction.d.ts +110 -0
- package/dist/domain/entities/contradiction.js +74 -0
- package/dist/domain/entities/contradiction.js.map +1 -0
- package/dist/domain/entities/source.d.ts +43 -0
- package/dist/domain/entities/source.js +35 -0
- package/dist/domain/entities/source.js.map +1 -0
- package/dist/domain/types/common.d.ts +46 -0
- package/dist/domain/types/common.js +74 -0
- package/dist/domain/types/common.js.map +1 -0
- package/dist/httpServer.d.ts +25 -0
- package/dist/httpServer.js +164 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/authorityScorer.d.ts +20 -0
- package/dist/intelligence/authorityScorer.js +103 -0
- package/dist/intelligence/authorityScorer.js.map +1 -0
- package/dist/intelligence/entityResolver.d.ts +33 -0
- package/dist/intelligence/entityResolver.js +152 -0
- package/dist/intelligence/entityResolver.js.map +1 -0
- package/dist/intelligence/evidenceEvaluator.d.ts +15 -0
- package/dist/intelligence/evidenceEvaluator.js +63 -0
- package/dist/intelligence/evidenceEvaluator.js.map +1 -0
- package/dist/intelligence/freshnessScorer.d.ts +25 -0
- package/dist/intelligence/freshnessScorer.js +90 -0
- package/dist/intelligence/freshnessScorer.js.map +1 -0
- package/dist/intelligence/provenanceAnalyzer.d.ts +19 -0
- package/dist/intelligence/provenanceAnalyzer.js +33 -0
- package/dist/intelligence/provenanceAnalyzer.js.map +1 -0
- package/dist/intelligence/resolutionAdvisor.d.ts +40 -0
- package/dist/intelligence/resolutionAdvisor.js +118 -0
- package/dist/intelligence/resolutionAdvisor.js.map +1 -0
- package/dist/intelligence/semanticMatcher.d.ts +21 -0
- package/dist/intelligence/semanticMatcher.js +71 -0
- package/dist/intelligence/semanticMatcher.js.map +1 -0
- package/dist/scripts/comprehensiveVerification.d.ts +5 -0
- package/dist/scripts/comprehensiveVerification.js +961 -0
- package/dist/scripts/comprehensiveVerification.js.map +1 -0
- package/dist/scripts/finalLiveDemo.d.ts +5 -0
- package/dist/scripts/finalLiveDemo.js +226 -0
- package/dist/scripts/finalLiveDemo.js.map +1 -0
- package/dist/scripts/liveMcpSmoke.d.ts +1 -0
- package/dist/scripts/liveMcpSmoke.js +89 -0
- package/dist/scripts/liveMcpSmoke.js.map +1 -0
- package/dist/scripts/seedDemoData.d.ts +6 -0
- package/dist/scripts/seedDemoData.js +179 -0
- package/dist/scripts/seedDemoData.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.js +1264 -0
- package/dist/server.js.map +1 -0
- package/dist/services/analysisService.d.ts +40 -0
- package/dist/services/analysisService.js +65 -0
- package/dist/services/analysisService.js.map +1 -0
- package/dist/services/healthService.d.ts +42 -0
- package/dist/services/healthService.js +50 -0
- package/dist/services/healthService.js.map +1 -0
- package/dist/services/metricsService.d.ts +35 -0
- package/dist/services/metricsService.js +57 -0
- package/dist/services/metricsService.js.map +1 -0
- package/dist/services/rateLimiter.d.ts +23 -0
- package/dist/services/rateLimiter.js +45 -0
- package/dist/services/rateLimiter.js.map +1 -0
- package/dist/services/reviewService.d.ts +32 -0
- package/dist/services/reviewService.js +94 -0
- package/dist/services/reviewService.js.map +1 -0
- package/dist/services/schedulerService.d.ts +30 -0
- package/dist/services/schedulerService.js +89 -0
- package/dist/services/schedulerService.js.map +1 -0
- package/dist/storage/backupService.d.ts +14 -0
- package/dist/storage/backupService.js +90 -0
- package/dist/storage/backupService.js.map +1 -0
- package/dist/storage/database.d.ts +119 -0
- package/dist/storage/database.js +935 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/migrations/001_initial.sql +63 -0
- package/dist/storage/migrations/002_discovery_uniqueness.sql +8 -0
- package/dist/storage/migrations/003_connector_identity.sql +7 -0
- package/dist/storage/migrations/004_claim_context.sql +15 -0
- package/dist/storage/migrations/005_claim_history.sql +26 -0
- package/dist/storage/migrations/006_contradiction_resolution.sql +27 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- 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":"AASA,MAAM,OAAO,uBAAuB;IAC3B,QAAQ,CAAC,OAIf;QACC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACrD,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAE5C,kCAAkC;QAClC,IAAI,iBAAiB,GAAsB,gBAAgB,CAAC;QAC5D,IAAI,cAAc,GAAG,gDAAgD,CAAC;QAEtE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/E,iBAAiB,GAAG,kBAAkB,CAAC;YACvC,cAAc;gBACZ,sFAAsF,CAAC;QAC3F,CAAC;aAAM,IACL,IAAI,KAAK,MAAM;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EACxB,CAAC;YACD,iBAAiB,GAAG,eAAe,CAAC;YACpC,cAAc,GAAG,wDAAwD,CAAC;QAC5E,CAAC;aAAM,IACL,IAAI,KAAK,QAAQ;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC1B,CAAC;YACD,iBAAiB,GAAG,iBAAiB,CAAC;YACtC,cAAc,GAAG,2EAA2E,CAAC;QAC/F,CAAC;aAAM,IACL,IAAI,KAAK,UAAU;YACnB,IAAI,KAAK,QAAQ;YACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,CAAC;YACD,iBAAiB,GAAG,mBAAmB,CAAC;YACxC,cAAc,GAAG,2EAA2E,CAAC;QAC/F,CAAC;aAAM,IACL,IAAI,KAAK,QAAQ;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzB,CAAC;YACD,iBAAiB,GAAG,iBAAiB,CAAC;YACtC,cAAc,GAAG,2EAA2E,CAAC;QAC/F,CAAC;aAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1B,UAAU,CAAC,cAAc,KAAK,mBAAmB,EACjD,CAAC;YACD,iBAAiB,GAAG,oBAAoB,CAAC;YACzC,cAAc;gBACZ,8FAA8F,CAAC;QACnG,CAAC;aAAM,IACL,IAAI,KAAK,eAAe;YACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EACrB,CAAC;YACD,iBAAiB,GAAG,wBAAwB,CAAC;YAC7C,cAAc,GAAG,0EAA0E,CAAC;QAC9F,CAAC;aAAM,IACL,IAAI,KAAK,aAAa;YACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC7B,CAAC;YACD,iBAAiB,GAAG,sBAAsB,CAAC;YAC3C,cAAc;gBACZ,gFAAgF,CAAC;QACrF,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7F,iBAAiB,GAAG,mBAAmB,CAAC;YACxC,cAAc,GAAG,4DAA4D,CAAC;QAChF,CAAC;aAAM,IACL,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,CAAC;YACD,iBAAiB,GAAG,iBAAiB,CAAC;YACtC,cAAc;gBACZ,+EAA+E,CAAC;QACpF,CAAC;QAED,wBAAwB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACtC,iBAAiB;YACjB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,UAAU;SACX,CAAC,CAAC;QAEH,OAAO;YACL,iBAAiB;YACjB,QAAQ;YACR,cAAc;SACf,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,OAKzB;QACC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAExE,+DAA+D;QAC/D,IACE,iBAAiB,KAAK,iBAAiB;YACvC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAChC,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,gIAAgI;QAChI,IACE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzB,CAAC,UAAU,CAAC,WAAW,KAAK,YAAY,IAAI,UAAU,CAAC,WAAW,KAAK,YAAY,CAAC;YACpF,CAAC,UAAU,CAAC,WAAW,KAAK,YAAY,IAAI,UAAU,CAAC,WAAW,KAAK,YAAY,CAAC,EACpF,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IACE,SAAS,KAAK,OAAO;YACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,UAAU,CAAC,cAAc,KAAK,wBAAwB,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,oDAAoD;QACpD,IACE,iBAAiB,KAAK,kBAAkB;YACxC,iBAAiB,KAAK,eAAe;YACrC,iBAAiB,KAAK,iBAAiB;YACvC,iBAAiB,KAAK,mBAAmB,EACzC,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,uDAAuD;QACvD,IAAI,UAAU,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
|
|
@@ -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;
|