Contents
Reconciliation — New Todo (Doc 09) vs The dev 1.0 Release Line
Date: 2026-07-17
Status: authoritative status map. Docs 01–09 were written against main
(v0.1.8 alpha). The active line is dev (pgGraph 1.0.0, release-ready,
unpublished, validated at commit 4edabea), which completed the
todo/v1-release/ program (R0–R7) and rewrote the public registers without
KI numbering. This document maps every doc 09 slice onto that reality.
Continuity: the old plan lives on dev at todo/v1-release/ (completed,
archived) and todo/full-graph-engine/ (design references). The alpha
register edits that docs 01–05 were merged into are preserved on branch
review/alpha-register-merge (not carried into dev). KI numbers used in
docs 01–09 refer to that superseded alpha numbering — treat them as labels
for the descriptions, not live register IDs.
Verified against dev code/docs (2026-07-17)
| Doc 09 slice | Status on dev | Evidence |
|---|---|---|
| S0 automated PR CI (KI-017) | Removed | Release gates run locally; the self-hosted GitHub Actions workflow was removed. |
| C1 ingest/manifest publication race (KI-012) | Fixed, different mechanism | Manifest publish uses create_new (O_EXCL) no-overwrite CAS; test projection_manifest_stale_publisher_loses_compare_and_swap (projection/manifest.rs). The process-local mutex remains as a fast-path guard, no longer the only protection. Verify-only item: confirm loser-retry behavior surfaces to apply_sync() callers |
| C2 bidirectional BFS minimality (KI-015) | Fixed 2026-07-17 | path_finder.rs now tracks per-node hop depth in ParentStep and fully scans each BFS level before selecting the minimum-combined-distance meeting node, instead of breaking on the first candidate found. Regression: bidirectional_bfs_selects_minimal_combined_distance_meeting_node (deterministic) + bidirectional_bfs_matches_single_direction_bfs (differential proptest, 20k cases). See todo/progress.md 2026-07-17 entry |
C3 _sync_log retention (KI-016) |
Likely still open — re-verify | No pruning path found on dev (DELETE FROM graph._sync_log absent). R3 “bounded storage” covered snapshot/watermark and compaction crash-safety; log retention was not located |
| C4 RLS topology boundary (KI-013) | Likely still open — re-verify | Dev user docs still frame RLS as a source-table concern; no topology-read RLS boundary section found in querying.mdx/limitations-and-fit.mdx. R1 “RLS green” evidence should be audited to see which paths it covered |
| C5 tenant filter-vs-isolation (KI-014) | Re-verify | Artifact v6 added a tenant dictionary and dense per-node tenant tokens (R3C); semantics of caller-supplied tenant scope need re-checking against the new representation |
| O1 poison-row dead-lettering (KI-018) | Re-verify (R2/R3 job retry work may cover it) | — |
| O2 atomic artifact+sidecar commit (KI-019) | Probably obsolete — re-verify | Persistence moved to a 26-section artifact v6 with generation-CAS publication and pinned generation-specific bases; the .sync/.projection_mode sidecar-window finding was against the v0.1.8 format |
| O3 truncation signal (KI-020) | Fixed 2026-07-17 | Added a trailing capped boolean column to graph.traverse(), graph.get_neighbors(), and graph.traverse_search(), true only when max_nodes/max_frontier cut expansion short. Confirmed shortest_path()/weighted_shortest_path() were already safe via PathWorkBudget erroring on budget exhaustion instead of returning a silent “no path”. Intentional breaking SQL change; release contract regenerated. See todo/progress.md 2026-07-17 entry |
| O4 mutable-overlay production caveat (KI-021) | Superseded | 1.0 promotes durable projections as a supported, gated surface (R3 evidence); the alpha caveat no longer applies as written |
| O5 README_zh parity (KI-024) | Done | README_zh on dev is at 1.0.0 |
| Stage 3 live mode (L1–L4) | Largely delivered by R2/R3 — re-scope | Bounded builds, governed external runs, generation CAS, retained serving generation, durable projection profiles all landed. Remaining from doc 09: weighted-paths-over-overlays (L3) — re-verify; auto-maintenance beyond packaged pg_cron remains a documented operational boundary (dev known-issues “External scheduling is required”) |
Stage 4 hybrid auto mode |
Open | No projection_mode = 'auto' policy layer on dev |
| F1 validation-cache / first-backend cost | Possibly fixed — re-verify | R3C: “checksum verification is bounded”; current-manifest readers pin generation-specific bases. Benchmark the first-backend query cost on dev before keeping this item |
| F4 shared reverse CSR / F5 direction-optimizing BFS | Open (F4 partially?) | Artifact v6 loads “both graph directions … into one compact immutable mapping per backend” per dev limitations doc — re-verify whether reverse CSR is now mmap-shared; F5 not present |
| Stage 2P P1 property-graph catalog import | Already planned on dev | todo/full-graph-engine/08-postgresql-19-property-graphs.md specifies the CREATE PROPERTY GRAPH catalog frontend — merge doc 09’s P1 details (GA timing, pg_get_propgraphdef() drift detection) into that plan rather than duplicating |
| Stage 2P P2 LDBC harness incl. GRAPH_TABLE comparison | Open | Not found on dev; doc 09 stands. C2 + O3 still gate publication |
Stage 2P P3 graph.graph_table() pattern surface / P4 CustomScan |
Open | 1.0 contract explicitly excludes PG19 SQL/PGQ; roadmap-owned. Doc 09 stands |
| Stage 6 R1 overlay unification / R2 builder regclass / R3 endianness | Re-verify | Persistence and build were heavily reworked in R3/R4; re-check each against dev before scheduling |
Corrected next-actions list (post-1.0 publication)
Still-open, verified items first:
C2 — bidirectional BFS minimal-meeting fix.Done 2026-07-17.O3 — truncation/Done 2026-07-17 (breaking SQL change; release contract regenerated; live-verified — see item 3’s full pgrx run, which superseded the originally-deferred “pgrx test run owed” note).cappedsignal on bounded traversal results.C4/C5 — RLS topology boundary and tenant-scope semantics.Fixed (behavior change) 2026-07-17, superseding the earlier documentation-only decision at the user’s explicit request:graph.build()now refuses tables with row-level security enabled unlessgraph.allow_rls_tables = on(new GUC, diagnosticPG021), andresolve_tenant_scope()now rejects an explicit tenant SQL argument for non-pinned tenant_column-registered graphs whilegraph.enforce_tenant_scope = on, forcing the trusted session-setting path instead. Three existing pgrx tests were updated to the new behavior and two new ones added. Also fixed a local pgrx-test blocker (LC_ALL=C LANG=Cworks around a macOSpostmaster became multithreadedstartup failure) that had been silently preventing all live pgrx verification this session. With it fixed, ran the complete pg17 pgrx suite (--features "pg17 development", matching the release-gate convention): 1143 passed, 0 failed, 1 ignored — live confirmation of both this change and O3. True per-row RLS-aware topology filtering (vs. this build-time acknowledgment gate) remains unimplemented; it would require a panic-safe temporary PostgreSQL security-context switch to the outer caller, judged too risky to hand-roll in this pass. Seetodo/progress.md2026-07-17 entry.C3 —Implemented and live-verified 2026-07-17, following the design in_sync_logretention.todo/full-graph-engine/12-sync-log-retention-plan.md:graph._sync_watermarksheartbeat table, the safe-floor computation (pure, unit- and proptest-covered), pruning wired intograph.maintenance()only, 3 newsync_health()diagnostic columns (breaking SQL change; release contract regenerated), and — a gap found and closed during implementation that the original design didn’t specify — agraph._graphs.sync_log_pruned_before_idwatermark plus a newPG022guard so a resumed stale backend fails closed instead of silently replaying past pruned rows. 6 new pgrx tests (found and fixed a real off-by-one and two flawed test simulations by actually running them live, not just compiling). Full pg17 pgrx suite: 1156/1156. Seetodo/progress.md2026-07-17 entry.- Stage 2P — fold doc 09’s P1/P2 specifics into
todo/full-graph-engine/08-postgresql-19-property-graphs.md; keep P2’s LDBC + GRAPH_TABLE comparison and the PG19-GA clock. - Re-verification sweep for the remaining “re-verify” rows above before scheduling any of them.
- Release-gate re-run — DONE. The live pg17
cargo pgrx testpass is now done (1156/1156, covering O3/C4/C5/C3 together), but the full-matrix evidence atrelease/evidence/full-matrix.json(recorded at4edabea) still predates all four changes and has not been regenerated. Remaining: the multi-version PostgreSQL 14–18 matrix and the non-pgrx gates (docs-render,external-links,crash-recovery,pg-upgrade-matrix,package-install-matrix); the Linuxpostgres-sanitizergate remains unavailable in this environment; signing/tagging/publication remain release-owner actions. In progress: re-run iteration 5 hit a genuine regression from C4 itself —graph/tests/heavy/concurrency_stress.sh’s RLS-worker-identity probe legitimately enables RLS and now needs the newgraph.allow_rls_tablesopt-in, same as the earliergql.rspgrx test fix. Fixed, live-verified standalone, committed48b18dd; matrix relaunched as iteration 6. Iteration 6 result: 16/17 gates pass (only the expectedpostgres-sanitizermacOS/valgrind gap fails), but two docs/tooling-only commits landed on the tree mid-run so the evidence’s commit stamp (48b18dd) trails actualHEADby two commits; neither touches Rust/SQL so gate outcomes are unaffected, but a 7th, final iteration was relaunched against a static, confirmed-clean tree at84cba5bfor a pristine single-commit evidence bundle. Iteration 7 failed atlegacy-release’s playground gate: a pre-existing, non-regression race between the sandbox container’s periodic scheduled-maintenance worker andgraph.build()’s advisory build lock (PG006), whichsandbox/common/run_benchmarks.pyalready retries around butplayground_release_gate.pydid not. Root-caused and live-verified against the real advisory lock (not just read from source); fixed with the same retry precedent, committedd150c64. Iteration 8 failed atread-latency– a genuine environmental blip (an unrelated ambient Homebrew Postgres service restarting), confirmed not a pgGraph bug by an immediate clean standalone re-run; no fix needed. Iteration 9 reachedpackage-install-matrixbefore hitting the same PG006 cascade again, this time provingd150c64’s retry itself had a bug:run_psql’sstop_on_error=Falsebranch (the only branch the playground gate actually uses) raised a generic hardcoded message instead of the real stderr, so the retry’s PG006 substring check could never match. My original verification ofd150c64had exercised the other branch (stop_on_error=True), so it looked correct without actually covering the real call path. Fixed by including the real stderr in the raised message (commit04338c3), re-verified live using the correct branch this time. Iteration 10: clean pass, 16/17 gates,git_commit = ff96701, no commits mid-run. Every gate passes except the expectedpostgres-sanitizermacOS/no-valgrind gap. This closes out the release-gate re-validation owed since the takeover. Seetodo/progress.md2026-07-17/18 entries for the full blow-by-blow.
Release-takeover record (2026-07-17)
- The interrupted validation run completed after takeover:
full-matrixtier ondev@4edabea, 16/17 gates pass. The only failure ispostgres-sanitizer, which fails closed in 0.4 s because valgrind is unavailable on this macOS workstation (run_postgres_process_sanitizer.shrequires it). This is an environment-deferred release-operator gate on Linux, consistent with the repo’s existing convention for environment-specific gates. Evidence:release/evidence/full-matrix.json+release/evidence/logs/full-matrix/(local, gitignored by design). - The previous agent’s planned “sfw Dockerfile correction” was rejected:
sfwis a host-side wrapper (/usr/local/bin/sfw) that does not exist in Docker build containers; the AGENTS.md policy governs agent-executed host commands, not shipped build files. Adding it to the production Dockerfile would break every user’s image build and force needless evidence regeneration.dev@4edabeatherefore remains the validated release candidate; no new commit or evidence regeneration is required for this item. - Remaining release work is release-owner action only: Linux sanitizer gate,
signing/tagging, publication (per
todo/v1-release/README.md).