post-graph-rag synthesis
Type: agentic-system-analyses/types/agentic-system-synthesis.md
Bounded synthesis
From caller documents to retained assertions
post-graph-rag is a caller-driven knowledge-system library. It extracts entities and relations with model calls, retains them alongside source passages and vectors in PostgreSQL, and combines retrieval channels to supply context or generate answers. Python owns progression; the models process content rather than schedule autonomous agents. This account covers the shipped package, prompts, maintenance interfaces, examples and evaluation consumers of SRC-1, https://github.com/crajah/post-graph-rag, at commit bce4146a7dc4684e9b66806915c29b0eed57ba23, with an applicability cutoff of 2026-11-08. It is code-grounded, not an execution study. No target code, tests or services were run, and tracked result bodies were not assessed as run evidence. Dependency internals, live database contents and provider behavior are outside the frozen evidence. See the boundary and source register.
A caller supplies documents, realm/space configuration and questions. Ordinary admission prepares passage embeddings and extraction concurrently, then inserts the passage before attempting derived graph writes. Default extraction applies parsing and configured name, predicate, confidence and polarity gates; models propose content and software admits it without per-fact human approval. Those gates check field conformity, not source truth. Supported external callbacks can replace or merge extraction, optionally bypass semantic validation; a fully injected extractor can replace the default mechanism. Thus the default policy is not a universal constraint on stored graph content. See RT-RTE-document-admission, EPI-RTE-validation-check and RT-RTE-extractor-extension.
Passages and derived views have different failure and recovery properties. An extraction failure of the handled type can leave a searchable passage without structure; derived embedding failure can discard proposed structure; ordinary structural-write failures after passage insertion are counted. This provides a fallback opportunity, not demonstrated answer recovery. Preparation and passage insertion can still fail. Replacement-aware index_text can delete old chunks before preparing replacements, while direct chunk APIs do not perform its hash/replace check. Re-indexing is caller recovery, and unchanged-document skipping may need disabling to repair structure. Passage-first is therefore best effort, not crash-atomic ingestion or unconditional restoration: RT-CLM-passage-priority, RT-RTE-document-admission.
Retained prose, vectors and control fields have distinct consumers. Source passages remain inspectable; entity descriptions and relation assertions are derived content. Aliases and same-key upserts combine records, but do not verify identity or corroboration. Relation merges can combine descriptions and periods from different assertions, take maximum confidence and combine negation with AND. Source counts count contributing chunks, not independent witnesses. Embeddings influence similarity rather than certify readable claims. See MEM-OBJ-documents, MEM-OBJ-entities, EPI-RTE-relation-upsert and MEM-OBJ-embeddings.
Changing reliance and constructing broader views
The system has a consequential content-sensitive contradiction check. When enabled and the declarative conflict pass finds none, a model compares a new assertion with a capped same-subject candidate list. Code restricts returned IDs to offered candidates; those IDs can cause durable supersession flags. The separate declarative path uses exclusive predicate groups and document order. Both change later relation reliance without establishing the successor's truth. Candidate projections omit some explicit endpoint, polarity or new-validity information, although descriptions may carry it; this bounds the check rather than proving every judgment defective. See EPI-RTE-contradiction-check and EPI-RTE-supersession-write.
Deletion is a different operation: it removes passages and contributing source IDs, changes weights and can mark unsupported graph assertions dormant. New source-backed assertions can revive them under reason-specific rules. The surviving rows are audit residue, not a complete history of deleted evidence. Descriptions are not reconstructed from surviving sources, and already built reports are not automatically rewritten. Accordingly the public claim that later facts stop obsolete reporting is supported for named relation filters, not every answer channel. See MEM-RTE-document-withdrawal and EPI-CLM-close-fact.
Caller-triggered community builds cluster a graph snapshot and generate stored reports, optionally summarizing lower-level reports again. The report model receives clipped descriptions and internal relations, not the complete source corpus. Separate validity and supersession fields do not reach that reporting projection; parent reports consume child projections rather than original documents. Parsing and a nonempty summary permit operational admission, but do not verify the requested grounding. Generated ratings separately influence retrieval priority. Rebuild clears old reports before replacements finish, and later graph changes warn about staleness rather than expire reports. See RT-RTE-community-build, EPI-RTE-community-render, MEM-OBJ-community-text and MEM-OBJ-community-metadata.
Selecting context and delivering answers
A question requests read-back. Auxiliary model calls can propose keywords or subqueries; fixed code selects, filters and fuses stored material. Mix/local use entity and document channels, global uses reports and graph-wide relations, hybrid combines them, and naive uses documents. Optional relation-vector and lexical channels provide additional seeds; quota fusion omits lexical results. These are requested retrieval operations, not independent unsolicited memory supply. The caller can receive structured context directly or request synthesis; bypass instead answers from the question and supplied history without corpus retrieval. See RT-RTE-question-answer and RT-RTE-direct-answer.
Temporal controls are channel-specific. Engine filtering applies to returned relation lists, but entity descriptions and reports do not receive the same belief-time or validity gates. Earlier belief time alone does not restore superseded relations without include_superseded. Archival excludes entity seeds and snapshot members, not every endpoint fact reachable through relation, document or existing report channels. Thus neither historical answering nor comprehensive forgetting follows from these controls: RT-RTE-question-answer, MEM-BAP-access-state.
Synthesis receives rendered selected material in a user message, following caller history. It is instructed to use context and admit insufficiency, but no correctness veto enforces compliance. Optional budgets clip rendered prefixes using a character-based estimator; they default to unlimited and do not cover the whole prompt, references, question or history. Raw context returns before this clipping. Indexing also limits known-name context, but neither mechanism creates an agent task frame or persists a learned continuation summary. Stored originals remain available to future requests. The answer dictionary's abbreviated triple strings omit polarity and periods that can be present in synthesis input; they are not complete scoped assertions. See RT-BAP-answer-context, RT-OBJ-query-param and EPI-OBJ-answer.
The representative quickstart workflow connects these steps: initialize a realm, index three documents sequentially, ask a cross-document question, return and print the answer, then close. It displays extraction counts but does not inspect every degradation flag or repair an incomplete graph. Delivery means response return and print, not verified joining of the documents. There is no answer judge or retry-on-wrong-answer branch in that workflow. Provider retries are separate recovery: stream opening can fail over, but mid-stream failure propagates. This establishes an implemented workflow, not a successful observed episode.
Adaptation and assessment boundary
Two supported automatic trace-fed write paths deserve a positive finding. Enabled retrieval telemetry can feed caller-invoked, non-dry-run retention, producing archive state that changes later seed and snapshot eligibility. Separately, the shipped conversational benchmark maps recorded session turns into retained facts consumed by later questions before instance cleanup. These are wired trace-learning capacities: exposure events and session logs shape durable later-consumed state. Neither requires weight training or new warranted knowledge. They do not establish improved future capacity; telemetry measures exposure rather than correctness, and imported dataset conversations are not evidence of the engine's own experience. See RT-RTE-retention-control, MEM-OBJ-retrieval-events, MEM-RTE-evaluation-memory and profile verification.
Content-sensitive withdrawal is independently supported, but it does not establish an iterative theory-builder practice or improvement caused by criticism of a consumed theory. The accepted runtime supplies no separate established conditions 1–4 assessment; no such complete assessment is inferred here. Likewise exposure-fed adaptation alone establishes neither reflection nor autonomous theory building nor exercised self-improvement. The inspected evidence does not close an objective-directed update-to-later-operation causal chain. These properties remain separate from the two wired trace-fed capacities and from ordinary caller-controlled execution. See EPI-RTE-contradiction-check, RT-RTE-retention-control and the epistemic bounded conclusion.
For an ordinary corpus question, the supported contribution is multiple retained views and retrieval channels with explicit lifecycle controls, not certified answers. For an earlier-time question or withdrawal request, unfiltered views and lossy projections prevent whole-answer guarantees. For benchmark comparison, selected offline scorers consume reference answers, but use different rubrics, proxies, refusal parsers and failure denominators; their grades do not veto production answers or establish automatic product revision. Reported headline rates and the claimed validity-rendering gain remain attributed claims, not independently verified performance or component effects. The conversational harness also adds answer-time instructions for recency, date arithmetic and session-date inference, so its behavior cannot be attributed solely to graph memory or the ordinary engine prompt. See EPI-RTE-benchmark-check, EPI-CLM-benchmark-rates, EPI-CLM-validity-effect and report verification limits.
End-to-end traces linking retained versions, selected context, rendered inputs and resulting answers would establish exercised behavior. Faithfulness checks over scoped claims, complete historical-state retention and gates on every answer channel would change the historical/withdrawal assessment. Controlled comparisons independently varying the claimed component, with stable providers, corpus and scoring protocol, would be needed for component benefit. An improvement claim would additionally need evidence that the retained change caused later capacity or behavior, not merely that it was stored or loaded.
Limitations
| limitation | affected SRC IDs and record citations | inspected boundary | conclusion prevented | evidence that would resolve it |
|---|---|---|---|---|
| No assessed execution or result-body evidence | SRC-1; RT-RTE-document-admission, RT-RTE-question-answer, MEM-RTE-evaluation-memory | Frozen source and shipped callers; no target execution, tracked results unassessed | Successful activation, reliable model compliance and demonstrated benefit | Version-linked execution artifacts connecting inputs, writes, context and outputs |
| External and injected behavior unresolved | SRC-1; RT-RTE-extractor-extension, RT-CMP-embedding-model, RT-CMP-local-embedding | Supported interfaces and model wrappers, not dependency/provider internals or deployed grants | Universal admission, complete lineage/storage inventory, stable vector geometry or deployment authorization | Exact injected implementations, model/artifact identities, dependency contracts and deployment evidence |
| Recovery is not atomic restoration | SRC-1; RT-RTE-document-admission, RT-RTE-community-build | Preparation, ordered writes, replacement and report rebuild | Crash-safe corpus replacement or guaranteed rollback | Transaction/recovery contract and interruption traces covering replacement and rebuild |
| Temporal and withdrawal controls do not cover all delivered content | SRC-1; RT-RTE-question-answer, MEM-RTE-document-withdrawal, MEM-BAP-access-state | Relation filters, seed/snapshot gates and alternate passage/description/report channels | Reproducible historical answers, complete forgetting or all-channel obsolete-fact suppression | Retained historical versions and consumer-complete lifecycle filtering/rebuild evidence |
| Projection and semantic warrant remain limited | SRC-1; EPI-RTE-relation-upsert, EPI-RTE-contradiction-check, EPI-RTE-community-render, EPI-OBJ-answer | Merges, capped contradiction inputs, clipped reporting and abbreviated returns | Guaranteed scope preservation, successor truth, report grounding or complete claim display | Scoped input/output comparisons, evidence-consuming semantic checks and lossless consumer projections |
| Context budgets are partial | SRC-1; RT-RTE-question-answer, RT-OBJ-query-param | Rendering allocations; raw-context, bypass and history alternatives | Hard total-window limit | Full-message token accounting and enforced bounds across relevant paths |
| Delta and diagnostic coverage is bounded | SRC-1; MEM-RTE-change-polling, MEM-RTE-corpus-inspection | Timestamp polling, capped projections; detailed statistics SQL unassessed | Lossless exactly-once change stream, full deletion history or complete diagnostic accuracy | Tombstones, bounded cursor protocol and complete diagnostic validation |
| Benchmark protocols and broader evaluator adoption remain unassessed | SRC-1; EPI-RTE-benchmark-check, EPI-CLM-benchmark-rates, EPI-CLM-validity-effect | Three inspected scorer implementations; other judges, result bodies and ablation designs unassessed | Independent headline-rate validation, cross-system superiority, component attribution or evaluator-complete negative | Audited datasets/results, exact protocols, independent component contrasts and traced adoption consumers |
| LongMemEval answer-time guidance omitted from the partial caller inventory | SRC-1; MEM-RTE-evaluation-memory, report verification limits | evaluation/longmemeval/run.py prepends recency conflict resolution, date arithmetic and session-date inference instructions to retrieval/synthesis questions |
Attributing harness answer behavior solely to retained graph state or the ordinary engine prompt | Explicit guidance inventory and comparisons separating its effect from retained memory |
| Adaptation has no established improvement attribution | SRC-1; RT-RTE-retention-control, MEM-RTE-evaluation-memory, EPI-RTE-contradiction-check | Wired exposure/session transformations and consequential contradiction withdrawal, without assessed later-operation evidence | Improved capacity, criticism-caused improvement or exercised self-improvement; reflection/autonomous theory building do not follow | Retained-update lineage, independently specified objective, later consumer traces and appropriate outcome/causal comparisons |