Skip to main content
A Seam is a visible marker linking two cells that contradict each other or represent a preference evolution. Seams surface conflicts so your application can reason about them instead of silently overwriting information.

Seam structure

Key components:
  • ID — ULID string for unique identification
  • CellA / CellB — Coordinates of the two related cells
  • SeamType — Type of relationship (e.g., “conflict”, “supersedes”)
  • Reason — Human-readable explanation of the relationship
  • ConfidenceDelta — Difference in confidence between the two cells
  • DetectedAt — When the seam was created
  • ResolutionStatus — Current state (e.g., “unresolved”, “merged”, “superseded”)
  • ResolutionNote — Notes on how the conflict was resolved

Seam types

Conflict

A conflict seam marks outright contradictions between two facts:
Use conflicts when two records cannot both be true.

Supersession

A supersession seam marks preference evolution — one cell replaces another:
Use supersession when a user changes their mind or preferences evolve over time.

Finding seams

Query seams within a radius of a center coordinate:
For time-travel queries, use FindSeamsAt:

Resolving seams

Resolution is an explicit application-guided operation. Update the resolution status:
Resolution statuses:
  • unresolved — Default state, conflict still active
  • merged — Cells were combined into a new cell
  • superseded — One cell replaced the other
  • archived — Conflict deemed irrelevant or outdated

Seam visibility in context

When assembling context with LoadContextPack, you can include seams and control supersession filtering:
FilterSuperseded: When enabled, the context assembler automatically excludes cells that have been superseded and substitutes their successors. This ensures context packs always reflect the current state of preferences and knowledge without manual filtering. The original cell remains in the database for historical queries (via MVCC), but is hidden from new context assembly. IncludeSeams: Injects relevant seams into the context pack so the system can see and reason about conflicts.

Seam storage

Seams are stored as first-class entities with their own keyspace:
  • Primary key: seam/<ulid>
  • Secondary: seam-by-cells/<packed_a>/<packed_b>/<ulid>
This ensures seams remain queryable even after cells are deleted or superseded. Seams are never collapsed into ordinary edges.

Secondary indexes

Seams are indexed by source and time for efficient discovery:

Manual vs automatic seam creation

Manual:
  • Explicit MarkConflict or MarkSupersedes calls
  • Full control over when seams are created
  • Recommended for production use
Automatic (future):
  • Synchronous check during PutCell or LinkCells
  • Creates seam when embedding delta plus provenance mismatch exceeds threshold
  • Optional background scanning for heavy analysis

See also

  • Cells — Core data units
  • Edges — Directed relationships between cells
  • Context assembly — Budgeted context with seam inclusion