Skip to content

docs(gfql): start-here nav with perf/reference hubs; result-first benchmark pages - #2017

Open
lmeyerov wants to merge 29 commits into
masterfrom
docs/gfql-nav-and-benchmark-copy
Open

docs(gfql): start-here nav with perf/reference hubs; result-first benchmark pages#2017
lmeyerov wants to merge 29 commits into
masterfrom
docs/gfql-nav-and-benchmark-copy

Conversation

@lmeyerov

@lmeyerov lmeyerov commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Docs-only. Base is master because develop was promoted and deleted in #2016. Two changes to the GFQL docs, no page moves, no product code, no benchmark numbers changed.

1. GFQL navigation: short start path + two hubs. gfql/index had one 22-entry User Guide toctree. It now has:

Before (one flat list) After
about, overview, remote, engines, indexing, index_adjacency, performance, benchmark_filter_pagerank, benchmark_graphframes, translate, combo, quick, cypher, where, return, predicates/quick, datetime_filtering, builtin_calls, policy, strict_mode, schema, wire_protocol_examples; Developer Resources: spec, validation Start Here: about, overview, quick, cypher
Guides: Performance and Benchmarks (gfql/perf/index: engines, performance, indexing, index_adjacency, remote, both benchmark pages), Language Reference (gfql/reference/index: where, return, predicates, datetime_filtering, builtin_calls, combo, translate, policy, strict_mode, schema, wire_protocol_examples, loading_graph_data)
Developer Resources: spec, validation (unchanged)

Every existing URL is unchanged: the hubs are new index pages that list the existing files, so first-time readers see four pages and experienced readers expand a hub. gfql/loading_graph_data was not in any toctree before; it now sits in the reference hub. The bench-number policy pins gfql/index.rst and gfql/benchmark_filter_pagerank.rst by path, which is another reason not to move files.

2. Benchmark pages: result first, one limits section, plain technical English. gfql/benchmark_filter_pagerank and gfql/benchmark_graphframes now open with the measured outcome and which engine to use, and move all measurement rules into one "Method and limits" section per page. Removed: repeated inline caveats, self-referential wording ("honest", "stated plainly", "documented, not hidden"), triple restatement of the same numbers, and the trailing "What this shows / Why this matters / For more" sections. Sentences are short and active.

Numbers: unchanged. The filter/PageRank page still prints every figure through :bench: roles with both bench-provenance blocks and bench-disclosures. Every GraphFrames literal was re-derived from gfql/_static/graphframes/results.json (ratios recompute to the published 43x/7.4x/2.3x/14.7x/0.33x and 42x/8.7x/1.3x/10.5x/0.23x). Two edits to unverifiable text: the host memory is now "about 120 GB" (the exact 119 GB figure has no source in the repo), and Friendster node/edge counts cite SNAP. The Cypher example's -- comments are now // (valid Cypher; removes a Sphinx lexer warning).

Follow-up (not in this PR): migrating the GraphFrames literals to :bench: cells needs a new exporter kind in pyg-bench.

Validation

  • rstcheck --config docs/.rstcheck.cfg on all five touched .rst: clean
  • python -m pytest docs/test_bench_numbers.py: 26 passed
  • Local sphinx-build -b html (Sphinx 9.1, no Docker): exit 0; zero warnings on touched pages; remaining warnings are pre-existing (missing demos/ in a bare checkout, API duplicate targets)
  • Every gfql/ page is in exactly one toctree (scripted check over 36 pages); rendered sidebar matches the table above
  • CHANGELOG: ## [Development]### Docs
  • CI note: the test-docs lane skipped because it needs: python-lint-types, which skips on docs-only changes (pre-existing workflow gap, not changed here). The Read the Docs PR build is the CI evidence for this PR.

Slop audit criteria followed the anti-style guide in ~/Work/research/ai-slop-anti-guide (result first, no self-assessment residue, one caveat per claim, named comparison scope).

Owner review wave (second commit)

  • gfql/overview: opens with the positioning (only open-source in-process Cypher on dataframes; columnar/vectorized framing alongside DuckDB/ClickHouse); the empty hidden toctree that made the page render as a folder is removed.
  • Neo4j page retitled Case Study: Cypher + PageRank Pipeline, GFQL vs Neo4j + GDS and listed under Start Here (URL unchanged). The lede says what is compared, what GFQL and Neo4j + GDS are, and the outcome; the above-the-fold caveat paragraph is gone; "The pipeline" gets a lead sentence.
  • GraphFrames page: the lede states the comparison and the outcome (best engine faster in all 8 cells; CPU alone in 6 of 8), and two per-task bar charts (livejournal_tasks.svg, orkut_tasks.svg) are rendered from results.json by gfql_bench_charts.py under the same sync test as the Neo4j charts.
  • Provenance: bench-provenance accepts several run ids and renders one Measurement block with reader-facing fields only and caveats folded in; the separate "About these measurements" box is gone from this page. Run provenance strings now lead with the RAPIDS base image (pyg-bench [BUG] Neptune p3.16 instance does not start #220, vendored byte-identical).

Wave 3 (owner review, 2026-09-04)

  • Numbers were stale, now fixed at the source: the vendored pyg-bench artifact pointed at the 2026-07-26 q1–q9 board; pyg-bench ci(mypy) #222 retargets it to the relaned 2026-08-13 board (GFQL bound cold per timed run) with Kuzu, Memgraph, and Neo4j columns, publishes the aligned SNB SF0.1/SF1 four-engine matrix, and adds a valid-lane audit so a newer valid board can no longer sit unpublished. This PR vendors that artifact byte-identically.
  • Prevention in this repo: the bench extension enforces policy.max_compute_commit_drift against the checkout (git history permitting; per-run waivers with reasons ride in the artifact), and a new :bench-tally: role derives "N of M queries faster" from cells so counts never go stale by hand.
  • gfql/performance: no release-pinned headings; every hand-typed legacy figure removed; SNB tables with the databases' wins stated; five-engine q1–q9 boards; one Measurement block.
  • Structure/wording: Start Here = 10-minute guide, overview, Speedup Case Study; quick reference and Cypher syntax head the Language Reference hub; plain titles for the indexing pages; engines page note boxes folded into prose and a rewritten "coming from" table (Memgraph added, PuppyGraph dropped); overview merges Why/Key Features and links the engine-design and launch posts; about examples 3–7 gain tested Cypher twins (example 4 now returns rows on its own sample graph); marketing filler removed.
  • Filed while testing the examples: gfql cypher: WHERE on a single alias of a multi-alias MATCH is rejected as multi-source #2019 (single-alias WHERE rejected in multi-alias MATCH), gfql cypher pandas: three IN predicates across (a)-[e]->(t) crash with 'Unalignable boolean Series' (polars OK) #2020 (pandas three-IN crash).

Wave 3 evidence (2026-09-04, commits a3e4e91 + 751b37b)

  • T2.9.12 q1–q9 boards re-measured at PyGraphistry 0.59.0 with a polars-gpu column (pyg-bench ci(mypy) #222/[FEA] Remote hypergraph #230): performance.rst prints tallies (GFQL Polars beats Kuzu 8/9 at 20k and 8/9 at 100k; Memgraph 7/9 and 6/9; Neo4j 9/9 and 8/9; GPU beats CPU 4/9 at 100k) and names every loss, including GPU q8 at 100k.
  • T2.9.16/.17 GraphFrames ladder, first publication (pyg-bench [FEA] Docker security scan #235): benchmark_graphframes.rst now prints cells only — host-Spark GraphFrames baselines for LiveJournal and Orkut, GFQL GPU PageRank with the cuGraph solver stage split out (shaded in the charts: LJ 890.9 ms query / 59.3 ms solver, 18.3x vs GraphFrames; Orkut 2,795.7 ms / 151.4 ms, 12.5x), and the released code's LJ filter/hop rows as diagnostic cells. The June results.json and the parity file are removed; charts render from cells and are tested on a synthetic ladder.
  • Loss stated: the released undirected multi-hop path is ~30x slower than in June (LJ 2-hop 64 s) — issue perf(gfql): undirected multi-hop is ~30x slower since #1918 — pure-Python O(E) seed-rediscovery loop #2023, fix in PR perf(gfql): numpy form of the undirected seed-rediscovery rule (#2023) #2024 (engine-native rework after review). The released code's LJ 2-hop stays on the page as a diagnostic before-state sentence.
  • Ladder at the fix head (commit 1b81975, pyg-bench [FEA] Bill of materials tracking #236): GFQL filter/hop cells and ratios for LiveJournal and Orkut measured at PR perf(gfql): numpy form of the undirected seed-rediscovery rule (#2023) #2024's head (disclosed as pre-landing in the provenance block; re-receipt after it lands): CPU faster than GraphFrames on filter and 1-hop on both graphs, GraphFrames wins 2-hop on both (0.5x LJ, 0.4x Orkut), the GPU streaming executor loses every hop.
  • T2.9.16/T2.9.15 Friendster: one attempt on the CPU streaming path — 1.8B edges bound from a lazy scan, degree filter 3.1 s (6,585,312 nodes), 1-hop 6.1 s (166,615 nodes), peak RSS 106 GB of the 119 GB host; 2-hop/PageRank not attempted (projected past the host from the Orkut peak), GraphFrames did not load it. The page opens with that measured ceiling, has a Friendster table and chart, and one bench-provenance block over both ladder runs.
  • Prevention (T2.9.18): lane audit + compute-commit drift enforcement + bench-tally (this PR), PR-template checklist and a fixed load-breach classifier in pyg-bench (Dev/hypergraph fixes #231, [FEA] RDF/sparql support - neptune, ... #234).
  • Validation for this push: rstcheck, local sphinx build (bench-number audit clean), docs/test_bench_numbers.py 36 passed; RTD preview checked in Chrome after build.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1

@lmeyerov

lmeyerov commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

READY (cab184f) but LAST per the landing order: rebased on master; 59 green + 10 skipped + RTD; re-vendor from the master re-measure follows before the final merge.

@lmeyerov

lmeyerov commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

Re-vendored from the master re-measure: docs/source/_data/gfql_benchmarks.json now equals pyg-bench published/docs-numbers.json at pyg-bench main af1513f (PR graphistry/pyg-bench#249: SNB SF0.1/SF1 arms and q1–q9 20k/100k boards at pygraphistry master 5a6586f, sentinel baseline at 86de0f5). 166 of 262 cells changed, all within noise of the 4 September board except the seeded SNB shapes, which are the release wins (pandas message-content 10.06→1.66 ms, seed-lookup 30.12→3.91 ms; polars seed-lookup 21.82→10.19 ms). Losses stay on the pages through the same cells (100k q8 Kuzu 9.7 ms vs polars 14.0 ms; polars tag-cooccurrence 30.2→31.7 ms, inside its 17% run-to-run spread). The SNB pre-landing disclosure is gone (both scales are the release measurement); the GraphFrames note now says #2024 has landed since and the ladder was not re-run. docs/test_bench_numbers.py 37 pass. Stays open until the rest of the queue lands (merges last).

@lmeyerov

lmeyerov commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

CI receipt at 090ad9e: 59 check-runs success, 10 skipped by the path filter (docs-only change). docs/test_bench_numbers.py 37 pass locally; the vendored JSON equals pyg-bench main af1513f.

lmeyerov and others added 20 commits September 7, 2026 11:11
…chmark pages

- gfql/index: Start Here (about, overview, quick, cypher) + Guides hubs
  gfql/perf/index and gfql/reference/index + Developer Resources; no page
  moved, URLs unchanged; loading_graph_data joins the reference hub
- benchmark_filter_pagerank, benchmark_graphframes: lede states result and
  engine to use; one "Method and limits" section; numbers unchanged and
  re-verified against bench cells / results.json; Cypher comments use //
- CHANGELOG: [Development] / Docs

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…provenance block

- overview: positioning paragraph (only open-source in-process Cypher on
  dataframes; columnar/vectorized framing); remove empty hidden toctree that
  rendered the page as a folder; trim marketing wording
- benchmark_filter_pagerank: retitle as a case study, list it under Start
  Here; lede says what is compared and the outcome; drop the above-the-fold
  caveat paragraph; add a pipeline lead sentence
- benchmark_graphframes: lede says what is compared and the 7-of-8 outcome;
  add per-task bar charts rendered from results.json by gfql_bench_charts.py
  (byte-reproducible, covered by the chart sync test)
- _ext/gfql_bench: bench-provenance accepts several runs and renders one
  Measurement block (reader-facing fields only; caveats folded in via
  :disclosures:)
- vendor pyg-bench published numbers (runtime strings now name the RAPIDS base
  image; pyg-bench #220); numbers unchanged

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…e 6/8); wrap chart strings

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…engines table, tested Cypher twins

- index: Start Here = about, overview, speedup case study; quick + cypher
  head the Language Reference hub (spec linked)
- benchmark_filter_pagerank: "Speedup Case Study" title
- indexing / index_adjacency: plain-language titles and cross-refs
- overview: one "Why GFQL?" list (was Why + Key Features), engine-design and
  launch blog links
- engines: opening note boxes folded into prose; "coming from" table with
  concrete change + measurement pointer; Memgraph row; PuppyGraph removed;
  section "Parity and fallback rules"
- about: examples 3-7 gain tested Cypher twins; example 4 pattern now returns
  rows on the sample graph; sample-graph block is executable in the doc lane
- slop words removed across gfql pages (leverage/seamless/honest/powerful/
  critical gap); no numbers added

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…NB matrix; cell-derived tallies; drift enforcement

- vendor pyg-bench published/docs-numbers.json @ main 7426456 (relane board
  with Kuzu/Memgraph/Neo4j, snb_aligned SF0.1/SF1, drift waivers)
- _ext/gfql_bench_data: :bench-tally: (strict "N of M" from cells, registers
  refs) and max_compute_commit_drift enforcement via git rev-list on
  graphistry/compute, honoring policy.drift_waivers; None on shallow clones
- performance.rst: no release-pinned headings; legacy untraceable literals
  removed; SNB tables with losses stated; five-engine q1-q9 boards; single
  Measurement block with caveats; q8 rendered as a result (cold binding)
- overview: where GFQL wins and where databases win, with links
- tests: tally, drift (fail / waived / unknown), vendored runs within policy

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…s diagnostic

- vendor pyg-bench published numbers with results/filter-pagerank-059-20260904
  (GFQL CPU/GPU re-measured at 3fb216d under the pinned PageRank contract)
- lede states CPU-vs-Neo4j on both graphs and the Twitter GPU ratio; the
  GPlus GPU time renders via :bench-diag: with the selection caveat, and no
  GPlus GPU-vs-CPU ratio is claimed; alt texts follow the cells
- gplus_pipeline chart drops the withdrawn ratio annotation

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
Vendor the pyg-bench publication (graphbench-q1q9-{20k,100k}-20260904:
pandas, polars, polars-gpu at 3fb216d; Memgraph/Neo4j lanes of 2026-08-12).
performance.rst gains the polars-gpu column, tallies for GPU-vs-CPU and
GFQL-vs-each-database, and names every loss (Kuzu q4/q8, Memgraph q3/q5/q6/q7,
Neo4j q5, GPU q8). Provenance block retargeted to the new runs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…e the PageRank solver

Vendor pyg-bench's GraphFrames ladder publication (LiveJournal and Orkut:
host-Spark GraphFrames baselines, GFQL GPU PageRank with the solver stage as
a component cell, and the released code's LJ filter/hop rows as diagnostic
cells behind #2023). The page now prints cells only, with one multi-run
provenance block; the June saved results and the stale parity file are
gone. The chart generator reads the ladder cells (no results.json), draws
the solver share as the solid part of each GFQL PageRank bar and the rest
of the query as the light part, marks unmeasured systems, and is tested on
a synthetic ladder. Friendster is named as the next rung with the reason it
waits on #2024.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…ly with a label

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…he measured ceiling

Vendor pyg-bench's second ladder publication: GFQL filter/hop cells and
ratios for LiveJournal and Orkut at the head of #2024 (disclosed as
pre-landing in the provenance block), and the Friendster rung (1.8B edges,
filter + 1-hop on the CPU streaming path, 106 GB peak of a 119 GB host).
The page opens with that ceiling, prints wins and losses side by side
(GPU PageRank 18.3x/12.5x; CPU faster on filter and 1-hop; GraphFrames
wins 2-hop on both graphs; the GPU streaming executor loses every hop),
gains a Friendster table and chart, and keeps the released code's 2-hop
as a diagnostic before-state sentence.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…nt (T2.9.10)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…ntence from the performance lede (review round 4: A5, B2)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
… a Fastest column

Review round 4: the q1-q9 and SNB boards made the reader compare digits to
see who won. bench-board renders a board from published cells (same gate as
the :bench: role), bolds the fastest cell on each row, names it in a last
column, and prints a dash for a system that has no number for that query.
The four boards on the performance page now use it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…ocks; values unchanged)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…rs) and say where the loss comes from

Review round 4: the published GFQL SNB column ran without indexes while the
databases ran with theirs. The boards now print the indexed pandas and
polars arms (pyg-bench snb-aligned-indexed-20260904) next to Kuzu, Neo4j
and Memgraph; the prose says the index engages only on the hop-shaped
rows (2.5-3x there) and that the point lookups keep a ~20 ms per-call
floor in the chain pipeline (#2027). The un-indexed run stays in the
provenance block as the before-state.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh7i1
…ger-vs-streaming and igraph-conversion answers

Re-vendors pyg-bench docs-numbers (batch C/D): CPU PageRank cells for LiveJournal and
Orkut (GraphFrames wins; solver share shown), Friendster 2-hop cell, Friendster ceiling
text (GPU stops at 1-hop, PageRank does not fit on either path), engine guidance for CPU
PageRank (#2032), streaming-vs-eager note; charts regenerated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh1i1
lmeyerov and others added 6 commits September 7, 2026 11:11
…ures in GiB from the receipts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh1i1
… and the gates added

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WwMmVFo44ADiRRj5cxh1i1
…index-resolved seeds

Vendors pyg-bench published/docs-numbers.json at main 5cf81ae (byte-identical):
the SF0.1 indexed GFQL cells come from the #2038 head with the pre-landing
disclosure, SF1 stays the release measurement. The SNB prose states the
native op-list arm, where the resident indexes now engage, the hop rows they
do not change, and the open issues behind the remaining gaps. Release-notes
Performance paragraph names the native seed resolution and the sentinel's
native op-list points.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RhboAkmjP5eXbCCkX1BMt
…(pyg-bench #249)

docs/source/_data/gfql_benchmarks.json = pyg-bench published/docs-numbers.json
after the release close-out re-measure at pygraphistry master 5a6586f (SNB
SF0.1/SF1 arms, q1-q9 20k/100k boards); provenance directive names the master
runs; the SNB pre-landing disclosure is gone (both scales are the release
measurement) and the GraphFrames ladder note says the fix has since landed
without a re-run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QztW7jYsDd66e8rb8pJNQA
@lmeyerov
lmeyerov force-pushed the docs/gfql-nav-and-benchmark-copy branch from 090ad9e to 60d39f0 Compare September 7, 2026 18:11
@lmeyerov

lmeyerov commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto master 1a41079 (60d39f0, docs only, clean). Expect the docs-numbers contract test to be RED on this head by design: the vendored boards were measured at 5a6586f and the landed 0.60 stack put them 19 compute commits behind master (policy allows 12). Rather than waive, the SNB arms, q1–q9 boards and sentinel are being re-measured at master 1a41079 on dgx now; this PR gets re-vendored from that run, with any cell that moved called out here. The three 0.59.0-era runs (GraphFrames ladder ×2, filter-pagerank) get explicit drift waivers with the reason stated in the pyg-bench PR. Review the prose and structure via the RTD preview meanwhile: https://pygraphistry--2017.org.readthedocs.build/en/2017/gfql/index.html

@lmeyerov

lmeyerov commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

CI on 60d39f0: 59 green, 11 filter-skipped. Correction to my note above: CI does not run docs/test_bench_numbers.py on this PR (it is among the skips), so CI green here is not evidence for the numbers. Locally that test fails on drift (19 compute commits past the policy's 12) until the re-vendor from the master 1a41079 re-measure lands.

…tent, docs-review editorial policy

engines: one keyword section replaces the duplicated opening and switching sections; footnote citations folded into the decision table and three plain rules; 'when not to use Polars' merged into the table; parity section cut to three bullets; internal process prose removed; competitor table states benefits; plain sentences in the memory note. perf hub: case study first, then the boards, then a separate track for getting the speed on your data, with a reference list. agents/skills/docs-review: the editorial policy (plain language, jargon table, AI-writing tells, review procedure).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HdYcPgiafGGutW9KfG3gg1
@lmeyerov

lmeyerov commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Editorial pass 1 (owner items 1–5, 7–12 on engines; 6 started) at 3dbf8fc. Preview rebuilds from this head in a few minutes:

  • engines: https://pygraphistry--2017.org.readthedocs.build/en/2017/gfql/engines.html — the opening and the old 'Switching engines' section are one 'Switch engines with one keyword' section; the [F1]–[F5] footnotes are gone (their facts live in the decision table notes and three plain rules under it); 'When not to use Polars' is merged into that table; 'Parity and fallback rules' is three bullets under 'Same results on every engine'; 'Methodology' and the committed-artifact sentence are gone; 'Coming from another graph tool' states what GFQL removes and what you gain, and no longer describes competitors' strengths; the memory note has no parentheticals. Prose is about 40% shorter; every table and code block is kept.
  • perf hub: https://pygraphistry--2017.org.readthedocs.build/en/2017/gfql/perf/index.html — two reader tracks: 'See what it is worth' (case study vs Neo4j + GDS first, then the boards, then GraphFrames) and 'Get the speed on your data' (engine, adjacency index, indexing guide, remote GPU), plus a short reference list.
  • Editorial policy started at agents/skills/docs-review/SKILL.md (plain-language rules, a jargon table with replacements, AI-writing tells, review procedure). Jargon pass on the other perf pages is next; queued with your further items in plan.md before any edit.

…run records, identical results)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HdYcPgiafGGutW9KfG3gg1
@lmeyerov

lmeyerov commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Jargon pass (item 6) at 777475d across performance, index_adjacency, indexing, benchmark_filter_pagerank, benchmark_graphframes, overview: 'seeded' → 'from known nodes' except the two defining first uses; 'receipt' / 'committed artifact' → 'run record'; 'parity' → 'identical results'; 'point lookup' → 'single-node lookup by id'; 'lane' → 'path'. No number changed. Items 1–12 from your list are now all applied; add more per page and I queue them in plan.md before editing.

…measure (pyg-bench #251); board prose follows the new verdicts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HdYcPgiafGGutW9KfG3gg1
@lmeyerov

lmeyerov commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Re-vendored at d660e33 from the master 1a41079 re-measure (pyg-bench #251, publishing now). docs/test_bench_numbers.py passes locally including the drift policy (37 passed). Cells that moved more than 15% vs the 5a6586f vendoring: graphbench.20k.q4.polars_gpu 16.41 → 4.53 ms (the GPU tiny-point outlier did not reproduce), graphbench.20k.q8.polars_gpu 2.17 → 2.53, snb.sf01.message_creator.gfql_pandas_idx 2.87 → 2.33; everything else within run-to-run spread. Verdict changes on the boards: 100k q5 polars vs Kuzu is now a tie (0.97×, was a weak 1.12× win); 20k q8 is a tie (1.10×); 100k q8 stays the one loss. Board prose on performance.rst updated to the new verdicts; the tallies are roles and follow the cells automatically.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant