Secondary Review — Overview
Date: 2026-07-16 · pgGraph v0.1.8 · review only, no code changed.
This folder answers three questions: are there issues with pgGraph (including the todo register), is anything seriously wrong with the implementation, and how should the write→graph syncing story evolve into CSR / live / hybrid operating modes.
Documents
| File | Contents |
|---|---|
01-sync-architecture-review.md |
Exact trace of what happens on a write in each mode; how complete mutable_overlay is; sync weaknesses W1–W7 |
02-dual-mode-design-proposal.md |
The CSR / live / hybrid mode design; phased work plan; “what we’d have done differently” |
03-implementation-review-findings.md |
Core-engine findings ranked H/M/L; what’s well done |
04-docs-and-todo-audit.md |
Docs-vs-code drift; assessment of known-issues/roadmap as a todo list |
05-suggested-todos.md |
Prioritized staging list to merge into the official registers |
06-path-to-full-graph-engine.md |
Strategy: SQL/PGQ (PG19) compatibility, performance vs. native graph DBs, and the path to replacing them |
07-completed-plan-build-sequence.md |
Plan complete (2026-07-16): all findings merged into docs/known-issues.mdx (KI-012…KI-026) and docs/roadmap.mdx (Projection Operating Modes); this file is the dependency-ordered build sequence with merge gates |
08-plan-delta-for-graph-engine-strategy.md |
What doc 06 changes in the doc 07 sequence: new SQL/PGQ parallel track (P1–P4), three promotions, PG19-GA clock, two register/positioning edits |
09-revised-build-sequence.md |
Build sequence v2 (supersedes 07) — doc 07 slices with [=]/[^]/[+] markers; adds Stage 2P (SQL/PGQ), L5 (WAL design), F1/F4/F5. Written against main/v0.1.8 — read doc 10 for current status |
10-reconciliation-with-dev-1.0.md |
Authoritative status map (2026-07-17) — every doc 09 slice reconciled against the dev 1.0 release line; corrected next-actions list; release-takeover record (full-matrix 16/17, sanitizer deferred to Linux, sfw Dockerfile change rejected) |
Headline Answers
Is anything seriously wrong? No architectural rot — the base design (Postgres authoritative, immutable mmap CSR + layered deltas + compaction, PostgreSQL-first writes) is sound and the unsafe/persistence code is genuinely defensive. But five findings deserve immediate attention:
- RLS is not enforced on topology reads — traverse/paths/components leak PKs, adjacency, and connectivity of RLS-hidden rows to anyone with table-level SELECT (03 · H1).
- Durable ingest can race across backends — process-local mutex only;
concurrent
apply_sync()can silently drop a segment generation (01 · W1, 03 · H2). - Bidirectional BFS can return a non-minimal shortest path — breaks on first intersection instead of minimal combined distance (03 · M1).
graph._sync_logis never pruned — unbounded growth on write-heavy graphs (01 · W2).- Tenant scope is a filter, not isolation for bitmap-tenanted graphs (03 · H3).
Is the todo register healthy? Mostly — docs are unusually accurate.
Gaps: no automated PR CI exists despite docs implying it; mutable_overlay
production status has no known-issues row; README_zh.md is stale at 0.1.5;
resolved KI rows clutter the active section; and none of the five findings
above were tracked anywhere.
The syncing issue. The premise “a write requires a rebuild for traversal”
is already false in the default configuration: trigger sync + default
query_freshness = 'apply_pending_sync' makes topology reads catch up before
executing, and the mutable_overlay mode already implements the
“write goes into the graph” design (durable LSM-style segments, layered reads,
compaction, GC, crash recovery, cross-backend visibility). What’s genuinely
missing is not a storage engine but the policy layer: automation that
consumes the sync_health() recommendation signals, weighted-path support
over overlays, an ingest lock, sync-log retention, and an auto mode that
escalates under write pressure. Rebuilds remain only for weighted-path
staleness, edge-buffer overflow, TRUNCATE, schema drift, and periodic
compaction back to a clean base. See 02-dual-mode-design-proposal.md.