Repository navigation
Graph analytics catalog: 20 new kernels, and a workspace CI that can pass - #9
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
P1 of the analytics catalog plan. Registration and direct execution now read one catalog of specs; run_on_projection finds a kernel by name and converts its result to an ArrowResultCursor, and projection_options exposes the projection reading the registered procedures use. Kernels return their result rather than a row cursor, so the same value serves both surfaces. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The workspace job has failed on every push: LadybugDB's prebuilt static library bundles zstd, a whole-workspace --all-features build unifies features so zstd-sys is linked into the same test binary, and rust-lld rejects the duplicate ZSTD_* symbols. macOS's linker accepts them, so it never reproduced locally. Built alone, grust-ladybug does not pull zstd-sys. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…urns Group 5 of the analytics catalog, first through the whole pipeline: kernel, Arrow output, registry, Cypher. NodeTable gives per-node results one Arrow adapter and one row adapter; Meter charges work in blocks. The oracle applies the definition of a core to 2,482 small graphs, multigraphs and loops included. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e start Group 4 of the analytics catalog. The forward algorithm finds each triangle once on the simple underlying graph; node blocks of equal estimated work run on the caller's rayon pool into atomic counters, so the counts and the work charged are the same at any width. parallel.rs is the pattern later kernels reuse. Nutmeg serves both procedures with no change of its own. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Group 1 of the analytics catalog. One modularity formula serves Newman's undirected and Leicht-Newman's directed case; moves are applied one at a time so the result is reproducible at any pool width. The oracle is a dense-matrix modularity and the brute-force optimum over every partition. random.rs is the counter-based generator later kernels share. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ernels Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nup test saw Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The offline tests load upstream/lsqb, which is gitignored, so they could never pass on a fresh checkout. They were unreachable while the Ladybug link failure stopped the job earlier. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
alexy
added a commit
to querygraph/nutmeg
that referenced
this pull request
Sep 20, 2026
Lands together with querygraph/grust#9, which adds run_on_projection, public projection_options and twenty kernels. Nutmeg no longer dispatches kernels by name itself. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
alexy
added a commit
that referenced
this pull request
Sep 20, 2026
Documentation only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tier A of
docs/goals/graph-analytics-catalog.md: the procedure registry grows from 10 projection kernels to 30, and Nutmeg serves every one of them with no code of its own.Kernels
louvain,leiden,labelPropagationbetweenness,closeness,harmonic,eigenvector,katz,hitskCore,triangleCount,localClusteringCoefficient,bridges,articulationPoints,biconnectedComponentsnodeSimilarityspanningTree,maxFlow,minCutfastRPEach has an independent oracle in its test (brute force, a dense-matrix definition, or exhaustive search) plus hand-computed cases, and cancellation, budget and scratch-release checks. Parallel kernels return bit-identical results and charge identical work at 1, 2, 3 and 8 threads;
louvain,leidenandlabelPropagationare sequential on purpose, because reproducibility is the contract.Plumbing
run_on_projectionand publicprojection_options, so an embedder runs any kernel by name on its own projection.NodeTable: one result shape for per-node values, for rows a kernel keys itself (node pairs, edges), and for fixed-lengthFloat32vectors (ArrowFixedSizeList). A table with no rows yields one empty batch carrying its schema.target.parallel.rsandmeter.rs: fixed blocks combined in order. The other agent'sWorkMeteronwork/rayon-kernelssupersedesMeter; seecodex-to-codex.mdfor the proposed merge order.CI
The
workspaceworkflow has failed on every run for weeks, for stacked reasons each hidden by the one before:grust-ladybuglinked zstd twice under--all-featureson Linux. It is now tested on its own.benchmarks/lsqb/upstream/lsqb, which is gitignored.fetch-upstream.shnow downloads the pinned archive and verifies its size and SHA-256.Superseded pull-request runs now cancel themselves.
Not in this PR
articleRank(an option insidepagerank.rs), andbellmanFord/astar, which need projections that admit negative weights; the design question is recorded in the plan. Nutmeg'srun-on-projectionbranch must merge together with this.🤖 Generated with Claude Code