RememberStackdocs.remember.dev

Ingestion

Ingestion is the write path: raw inputs become durable evidence, then adjudicated facts, then projection updates. Everything an agent later retrieves was produced here under ledgered, versioned stages.

Why the write path is the product

If extraction is sloppy, retrieval only surfaces garbage faster. RememberStack spends design budget on:

  1. Immutable testimony — claims never rewrite.
  2. Grounding — every claim points at a source span / locator.
  3. Identity — entities resolve to a canonical registry.
  4. Adjudication — facts supersede and contradict out loud.
  5. Lifecycle honesty — edits and re-extractions do not inflate confidence.
  6. Cost control — reprocess proportional to the edit, not the whole corpus.

Read this page top-to-bottom for the map. Stage detail and lifecycle rules live on child pages.

Pipeline map

Ingestion pipeline

Diagram shows the full designed chain. The Compose smoke profile starts with Markdown conversion; other MIME routes are registered per deployment.

StageInputOutputLLM?
E0 ingestBytes + metadataStored content object, lineage/version rowsNo
E0 convertRaw bytesMarkdown representation + source map (+ media sidecars when those routes are registered)Route-dependent (smoke profile: Markdown passthrough)
E0 structureMarkdownSection tree, roles, summaries, placementMostly deterministic; bounded model helpers
E1 chunkBlocks from MarkdownRetrieval chunks + optional context prefixesNo (deterministic)
E1 embedChunk text (policy-controlled)P1 vectors / FTS rowsEmbedder only
E2 claimsChunks + structureImmutable claims + groundingYes (extraction)
E3 normalizeClaimsEntity mentions → canonical entities; candidate factsResolution cascade (mostly non-LLM; one binary T4 call for the residue)
E3 adjudicateCandidate facts + evidenceRelations/observations, supersession, contradictionsCascade + ledgers
P1 / graph / P3SpineSearch indexes, live PostgreSQL graph, corpus FSNo completion on query; P3 build only

Deep dive: Pipeline stages.

Entry points (how data gets in)

EntrySurfaceNotes
Push uploadPOST /ingest (and client SDK/CLI)Explicit client write; always enters E0
Watched directoryConnector extraPolls filesystem; debounce + revision no-ops
Other connectorsProvider portsConnector-native source_ref defines lineage identity

One deployment is one trust domain. Auth (when configured) gates the API perimeter before any write.

Guarantees you can rely on

1. Idempotent by content

Identical bytes share a content object (content_hash). You do not pay conversion twice for the same file appearing in two folders.

2. Lineage ≠ version ≠ bytes

ConceptStable when…
Lineage (doc_id)Same connector source_ref (Drive file id, message id, …)
VersionNew observed bytes (or explicit new snapshot) on that lineage
RepresentationOne conversion run’s outputs (ASR upgrade = new representation, same version)

3. Claims are append-only

Re-extraction creates new claim ids. Old claims remain history. Testimony currency decides what counts as current support — it does not rewrite claim text.

4. Work is ledgered

Each stage runs as tracked work: retries, dead-letter, poison inspection, optional spend ceilings. Reads never enqueue writes.

5. Raw is always reachable

Derived Markdown/transcripts feed the pipeline. Original bytes stay stored; media locators point to page/bbox/time interval for audit.

Lifecycle in one paragraph

Edited watched sources create new versions. Unchanged chunks reuse prior claims and vectors (measured spike hit rates are high). Reconciliation updates current testimony, recounts evidence by distinct lineages, and closes facts only under explicit rules (especially living sources that remove content). Full rules: Lifecycle & versions.

After the spine settles

  • P1 updates as claim/chunk/fact-label embeddings land.
  • Graph relations are immediately visible after commit; P3 is the only whole-corpus publication (Compose: operations profile).
  • K recompiles on debounced evidence change for routed pages.

Agent checklist after ingest

  1. Wait for stage terminal state (or readiness for target version ids).
  2. Prefer fact_context / facts_current for “what do we know now?”
  3. Use testimony_context / claims for “what sources said.”
  4. Hydrate to sources before high-stakes action.
  5. If mounts exist, open P3 stubs → artifacts → raw only when needed.

Progressive disclosure

DepthPage
Map (this page)Overview + guarantees
Stage mechanicsPipeline stages
Versions, currency, counting, deletionLifecycle & versions
Run itGetting started · Deployment

Next