[01] Product

From a diff to what to test.

Graphentra reads a pull request, traces what the change can reach, attaches a path to every surface it reports, and says what to test.

[02] The idea

Follow the structure, not every room.

When a building inspector signs off a change to a load-bearing wall, they do not re-inspect every room. They follow the structure to the rooms it holds up, and they write down anything they could not see behind the plaster.

Graphentra does that for a code change. It follows the dependency graph from what changed to the screens, endpoints and flows that depend on it, and it lists what it could not trace.

[03] How it works

Read. Trace. Prove. Say what to test.

Four steps from a diff to a checklist. Same diff, same answer, and every claim comes with its path.

  1. The Git diff is mapped to the exact symbols that changed, using the TypeScript compiler and type checker. Not regex, not embeddings.

    • Symbol-level, not file-level
    • Compiler-grade parsing
    • From changed functions to their callers Built · prototype
  2. The dependency graph is walked backwards from each changed symbol to its callers, components, routes and API endpoints.

    • Callers to routes and endpoints
    • Every hop recorded
    • From changed functions to their callers Built · prototype
    • Surfaces inside the hashed evidence In development
  3. Every affected surface carries its path, a confidence tier (proven, likely or unknown) and whether an existing test reaches it. What cannot be traced is listed as unknown, never silently dropped.

    • A path for every claim
    • Unknown stays visible
    • A proof path for every affected surface In development
    • Proven, likely and unknown confidence tiers In development
    • Mapping to existing tests In development
  4. A ranked, plain-English QA checklist. An LLM may narrate it. It never changes the evidence.

    • Ranked for QA
    • Narration is optional
    • QA checklist written from the evidence Built · prototype
    • A complete report that needs no LLM In development
PR #482 / Update shared authentication Illustrative example
auth/token.ts +3 −1

Read from the diff

  • 1 function changed · validateToken()
  • Signature unchanged
  • Behaviour changed · audience check added
PR #482 / Update shared authentication Illustrative example
validateToken() Changed
  1. verifyOtp() OTP login /login/otp Direct
  2. passwordLogin() Password login /login Shared
  3. sessionMiddleware Guardian access /guardian/children Indirect
  4. loadPermissions() Not traced dynamic import Unknown

4 surfaces listed · 3 reached by a traced path · 1 not traced

PR #482 / Update shared authentication Illustrative example
A path for every claim 4 surfaces
  • OTP login validateToken → verifyOtp → /login/otp Tracing… Proven
  • Password login validateToken → passwordLogin → /login Tracing… Proven
  • Guardian access validateToken → sessionMiddleware → /guardian/children Tracing… Proven
  • Dynamic permissions validateToken → loadPermissions → dynamic import Tracing… Unknown

Test reach · Guardian access

No existing test reaches it, and the ticket does not mention it.

Proven path Not in ticket Manual check
PR #482 / Update shared authentication Illustrative example
Ranked checklist for QA 4 items
  1. 1 Guardian access First Guardian access: check access after login and after session expiry. No test reaches this surface, and the ticket does not mention it.
  2. 2 OTP login No. 2 OTP login: check valid, invalid and expired codes.
  3. 3 Password login No. 3 Password login: check that a valid login still creates a working session.
  4. 4 Dynamic permissions Manual Dynamic permissions: not traced. Check role-based access by hand.
An LLM may narrate this list. It never changes the evidence.

The limit of proof. Proof applies to the paths Graphentra reports. No path found is not proof of safety.

[04] The pull request check

One check, six parts.

The check your team would see on a pull request. Every part is drawn from the evidence file below.

  • GitHub Action with a sticky PR comment and check In development
  • Mapping to existing tests In development
  • Useful, Noise and Missed feedback In development

Graphentra Impact PR #482 evidence a91f…c3 (reproducible)

Change: validateToken() in auth/token.ts, body change (audience check added)

Affected surfaces (4)
Surface Confidence In ticket? Test reaches it?
Proven Yes Yes

Proof path proven

  1. validateToken auth/token.ts:11 changed
  2. verifyOtp auth/otp.ts:24 caller
  3. /login/otp app/login/otp/page.tsx route

OTP login calls the updated token validator. Check valid, invalid and expired codes.

Tests that reach it e2e/otp.spec.ts

Proven No Yes

Proof path proven

  1. validateToken auth/token.ts:11 changed
  2. passwordLogin auth/password.ts:18 caller
  3. /login app/login/page.tsx route

Password login uses the same token validator. Check that a valid login still creates a working session.

Tests that reach it e2e/login.spec.ts

Proven No No manual check

Proof path proven

  1. validateToken auth/token.ts:11 changed
  2. sessionMiddleware auth/session.ts:27 caller
  3. /guardian/children app/guardian/children/page.tsx route

Guardian access relies on session middleware that uses the updated validator. Check access after login and after session expiry.

Tests that reach it None found.

Unknown No Not applicable: the path is not traced not traced

Proof path unknown

  1. validateToken auth/token.ts:11 changed
  2. loadPermissions auth/permissions.ts:9 caller
  3. dynamic import auth/permissions.ts:31 not traced

Permissions are loaded with a dynamic import, so the path beyond it cannot be traced. It is reported as unknown, not assumed safe.

Tests that reach it Cannot be answered: the path is not traced.

QA checklist, ranked

  1. Guardian access: check access after login and after session expiry. No test reaches this surface, and the ticket does not mention it.
  2. OTP login: check valid, invalid and expired codes.
  3. Password login: check that a valid login still creates a working session.
  4. Dynamic permissions: not traced. Check role-based access by hand.
Illustrative example A mock-up of the planned PR check. In development
  1. Reach In development

    The surfaces the change can reach, named the way the people who test name them.

  2. Proof In development

    The path from the changed function to each surface. Open any row to read it.

  3. Confidence In development

    Proven, likely or unknown, shown with a label and a line style: solid for proven, dashed for unknown.

  4. Test gap In development

    Whether an existing test reaches the surface. If none does, the row says manual check.

  5. Honesty In development

    What could not be traced stays on the list as unknown. It is never dropped and never assumed safe.

  6. Feedback In development

    One click to say whether the check was useful, noise, or missed something.

[05] The evidence file

Plain JSON you can check in.

The check is a view of an evidence file. The file is content-hashed, so the same repository content, diff and engine version give byte-identical evidence.

  • Content-hashed evidence file Built · prototype
  • Surfaces inside the hashed evidence In development
.graphentra/evidence.json Excerpt · 2 of 4 surfaces shown
{
  "contentIdentity": "a91f…c3",
  "outcome": "completed",
  "changedEntities": [
    {
      "symbol": "validateToken",
      "file": "auth/token.ts",
      "change": "body"
    }
  ],
  "impacts": [
    {
      "surface": "/guardian/children",
      "confidence": "proven",
      "inTicket": false,
      "testReaches": false,
      "path": [
        "validateToken",
        "sessionMiddleware",
        "/guardian/children"
      ]
    },
    {
      "surface": "dynamic import",
      "confidence": "unknown",
      "reason": "dynamic import in loadPermissions(); not traced",
      "path": [
        "validateToken",
        "loadPermissions",
        "dynamic import"
      ]
    }
  ],
  "limitations": [
    "Dynamic dispatch, reflection and runtime-only wiring are reported as unknown."
  ]
}
Illustrative example Plain JSON you can read, diff and check in. Field names are indicative. Surfaces and confidence tiers are in development.

[06] For coding agents

Give your agent something to check against.

A coding agent can ask what an edit reaches before it makes the edit, and again afterwards.

  • MCP server for coding agents In development
  • impact_of What a function or file can reach. Ask before an edit.
  • affected_surfaces The surfaces a diff can reach. Ask after an edit.
  • explain_path The path from a change to one surface, step by step.
  • tests_to_run The existing tests that reach a change.
Coding agent · MCP session In development

agent Task: reject tokens whose audience claim does not match.

calls impact_of ("validateToken")

Reaches 3 surfaces with proof paths. 1 path could not be traced.

/login/otp proven

/login proven

/guardian/children proven

dynamic import unknown , not traced

agent Editing auth/token.ts.

calls affected_surfaces ("HEAD~1..HEAD")

Same 3 surfaces. /guardian/children: no test reaches it.

agent Adding a note to the PR: check /guardian/children by hand.

Illustrative example An agent asks what a function reaches before it edits, and what its edit reached afterwards.

[07] Supported stack

Narrow on purpose, and stated plainly.

The MVP targets one stack well. Anything outside it is listed as not supported yet.

Targeted for the MVP

Support for each is in development and not yet certified. A heuristic map of these frameworks exists in the prototype.

  • TypeScript and TSX with React (and React Router) In development
  • Next.js In development
  • Express In development
  • NestJS In development
  • A single repository or a simple workspace In development

    One repository, or a simple npm or pnpm workspace.

  • GitHub In development

    Pull request comment and check on GitHub.

Not supported yet

Limitations, listed so you do not have to find them out.

  • Other languages Not yet

    Python is planned after the MVP.

  • Vue and Angular Not yet

    Not on the MVP path.

  • GitLab and Bitbucket Not yet

    GitHub only for now.

  • Cross-repository analysis Not yet

    One repository, or a simple workspace, at a time.

  • Running tests Not yet

    Graphentra lists the tests that reach a change. It does not run them yet.

Early access is open.

Tell us how your team decides what to test after a change. We read every request.

Request early access