@refract-org/evidence-graph 0.2.1
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 +11 -0
- package/README.md +29 -0
- package/dist/src/schemas/claim.d.ts +34 -0
- package/dist/src/schemas/claim.d.ts.map +1 -0
- package/dist/src/schemas/claim.js +3 -0
- package/dist/src/schemas/claim.js.map +1 -0
- package/dist/src/schemas/evidence.d.ts +34 -0
- package/dist/src/schemas/evidence.d.ts.map +1 -0
- package/dist/src/schemas/evidence.js +3 -0
- package/dist/src/schemas/evidence.js.map +1 -0
- package/dist/src/schemas/report.d.ts +51 -0
- package/dist/src/schemas/report.d.ts.map +1 -0
- package/dist/src/schemas/report.js +3 -0
- package/dist/src/schemas/report.js.map +1 -0
- package/dist/src/schemas/revision.d.ts +36 -0
- package/dist/src/schemas/revision.d.ts.map +1 -0
- package/dist/src/schemas/revision.js +3 -0
- package/dist/src/schemas/revision.js.map +1 -0
- package/dist/src/schemas/source.d.ts +24 -0
- package/dist/src/schemas/source.d.ts.map +1 -0
- package/dist/src/schemas/source.js +3 -0
- package/dist/src/schemas/source.js.map +1 -0
- package/dist/tsconfig 2.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +26 -0
- package/src/__tests__/hash-identity.test.ts +111 -0
- package/src/__tests__/replay-manifest.test.ts +87 -0
- package/src/hash-identity.ts +25 -0
- package/src/index.ts +43 -0
- package/src/interpretation-prompt.ts +209 -0
- package/src/replay-manifest.ts +110 -0
- package/src/schemas/claim.ts +58 -0
- package/src/schemas/evidence.ts +83 -0
- package/src/schemas/report.ts +54 -0
- package/src/schemas/revision.ts +41 -0
- package/src/schemas/source.ts +37 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Evidence event — what happened at a revision boundary
|
|
2
|
+
|
|
3
|
+
export type EvidenceLayer = "observed" | "policy_coded" | "model_interpretation" | "speculative" | "unknown";
|
|
4
|
+
|
|
5
|
+
export type EventType =
|
|
6
|
+
| "sentence_first_seen"
|
|
7
|
+
| "sentence_removed"
|
|
8
|
+
| "sentence_reintroduced"
|
|
9
|
+
| "citation_added"
|
|
10
|
+
| "citation_removed"
|
|
11
|
+
| "citation_replaced"
|
|
12
|
+
| "template_added"
|
|
13
|
+
| "template_removed"
|
|
14
|
+
| "revert_detected"
|
|
15
|
+
| "section_reorganized"
|
|
16
|
+
| "lead_promotion"
|
|
17
|
+
| "lead_demotion"
|
|
18
|
+
| "page_moved"
|
|
19
|
+
| "wikilink_added"
|
|
20
|
+
| "wikilink_removed"
|
|
21
|
+
| "category_added"
|
|
22
|
+
| "category_removed"
|
|
23
|
+
| "protection_changed"
|
|
24
|
+
| "talk_page_correlated"
|
|
25
|
+
| "talk_thread_opened"
|
|
26
|
+
| "talk_thread_archived"
|
|
27
|
+
| "talk_reply_added"
|
|
28
|
+
| "template_parameter_changed"
|
|
29
|
+
| "edit_cluster_detected"
|
|
30
|
+
| "talk_activity_spike";
|
|
31
|
+
|
|
32
|
+
export interface FactProvenance {
|
|
33
|
+
analyzer: string;
|
|
34
|
+
version: string;
|
|
35
|
+
inputHashes: string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type PolicyDimension =
|
|
39
|
+
| "verifiability"
|
|
40
|
+
| "npov"
|
|
41
|
+
| "blp"
|
|
42
|
+
| "due_weight"
|
|
43
|
+
| "protection"
|
|
44
|
+
| "edit_warring"
|
|
45
|
+
| "notability"
|
|
46
|
+
| "copyright"
|
|
47
|
+
| "civility";
|
|
48
|
+
|
|
49
|
+
export interface DeterministicFact {
|
|
50
|
+
fact: string;
|
|
51
|
+
detail?: string;
|
|
52
|
+
provenance?: FactProvenance;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ModelInterpretation {
|
|
56
|
+
semanticChange: string;
|
|
57
|
+
confidence: number;
|
|
58
|
+
policyDimension?: PolicyDimension;
|
|
59
|
+
discussionType?:
|
|
60
|
+
| "notability_challenge"
|
|
61
|
+
| "sourcing_dispute"
|
|
62
|
+
| "neutrality_concern"
|
|
63
|
+
| "content_deletion"
|
|
64
|
+
| "content_addition"
|
|
65
|
+
| "naming_dispute"
|
|
66
|
+
| "procedural"
|
|
67
|
+
| "other";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface EvidenceEvent {
|
|
71
|
+
eventId?: string;
|
|
72
|
+
eventType: EventType;
|
|
73
|
+
claimId?: string;
|
|
74
|
+
fromRevisionId: number;
|
|
75
|
+
toRevisionId: number;
|
|
76
|
+
section: string;
|
|
77
|
+
before: string;
|
|
78
|
+
after: string;
|
|
79
|
+
deterministicFacts: DeterministicFact[];
|
|
80
|
+
modelInterpretation?: ModelInterpretation;
|
|
81
|
+
layer: EvidenceLayer;
|
|
82
|
+
timestamp: string; // ISO 8601
|
|
83
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Report — the assembled output of the provenance engine
|
|
2
|
+
|
|
3
|
+
import type { EvidenceLayer } from "./evidence.js";
|
|
4
|
+
|
|
5
|
+
export type ReportLayerLabel = EvidenceLayer;
|
|
6
|
+
|
|
7
|
+
export type ExportFormat = "json" | "pdf" | "csv" | "html";
|
|
8
|
+
|
|
9
|
+
export type Depth = "brief" | "detailed" | "forensic";
|
|
10
|
+
|
|
11
|
+
export interface ReportLayer {
|
|
12
|
+
label: ReportLayerLabel;
|
|
13
|
+
description: string;
|
|
14
|
+
events: number;
|
|
15
|
+
reproducible: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface Report {
|
|
19
|
+
pageTitle: string;
|
|
20
|
+
pageId: number;
|
|
21
|
+
analyzedRevisionRange: { from: number; to: number };
|
|
22
|
+
generatedAt: string; // ISO 8601
|
|
23
|
+
depth: Depth;
|
|
24
|
+
layers: ReportLayer[];
|
|
25
|
+
timeline: PageTimeline;
|
|
26
|
+
claims: string[]; // Claim IDs
|
|
27
|
+
sources: string[]; // Source IDs
|
|
28
|
+
policySignals: PolicySignal[];
|
|
29
|
+
caveats: string[];
|
|
30
|
+
phase: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface PageTimeline {
|
|
34
|
+
totalRevisions: number;
|
|
35
|
+
analyzedRevisions: number;
|
|
36
|
+
dateRange: { start: string; end: string };
|
|
37
|
+
events: TimelineEvent[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface TimelineEvent {
|
|
41
|
+
revisionId: number;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
eventType: string;
|
|
44
|
+
summary: string;
|
|
45
|
+
layer: ReportLayerLabel;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface PolicySignal {
|
|
49
|
+
dimension: string; // e.g., "verifiability", "npov", "blp", "due_weight"
|
|
50
|
+
signal: string; // e.g., "citation_needed_template_added", "blp_template_active"
|
|
51
|
+
firstSeenRevisionId: number;
|
|
52
|
+
lastSeenRevisionId?: number;
|
|
53
|
+
active: boolean;
|
|
54
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Revision and diff — raw Wikipedia data types
|
|
2
|
+
|
|
3
|
+
export interface Revision {
|
|
4
|
+
revId: number;
|
|
5
|
+
pageId: number;
|
|
6
|
+
pageTitle: string;
|
|
7
|
+
timestamp: string; // ISO 8601
|
|
8
|
+
user?: string; // Editor username (may be hidden via oversight)
|
|
9
|
+
comment: string; // Edit summary
|
|
10
|
+
content: string; // Full wikitext
|
|
11
|
+
size: number; // Bytes
|
|
12
|
+
minor: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface DiffResult {
|
|
16
|
+
fromRevId: number;
|
|
17
|
+
toRevId: number;
|
|
18
|
+
lines: DiffLine[];
|
|
19
|
+
sections: SectionChange[];
|
|
20
|
+
sizeDelta: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface DiffLine {
|
|
24
|
+
type: "added" | "removed" | "unchanged";
|
|
25
|
+
content: string;
|
|
26
|
+
lineNumber: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface Section {
|
|
30
|
+
title: string;
|
|
31
|
+
level: number; // 1 = lead, 2 = == Section ==, 3 = === Subsection ===
|
|
32
|
+
content: string;
|
|
33
|
+
byteOffset: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface SectionChange {
|
|
37
|
+
section: string;
|
|
38
|
+
changeType: "added" | "removed" | "modified" | "moved" | "unchanged";
|
|
39
|
+
fromContent?: string;
|
|
40
|
+
toContent?: string;
|
|
41
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Source record — citation lineage in Wikipedia
|
|
2
|
+
|
|
3
|
+
export type SourceType =
|
|
4
|
+
| "primary"
|
|
5
|
+
| "secondary"
|
|
6
|
+
| "tertiary"
|
|
7
|
+
| "self_published"
|
|
8
|
+
| "news"
|
|
9
|
+
| "academic"
|
|
10
|
+
| "government"
|
|
11
|
+
| "unknown";
|
|
12
|
+
|
|
13
|
+
export type SourceAuthority = "high" | "medium" | "low" | "disputed" | "unrated";
|
|
14
|
+
|
|
15
|
+
export interface SourceRecord {
|
|
16
|
+
sourceId: string; // Deterministic hash from URL or identifier
|
|
17
|
+
url?: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
sourceType: SourceType;
|
|
20
|
+
authority: SourceAuthority;
|
|
21
|
+
firstSeenRevisionId: number;
|
|
22
|
+
firstSeenAt: string; // ISO 8601
|
|
23
|
+
lastSeenRevisionId?: number;
|
|
24
|
+
lastSeenAt?: string;
|
|
25
|
+
claimsReferencing: string[]; // Claim IDs that cite this source
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SourceLineage {
|
|
29
|
+
sourceId: string;
|
|
30
|
+
replacements: SourceReplacement[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface SourceReplacement {
|
|
34
|
+
replacedById: string;
|
|
35
|
+
atRevisionId: number;
|
|
36
|
+
atTimestamp: string; // ISO 8601
|
|
37
|
+
}
|