sqlite-graph-memory report verification
Type: agentic-system-analyses/types/agentic-system-verification.md
Verification
The current reports support a bounded account of the shipped memory layer. No material blocker remains. The earlier installed-hook objection is repaired in the runtime record and its dependent account; this judgment follows independent source inspection, not acceptance of the correction answer on trust.
I read the supplied reports, all declarations and annotations, reconciliation, correction answers, structural report-check and previous verification. The structural report-check is none, so there is no structural failure to route. Runtime supplies one correction argument; the other answer files are empty. The boundary remains supported: the checkout HEAD equals the reviewed revision and Git status is clean. Source inspection below is SRC-1 implementation or attributed doctrine at that pin. No target, tests, examples, models or benchmarks were executed.
Corrected capture and retention account
I traced SRC-1, pyproject.toml, examples/claude-code-stop-hook.json, src/sqlite_graph_memory/turnstate_hook.py and src/sqlite_graph_memory/turnstate_show.py. The registered command calls main directly. Meaningful transcript input can reach the uncaught SQLite connection/insertion after offset advancement; suppression and forced zero exit belong to the module/script wrapper. RT-RTE-turnstate-capture now states that distinction in its progression, Immediate return and Evidence limits. The runtime forcing case agrees. The correction preserves capture capability, clipping, oversized-gap skipping and loss/reprocessing hazards without claiming that an external host necessarily terminates a session. The runtime answer is therefore substantiated and the previous blocker is discharged.
MEM-OBJ-turns, MEM-OBJ-turnstate-offset and EPI-OBJ-turns correctly distinguish durable derived rows, temporary omission control and external raw transcripts. The viewer drops evidence/offset columns and clips fields further. The parser records attempted tool-use inputs, not successful writes. The epistemic example of decision-looking text follows the regex and length rules, not an observed commitment. No dependent memory, epistemic or workflow passage requires universal hook error suppression. Reconciliation's corrected invocation-specific disposition is supported.
Runtime, selection and delivery
I independently traced SRC-1, src/sqlite_graph_memory/mcp_server.py and the complete src/sqlite_graph_memory/brain_ask.py: tool dispatch, command construction, inherited environment and cwd, timeout configuration, scoped file, return-code rejection and cleanup. RT-RTE-mcp-recall, RT-CLM-scoped-return, RT-BAP-context-delivery and the workflow account distinguish process/output checks from semantic acceptance and host adoption. Bundle headings precede the hit loop, so the workflow's header-only qualification is supported. The trace ends at MCP output rather than a fabricated completed user task. Malformed nested request shapes remain outside the local child-failure envelope.
For RT-RTE-recall-options, both guarded and alternate branches matter. General graph expansion precedes the ordinary entity gate; A/B returns before that substitution. Direct mode can still enable graph-dependent PPR ordering. A/B explicitly declines PPR. These controls affect selected additions/order, not all graph I/O or temporal truth. SRC-1, eval/run_eval.py, eval/run_ablation.py and bench/adapters/sgm.py support RT-RTE-evaluation-paths: gold scoring always expands, gated hop-enabled ablation follows supersession, and the benchmark suppresses all expansion on gated entities. These are shipped, supported caller paths, not inferred bypasses from unchecked types.
The load/encode/predict paths and SRC-1, src/sqlite_graph_memory/onnx_backend.py support RT-CMP-e5-model and RT-CMP-rerank-model. Parameters are not updated by the inspected inference paths; exact downloadable revisions are unpinned. Auto-backend fallback is conditional, not a guarantee that any installation can run. Neither model names nor source assertions establish measured backend equivalence.
Memory objects and actual consumers
SRC-1, src/sqlite_graph_memory/index_notes.py supports RT-RTE-index-admission and the separate objects MEM-OBJ-notes, MEM-OBJ-brain-e5, MEM-OBJ-brain-meta and MEM-OBJ-brain-manifest. I checked filtering, frontmatter removal, fixed windows, embedded text versus snippet prefixes, injected encoders, stat/hash reuse and successive artifact writes. The findings do not overstate per-note human approval, transactional consistency, source freshness or retained rationale.
SRC-1, src/sqlite_graph_memory/ppr.py supports memory's PPR annotation: stem merging and raw target lookup differ from normalized one-hop resolution; fingerprinting uses path and optional hash absent from generated chunk metadata. The cache issue is correctly conditional on an unchanged fingerprint in a long-lived process, not every edit or each new MCP child.
MEM-OBJ-ab-recall matches the SQL/optional JSON writers in SRC-1, src/sqlite_graph_memory/brain_ask.py and src/sqlite_graph_memory/schema.sql. List-difference telemetry is not an answer oracle or an automatic selector update. Database defaults can separate capture, viewing and telemetry. MEM-OBJ-benchmark-raw matches the independent full-body map in SRC-1, bench/adapters/sgm.py; it is not ordinary MCP snippet delivery.
I traced SRC-1, src/sqlite_graph_memory/vault_stats.py and src/sqlite_graph_memory/doctor.py for MEM-RTE-vault-health, EPI-RTE-diagnostic-checks and EPI-OBJ-diagnostic-report. Their authority is correctly bounded to graph/date arithmetic, environment/presence predicates and threshold verdicts. Undated concepts stay in the stale denominator; existing cache/index paths do not certify their contents or successful recall.
Epistemic routes, claims and change admission
I checked the inventory and ledger functions, including EPI-OBJ-note-snippets, EPI-OBJ-recall-state and EPI-OBJ-evaluation-records. Import, substring reshaping, ranking and retention are not promoted to factual acceptance. Scope lost by clipping remains explicit.
SRC-1, bench/adapters/_extract.py, bench/adapters/sgm.py, bench/vault/tool-lanternfish.md, bench/bench_core.py, bench/run.py and bench/validate.py support the separated EPI-RTE-extract-answer, EPI-RTE-answer-abstain, EPI-RTE-bench-score and EPI-RTE-bench-gate. The static extraction example follows the actual lexical rules. A top-note score can admit a sentence from another selected note. Citation occurrence and answer-string matching do not establish entailment; result consistency and rerun equality do not authenticate every provenance assertion or prove causal benefit. Gold construction and mutant-output withdrawal in SRC-1, eval/build_gold.py and eval/run_eval.py support the bounded reference and measurement findings.
EPI-CLM-search-layer and EPI-CLM-measurement-scope faithfully qualify SRC-1, README.md: shared functions are not identical composed policies; private figures remain attributed rather than independently verified outcomes. RT-CLM-temporal-scope and RT-BAP-temporal-instructions correctly separate SRC-1, BITEMPORAL.md prescriptions from executable replacement access. SRC-1, docs/bitemporal.md describes a persisted-edge variant, not an implemented package temporal database.
RT-RTE-change-admission is supported by SRC-1, AGENTS.md, .github/workflows/tests.yml, .github/workflows/publish.yml, .github/workflows/bench.yml and docs/RELEASING.md. Prescribed regression/human review and executable CI/publication checks are distinct. Actual repository protections, maintainer decisions and live successor use remain unestablished. No learning, reflection, autonomous theory-building or exercised self-improvement conclusion is inferred from retention and measurement alone.
Reconciliation and bounded omission search
I checked both amendments in reconciliation: the turns objects identify the same SQLite rows, and the diagnostic routes the same operator-invoked family. Supersession preserves the epistemic predicates without upgrading statuses. Broader snippet/recall-state containers overlap narrower memory objects without being interchangeable. The three explicit Part of: relations identify extraction, admission and scoring within the runtime evaluation container. No evidenced-absence declaration or unresolved inter-report conflict requires disposition. Temporal doctrine/code differences are shared findings, not disagreements. All memory integration issues have compatible bounded dispositions.
Omission questions came from the frozen top-level tree and producer/consumer dependencies: could another shipped consumer connect ledger rows to model recall; could alternate callers defeat a universal policy reading; could packaging alter failure containment; and could benchmark answering consume text unavailable through snippets? Searches over SRC-1 package, examples and demo paths, followed by the independent reads above, support the reports' qualified answers. Additional inspection of SRC-1, src/sqlite_graph_memory/__init__.py found discovery prose/version metadata, not another state consumer. SRC-1, docs/demo.sh invokes index/A/B commands and filters display; it does not close a ledger-to-agent loop or independently establish performance.
Further optional omission expansion stopped because the selected challenges have supported dispositions and no identified material challenge remains unaddressed. Available result artifacts, paper, tests and other guides do not by their presence require a performance census. Their unassessed conditions prevent outcome and complete-doctrine comparisons, which these reports already withhold. Existing local uncertainty is faithfully scoped rather than an unsupported absence or complete-coverage assertion.
Blockers
none
Limits
none