Back to Blog
Perception vs Fact Layer 7 min readJun 16, 2026
Part 1 of 10Perception vs Fact Layer series

Fact Graph vs Perception Graph: The Core Distinction

SiteNexis maintains two separate graphs: the Fact Graph (what is verifiably in the DOM) and the Perception Graph (what an AI system infers from that content). These are never merged.

The most important architectural decision in the SiteNexis graph model is the strict separation between two fundamentally different types of knowledge. The Fact Graph contains only what can be directly observed in the DOM: links that exist, text that is present, schema that is declared, entities that are named. Confidence is always 1.0 — these facts are either present or absent. The Perception Graph models what an AI system would infer from that content: semantic relationships, entity disambiguation, topical authority assessments. Confidence is always between 0 and 1.

Why the Separation Is Architectural, Not Stylistic

Merging the two graphs would contaminate fact with inference. If an AI-inferred relationship (confidence 0.7) is stored in the same graph as a DOM-extracted link (confidence 1.0), the downstream systems that consume the graph cannot distinguish reliable facts from probabilistic inferences. They would either over-trust the inferences (treating them as facts) or under-trust the facts (applying the same skepticism they should reserve for inferences).

One-Directional Derivation

The Perception Graph is derived from the Fact Graph — not the other way around. Entity relationships in the Perception Graph are inferred from fact_nodes and fact_edges. The Fact Graph never reads from the Perception Graph. Cross-writing is architecturally prohibited. This invariant means the Fact Graph is always a clean, verifiable record of what is actually in the DOM — it cannot be contaminated by what the AI inferred might be there.

Invariant: The Fact Graph never reads from the Perception Graph. If you modify the Perception Graph (by updating AI-inferred relationships), the Fact Graph is unchanged. If you modify the Fact Graph (by re-crawling and updating DOM-extracted data), the Perception Graph must be re-derived — but it is never the source.

What Each Graph Contains

Fact Graph tables: fact_nodes (DOM-extracted entities and pages), fact_edges (DOM-extracted links with anchor text and position). Perception Graph tables: perception_nodes (AI-inferred entities with confidence scores and disambiguation strength), perception_edges (AI-inferred relationships with typed relationship and strength). The schema for each is distinct — perception nodes carry fields (confidence, citationReadiness, disambiguationStrength) that have no equivalent in fact nodes.

How the Graphs Complement Each Other

The Fact Graph answers: what is here? The Perception Graph answers: what does an AI system understand from what is here? Together they enable a diagnostic that no single graph can provide: finding the gap between what is in the DOM and what AI systems actually derive from it. A strong Fact Graph with a weak Perception Graph means the content is present but the AI cannot extract coherent meaning from it. A strong Perception Graph built from a weak Fact Graph is an inference system that has less DOM evidence than it needs to be reliable.

Tags: fact graph perception graph graph architecture AI inference