Data Model (From Specification Chat)

Version 2.2 by Robert Schaub on 2025/11/27 12:08

5. Data Model

The FactHarbor data model centers on four fully versioned, immutable entities:

  • Claim
  • Scenario
  • Evidence
  • Verdict

These entities form the structured “truth landscape” for each claim.  
The model is explicitly versioned, traceable, and federation-ready.

To keep the system auditable and explainable, FactHarbor uses a consistent
identity vs. version pattern:

  • Identity entities (e.g. CLAIM, SCENARIO)  
      define *what* something is in a stable sense.
  • Version entities (e.g. CLAIM_VERSION, SCENARIO_VERSION)  
      define *how that thing looked at a given point in time*.

All reasoning (e.g. verdicts, review actions) is attached to versions, never to
mutable identities.


5.1 Core entities and versioning pattern

 Logical concept  Identity entity  Version entity  Notes
 Claim (what people argue about)  CLAIM  CLAIM_VERSION  Claim text, phrasing, and metadata live in CLAIM_VERSION. The identity CLAIM stays stable across rephrasings.
 Scenario (interpretive frame)  SCENARIO  SCENARIO_VERSION  A SCENARIO belongs to a CLAIM. Its versions capture evolving definitions, assumptions, and boundaries.
 Evidence (source / datapoint)  EVIDENCE  EVIDENCE_VERSION  Identity of a source vs. specific extractions / updates over time.
 Verdict (assessment)  VERDICT  VERDICT_VERSION  A VERDICT is defined per SCENARIO; VERDICT_VERSION captures the history of assessments.
 Scenario–Evidence link  SCENARIO_EVIDENCE_LINK  SCENARIO_EVIDENCE_LINK_VERSION  Links bind scenario versions to evidence versions with relevance & direction.
 Claim cluster (semantic group)  CLAIM_CLUSTER  –  Groups semantically related claims; mainly for discovery and navigation.

Key design decisions:

  • A CLAIM belongs to exactly one CLAIM_CLUSTER.
  • A SCENARIO belongs to exactly one CLAIM  
      (scenarios live at the *claim* level, not per individual phrasing).
  • Verdicts and Scenario–Evidence links are always attached to versions:
  • SCENARIO_VERSION +
    EVIDENCE_VERSION
    SCENARIO_EVIDENCE_LINK_VERSION
  • SCENARIO_VERSION
    VERDICT_VERSION

This ensures that when a Scenario or Evidence changes, old verdicts and links
remain intact as historical records and can be revisited.


5.2 Core Data Model ERD (expanded, versioned)

The following Mermaid ER diagram shows the main entities and their relationships.
The convention is that fields ending in Id are primary keys,
and fields with ...IdFk are foreign keys.

erDiagram
    CLAIM_CLUSTER {
        string ClusterID PK
        string EmbeddingVectorRef
        string Theme
    }

    CLAIM {
        string ClaimID PK
        string ClusterID FK
        string Status
        datetime CreatedAt
    }

    CLAIM_VERSION {
        string ClaimVersionID PK
        string ClaimID FK
        string Text
        string ClaimType
        string Domain
        datetime CreatedAt
    }

    SCENARIO {
        string ScenarioID PK
        string ClaimID FK
        string Name
        datetime CreatedAt
    }

    SCENARIO_VERSION {
        string ScenarioVersionID PK
        string ScenarioID FK
        string Definitions
        string Assumptions
        string Boundaries
        datetime CreatedAt
    }

    EVIDENCE {
        string EvidenceID PK
        string SourceType
        string URL
        float ReliabilityScore
    }

    EVIDENCE_VERSION {
        string EvidenceVersionID PK
        string EvidenceID FK
        string Summary
        float ReliabilityScore
        datetime CreatedAt
    }

    SCENARIO_EVIDENCE_LINK {
        string LinkID PK
        string ScenarioVersionID FK
        string EvidenceVersionID FK
        float Relevance
        string Direction
    }

    VERDICT {
        string VerdictID PK
        string ScenarioID FK
    }

    VERDICT_VERSION {
        string VerdictVersionID PK
        string VerdictID FK
        float Verdict
        float Confidence
        string Reasoning
        datetime CreatedAt
    }

    CLAIM_CLUSTER ||--o{ CLAIM : contains
    CLAIM ||--o{ CLAIM_VERSION : versions

    CLAIM ||--o{ SCENARIO : has
    SCENARIO ||--o{ SCENARIO_VERSION : versions

    EVIDENCE ||--o{ EVIDENCE_VERSION : versions

    SCENARIO_VERSION ||--o{ SCENARIO_EVIDENCE_LINK : links
    EVIDENCE_VERSION ||--o{ SCENARIO_EVIDENCE_LINK : linked

    SCENARIO ||--o{ VERDICT : assessed
    VERDICT ||--o{ VERDICT_VERSION : versions

Important points:

  • Scenarios and Evidence are linked via their versions  
      (SCENARIO_VERSION and EVIDENCE_VERSION).
  • Verdicts are per ScenarioVersion and stored in VERDICT_VERSION.
  • CLAIM_CLUSTER is shared across diagrams; it is shown here and in the Data Use / Review model.

All version entities are immutable: once created, they are never changed, only
superseded by newer versions.


5.3 Data Use & Review ERD (expanded, versioned)

The Data Use model captures who does what with which versioned data:

  • Users (including technical users)
  • Roles and role assignments
  • Review actions on versioned entities
erDiagram
    %% Core clusters shown for context
    CLAIM_CLUSTER {
        string ClusterID PK
        string EmbeddingVectorRef
        string Theme
    }

    CLAIM {
        string ClaimID PK
        string ClusterID FK
        string Status
        datetime CreatedAt
    }

    CLAIM_VERSION {
        string ClaimVersionID PK
        string ClaimID FK
        string Text
        string ClaimType
        string Domain
        datetime CreatedAt
    }

    SCENARIO {
        string ScenarioID PK
        string ClaimID FK
        string Name
        datetime CreatedAt
    }

    SCENARIO_VERSION {
        string ScenarioVersionID PK
        string ScenarioID FK
        string Definitions
        string Assumptions
        string Boundaries
        datetime CreatedAt
    }

    EVIDENCE {
        string EvidenceID PK
        string SourceType
        string URL
        float ReliabilityScore
    }

    EVIDENCE_VERSION {
        string EvidenceVersionID PK
        string EvidenceID FK
        string Summary
        float ReliabilityScore
        datetime CreatedAt
    }

    VERDICT {
        string VerdictID PK
        string ScenarioID FK
    }

    VERDICT_VERSION {
        string VerdictVersionID PK
        string VerdictID FK
        float Verdict
        float Confidence
        string Reasoning
        datetime CreatedAt
    }

    %% Users and roles
    USER {
        string UserID PK
        string Handle
        string Email
    }

    TECHNICAL_USER {
        string UserID PK
        string SystemName
    }

    CONTRIBUTING_USER {
        string UserID PK
        string DisplayName
    }

    TRUSTED_CONTRIBUTOR {
        string UserID PK
        string TrustLevel
    }

    REVIEWER {
        string UserID PK
        string Domain
    }

    EXPERT {
        string UserID PK
        string ExpertiseArea
    }

    FEDERATION_NODE {
        string NodeID PK
        string Region
    }

    FEDERATION_ADMIN {
        string UserID PK
        string Permissions
    }

    REVIEW_ACTION {
        string ReviewActionID PK
        string UserID FK
        string TargetEntityType
        string TargetEntityVersionID
        string ActionType
        string Comment
        datetime Timestamp
    }

    %% Inheritance / specialization (modelled as relationships)
    USER ||--o{ TECHNICAL_USER : "is a"
    USER ||--o{ CONTRIBUTING_USER : "is a"

    CONTRIBUTING_USER ||--o{ TRUSTED_CONTRIBUTOR : "subset"
    CONTRIBUTING_USER ||--o{ REVIEWER : "subset"
    CONTRIBUTING_USER ||--o{ EXPERT : "subset"

    TECHNICAL_USER ||--o{ FEDERATION_NODE : "operates"
    TECHNICAL_USER ||--o{ FEDERATION_ADMIN : "administers"

    %% Review actions on versioned entities
    USER ||--o{ REVIEW_ACTION : performs

    REVIEW_ACTION }o--|| CLAIM_VERSION : reviews
    REVIEW_ACTION }o--|| SCENARIO_VERSION : reviews
    REVIEW_ACTION }o--|| EVIDENCE_VERSION : reviews
    REVIEW_ACTION }o--|| VERDICT_VERSION : reviews

Notes:

  • Most roles (READER, CONTRIBUTOR, TRUSTED_CONTRIBUTOR, REVIEWER, MODERATOR,
      SYSTEM_ADMIN, FEDERATION_OPERATOR, FEDERATION_ADMIN, …) are represented as rows
      in ROLE.
  • TECHNICAL_USER captures strictly technical accounts (API keys,
      node-to-node federation agents, batch jobs). All other roles can, in principle,
      be held by both human and technical users where appropriate.
  • A READER normally does not perform REVIEW_ACTIONs, while
      roles like REVIEWER, TRUSTED_CONTRIBUTOR, MODERATOR, and some federation roles
      do.

5.4 Versioning and re-evaluation behavior

This section ties the data model to the re-evaluation logic
(described in more detail in the Versioning and Automation chapters).

  • When a new EVIDENCE_VERSION is created:
  • All related SCENARIO_EVIDENCE_LINK_VERSION entries referencing
        that evidence version are candidates for re-assessment.
  • Related VERDICT_VERSION entries may become outdated and
        are queued for re-evaluation.
  • When a new SCENARIO_VERSION is created:
  • It may inherit some links from earlier scenarios, or start empty depending
        on the change classification (cosmetic vs. conceptual).
  • All verdicts for that scenario are recalculated and stored as new
    VERDICT_VERSION entries.
  • REVIEW_ACTIONs are always attached to the exact version that was seen by
      the reviewer. This preserves a faithful audit trail if data later changes.
  • In a federated environment, nodes can choose:
  • which identity entities to replicate (CLAIM, SCENARIO, EVIDENCE, VERDICT)
  • which versioned entities to replicate (e.g. only accepted VERDICT_VERSIONs,
        only EVIDENCE_VERSIONs above a reliability threshold, etc.)

5.5 Behavioral Notes

5.5.1 Late-Arriving Evidence

New evidence versions can make existing verdicts outdated and may trigger
re-evaluation cascades. This is handled by the global trigger and automation
architecture (see the Versioning & Automation chapters).

5.5.2 Scenario Evolution

Scenario changes create new SCENARIO_VERSIONs; dependent verdicts and
Scenario–Evidence links are re-assessed. Old versions remain available for
historical comparison and reproducibility.

5.5.3 Federation

Federated nodes can replicate subsets of the graph, including:

  • Claims and Scenarios of local interest
  • Evidence metadata (without full content)
  • Verdict lineages used for local decision-making

Federation-specific entities (such as FEDERATION_NODE,
replication logs, and trust rules) are described in the Federation &
Decentralization chapter and build on top of the core data model defined here.