Skip to content

test(api): Official-parameter SCALE-20 engineering green on the public facade #710

Description

@DecisionNerd

Problem

The SCALE-20 ComputePool numbers (GU-06-MD-D00) were taken from an in-process AdjacencyGraph::with_test_edges kernel. That is not Official-track engineering green: no GraphForge ingest, no reopen/recount, no measured GSI after load, no one-hop/two-hop LIMIT Cypher.

Objective

Add a thin in-tree reference client that runs Graph500 parameters (SCALE=20, ef=16, undirected Kronecker/R-MAT) through the published Rust facade: generate → bulk ingest → reopen → recount/GSI → LIMIT 1000 one-hop and two-hop. Optional ComputePool 1 vs 4 rank observations on that same project.

Debt / regime

  • Debt type: test/proof (scale evidence on the wrong surface)
  • Quality regime: A (compute) — counts, GSI grade, LIMIT row bounds, evidence JSON. Timing is hardware-specific, never a CI millisecond gate.

Requirements

  • Ingest uses GraphForge::new + publish_bulk_nodes / publish_bulk_edges only (UUIDv7 identities). Not AdjacencyGraph::with_test_edges, not GraphWriter.
  • Reopen via a second GraphForge::new(Some(path)) and recount live V/E.
  • Grade GSI from those counts (GU from known undirected intent) until feat(api): workspace GSI profiler (GD/GU/Gx grade) #398 ships a profiler.
  • Run MATCH (a)-[r]->(b) RETURN b.node_uuid AS id LIMIT 1000 and the two-hop form; both finish with ≤1000 rows.
  • Evidence JSON matches docs/reference/scale-evaluation.md field names (schema_version: "1"). Generator identity discloses a bench-local Kronecker, not the pinned graph500 binary.
  • Do not set track: official. This is Official-parameter engineering green.
  • SCALE-6 smoke is required CI. SCALE-20 is ignored / Makefile opt-in. Not GitHub Actions.
  • No Graph500 generator in product crates.
  • Graph500 BFS kernel / TEPS is a non-goal (paths(by="bfs") is not that kernel).
  • Pairwise neighborhood kernels stay skipped at V=2^20.

Acceptance Criteria

  • SCALE-6 public-facade smoke: generate, ingest, reopen, GSI GU-01-XS-*, both LIMIT queries, evidence JSON schema.
  • Ignored SCALE-20 run: same pipeline; GSI GU-06-MD-*; evidence written to GF_G500_SCALE20_EVIDENCE_OUT (default under build/).
  • Generator disclosure is bench-local Kronecker (name/source/seed), not github.com/graph500/graph500.
  • Docs state this is not Official-track and not TEPS.
  • Makefile bench-g500-scale20 wraps the ignored release test.
  • Product crates do not grow a Graph500 generator.

BDD Completion Scenarios

Scenario: SCALE-6 smoke on the public facade
Given Kronecker parameters SCALE=6 ef=16
When the reference client generates, bulk-ingests, reopens, recounts, and runs both LIMIT 1000 queries
Then V/E match the ingested unique-undirected graph
And GSI is GU-01-XS-*
And both LIMIT queries return ≤1000 rows
And evidence JSON has schema_version "1"

Scenario: SCALE-20 engineering green (manual)
Given Kronecker parameters SCALE=20 ef=16
When the ignored release client runs the same pipeline
Then GSI is GU-06-MD-* after reopen
And one-hop and two-hop LIMIT 1000 finish
And evidence records generate/ingest/reopen/cypher_limit_1hop/cypher_limit_2hop
And track is not official

Non-Goals

  • Pinned official graph500 binary
  • Graph500 BFS / TEPS
  • track: official in harness evidence
  • Adding Kronecker to graphforge-exec / graphforge-api libraries
  • Pairwise kernels at SCALE 20
  • CI wall-clock thresholds

Related Issues

Open Questions

  • None (track stays off the official enum until a pinned Graph500 generator is used)

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions