feat(graph): association is not causation

Adds co_occurs_with, temporally_precedes, possibly_caused_by and
asserted_by to the relation vocabulary with Causal and Hypothetical
predicates. Entities mentioned together now co-occur rather than being
'related'; association hypotheses record possibly_caused_by and their
basis (temporal association only); caused_by is reserved for explicit
operator statements and nothing automatic writes it. Documented in
docs/graph.md and checked end to end.
This commit is contained in:
Andy Dixon
2026-08-19 19:16:15 +01:00
parent 814057b680
commit 37b9f0e2f5
6 changed files with 60 additions and 5 deletions
+19 -1
View File
@@ -76,7 +76,25 @@ const (
)
// AllRelations lists relations in a stable order.
var AllRelations = []Relation{RelatedTo, CausedBy, Contradicts, Supports, DependsOn, BelongsTo, DiscussedWith, ObservedDuring, DerivedFrom, SimilarTo, Follows}
// Association is not causation. CoOccursWith and TemporallyPrecedes record
// what was observed together or in sequence; PossiblyCausedBy is a causal
// hypothesis awaiting evidence; CausedBy is reserved for established causes
// (an explicit operator statement or a confirmed causal prediction);
// AssertedBy links a proposition to whoever stated it.
const (
CoOccursWith Relation = "co_occurs_with"
PossiblyCausedBy Relation = "possibly_caused_by"
TemporallyPrecedes Relation = "temporally_precedes"
AssertedBy Relation = "asserted_by"
)
var AllRelations = []Relation{RelatedTo, CausedBy, Contradicts, Supports, DependsOn, BelongsTo, DiscussedWith, ObservedDuring, DerivedFrom, SimilarTo, Follows, CoOccursWith, PossiblyCausedBy, TemporallyPrecedes, AssertedBy}
// Causal reports whether a relation asserts an established cause.
func (r Relation) Causal() bool { return r == CausedBy }
// Hypothetical reports whether a relation is a proposal rather than a finding.
func (r Relation) Hypothetical() bool { return r == PossiblyCausedBy }
// Valid reports whether r is known.
func (r Relation) Valid() bool {