Skip to content
MaatX
Developer AIdark interfacedemo

FORGE

AI Software Engineering Platform

An intelligent engineering workspace for modern development teams.

Know what a change actually breaks before you merge it, across a codebase nobody can hold in their head.

  • Symbol index
  • Call graph
  • Impact analysis
  • Convention mining
  • Incremental indexing

Repository-wide code understanding, architecture mapping, PR analysis and test generation grounded in the actual call graph rather than in file similarity.

FORGE
FORGE, ai software engineering platform — product interface
Product overview

What the product is built around.

FORGE indexes a repository semantically and structurally: symbols, call graph, module boundaries and the conventions actually present in the code. Every answer is grounded in resolved references, so 'what breaks if I change this' is a graph query rather than a guess.

Grounded in the call graph

Symbol resolution and reference graphs mean impact analysis is computed, not inferred from text similarity.

Conventions learned from the repo

Patterns are extracted from the codebase as it is, so suggestions match the project rather than a general training average.

Review that sees past the diff

PR analysis follows changed symbols outward to every caller, surfacing the sibling path a diff-only review misses.

The problem

What makes this hard.

Coding assistants see a file and guess at the rest. That works for a function and fails for a system: they miss the second caller that also needs the guard, they suggest a pattern the codebase abandoned two years ago, and they cannot tell you what a change actually breaks.

  • 01

    Suggestions ignore the call graph, so a change fixes one caller and breaks a sibling

  • 02

    New code contradicts conventions the codebase already established

  • 03

    Nobody can answer 'what depends on this' without reading the whole repo

  • 04

    PR review misses cross-cutting impact because it only sees the diff

  • 05

    Tests are generated for the happy path and nothing else

The solution

What the system does.

FORGE indexes a repository structurally as well as semantically: symbols, call graphs, module boundaries and the conventions actually present in the code. Impact analysis is therefore a graph query rather than a guess, and it surfaces the call sites a diff-only review never sees. Suggestions are checked against conventions mined from the repo rather than a general training average.

  • Changed symbols resolved to their full reference set, including callers outside the diff

  • Conventions mined from the repo, reported as 'differs from 41 of 43 modules'

  • Architecture maps with cycle and boundary-violation detection

  • Incremental indexing at symbol granularity, so latency tracks diff size

  • Incomplete index regions marked as incomplete instead of presented as exhaustive

Product interface

FORGE, as working interface.

Rendered UI, not a mockup — real tables, charts, filters and states. Try ⌘K for the command palette.

DEMO
FORGEPull requests
FORGE
ImpactReviewArchitectureTestsConventions● LIVE

Symbols indexed

4.21M

184 repositories

PR review coverage

96.2%

+8.4pp q/q

Escaped defects

−41%

vs prior quarter

Branch coverage

78.4%

+12.1pp after generation

PR #2841 — add settlement reference to payment intent

Author
Staff Engineer
Files changed
7
Lines
+184 / −42
Symbols changed
4
Callers affected
31 across 6 modules
Risk score
72 / 100 · High
Convention issues
2
Coverage delta
−1.8pp

Impact analysis — grounded in resolved references

What does this PR actually break, and what did the diff-only review miss?

Retrieval trace

Resolved 4 changed symbols to 31 call sites across 6 modules

Traced type changes through 3 interface boundaries

Compared against 184 repo conventions · 2 deviations

Checked branch coverage on changed paths · 3 new branches uncovered

The PR changes `PaymentIntent.settlementRef` from optional to required. That is a breaking change for 31 call sites, of which the diff only touches 12 1.

The 19 untouched call sites are the real risk. Fourteen construct a `PaymentIntent` through the `intentFromWebhook` helper, which the diff does not modify — those will fail type checking 2. Five are in the `legacy-reconciliation` module, which builds the object from a stored JSON payload where the field may genuinely be absent 3.

The `legacy-reconciliation` path is the one worth attention. It will compile once the type is widened but will produce a runtime error on historical records, and there is no test covering that path 4.

Two convention deviations: this repo consistently validates at the module boundary rather than in the constructor, and the new error uses a bare `Error` where every sibling module uses the `PaymentError` subclass 5.

Suggested sequencing: widen the type in the helper first, backfill `settlement_ref` on historical records, then make the field required in a second PR.

Sources

  • [1]call graph · PaymentIntent.settlementRef31 references
  • [2]src/intents/from-webhook.ts14 call sites
  • [3]modules/legacy-reconciliation5 call sites
  • [4]coverage · legacy path0 branches covered
  • [5]convention · PaymentError usage41 of 43 modules
Generate tests for the legacy pathShow the 19 untouched call sitesDraft the two-PR sequencing

Module architecture — dependency map

payments-core
api4 refsintentsCHANGEDfrom-webhook14 refslegacy-recon5 refsledger8 refssettlementstorenotifyshared-utilcycle
  • Changed
  • Affected
  • Unaffected
  • Boundary violation

Affected call sites

FilterAll 31Not in diffType errorRuntime riskCovered by tests
LocationModuleSymbolIn diffEffectCoverageRiskStatus
src/intents/from-webhook.ts:84from-webhookintentFromWebhookNoType error92%HighBlocks
modules/legacy-reconciliation/load.ts:212legacy-reconhydrateIntentNoRuntime error0%CriticalBlocks
src/api/intents/create.ts:41apicreateIntentYesHandled96%LowOK
src/ledger/post.ts:128ledgerpostIntentYesHandled88%LowOK
src/settlement/batch.ts:76settlementbatchSettleNoType error74%MediumReview
test/fixtures/intent.ts:18testmakeIntentNoType error—LowReview

6 of 31 resolved call sites · 19 are outside the diff · risk weighted by coverage and runtime reachability

Generated test — uncovered legacy path

typescript
// Generated from the uncovered branch in hydrateIntent.// Historical records predate settlement_ref entirely.describe("hydrateIntent · legacy records", () => {  it("throws a typed error when settlement_ref is absent", () => {    const stored = {      id: "pi_legacy_0041",      amount: "4280.00",      currency: "USD",      // settlement_ref intentionally missing — 2024 schema    };    expect(() => hydrateIntent(stored)).toThrow(PaymentError);    expect(() => hydrateIntent(stored)).toThrow(      /settlement_ref is required/,    );  });  it("hydrates when settlement_ref is backfilled", () => {    const stored = { ...legacyFixture, settlement_ref: "st_0041" };    expect(hydrateIntent(stored).settlementRef).toBe("st_0041");  });});

Convention conformance

learned from repo
  • Validation at module boundarydeviates
  • PaymentError for domain errorsdeviates
  • Naming — camelCase fieldsconforms
  • Barrel exports from index.tsconforms
  • No cross-module deep importsconforms
  • Fixtures via factory helpersconforms

Risk contribution

score 72
28 pts
Uncov.
19 pts
Refs
12 pts
Bound.
8 pts
Conv.
5 pts
Size

Repository composition

Symbols4.2M
  • TypeScript48.0%
  • Rust22.0%
  • Python16.0%
  • Solidity9.0%
  • Other5.0%

Issue investigation

  • ISS-1842 · settlement missing on old ordersTraced to hydrateIntent:212 · confidence 0.89located
  • ISS-1836 · duplicate webhook processingTraced to missing idempotency check · 0.94located
  • ISS-1821 · intermittent batch timeout3 candidate paths · needs a reproductionpartial
  • ISS-1804 · incorrect rounding on EURTraced to float arithmetic in util · 0.97located
  • ISS-1798 · cannot reproduceNo code path matches the descriptionunresolved

Indexing pipeline

  1. Convention extractionStage 6

    184 patterns mined from the repo · conformance thresholds set

  2. EmbeddingStage 5

    Symbol and docstring embeddings for semantic search

  3. Architecture derivationStage 4

    Module boundaries inferred · 1 dependency cycle detected

  4. Call graph constructionStage 3

    4.2M symbols · 18.4M resolved references

  5. Type resolutionStage 2

    Language servers per ecosystem · 99.2% of symbols resolved

  6. ParseStage 1

    Tree-sitter across 5 languages · incremental on change

Change frequency vs coverage

W1W2W3W4W5W6
intentsintents W1 18intents W2 22intents W3 26intents W4 31intents W5 28intents W6 34
ledgerledger W1 8ledger W2 11ledger W3 9ledger W4 14ledger W5 12ledger W6 10
settlesettle W1 12settle W2 14settle W3 18settle W4 16settle W5 21settle W6 19
legacylegacy W1 2legacy W2 1legacy W3 3legacy W4 2legacy W5 1legacy W6 2
apiapi W1 14api W2 16api W3 13api W4 18api W5 16api W6 20

Interface states

UI states

No repositories indexed

Connect a repository to build the symbol index and call graph.

Connect repositoryEmpty state
Resolving 18.4M references across 184 repositories…
Loading state

Partial index — cannot guarantee impact analysis

Type resolution failed for 12% of the Rust crate due to a missing toolchain. Call-graph answers for that crate are marked incomplete rather than presented as exhaustive.

RetryINDEX_INCOMPLETE_RUST
Error state
System architecture

How it is put together.

Semantic search alone is not enough for engineering questions. The structural index is what makes impact analysis a computation rather than a guess.

  1. 01

    Workspace UI

    Code search, PR review, architecture maps and issue investigation.

    • Next.js
    • React
    • Virtualised lists
  2. 02

    Query Layer

    Combined structural graph queries and semantic retrieval with ranking.

    • Go
    • GraphQL
    • Hybrid retrieval
  3. 03

    Structural Index

    Symbols, references, type relationships and module boundaries.

    • Tree-sitter
    • Language servers
    • Graph store
  4. 04

    Semantic Index

    Symbol and documentation embeddings for natural-language search.

    • Embeddings
    • pgvector
    • Chunking
  5. 05

    Convention Miner

    Extracts recurring patterns and computes conformance thresholds per repo.

    • Python
    • AST analysis
    • Statistics
  6. 06

    Reasoning Layer

    Grounded generation over graph results with citation to file and line.

    • LLM
    • Tool calling
    • Citation binding
  7. 07

    Ingestion

    Incremental indexing on push with per-language toolchain execution.

    • Queue
    • Sandboxed builds
    • Incremental diffs

What the product does.

The capability set the demonstration is built around.

Repository understanding

Symbol-level indexing with call graphs, type resolution and module boundaries.

Code search

Semantic and structural search across symbols, usages and patterns.

Architecture mapping

Generated module dependency maps with cycle and boundary-violation detection.

AI code assistance

Suggestions grounded in resolved references and the repo's own conventions.

PR analysis

Impact analysis across callers, risk scoring and convention checks on every diff.

Issue investigation

Trace a report to the probable code path with the evidence that located it.

Test generation

Tests derived from branch coverage gaps and observed failure modes.

Documentation

Generated module docs that stay attached to the symbols they describe.

Engineering focus

Challenges, and the MaatX approach.

The problems that actually decide whether a system like this survives production — and how we address each one.

A repository does not fit in a context window, and never will

The index answers structural questions; the model only reasons over retrieved, resolved results. Context is assembled from the call graph, so relevance comes from references rather than from how much text fits.

Suggestions that ignore sibling callers create the next bug

Every changed symbol is resolved to its full reference set before analysis. Callers outside the diff are surfaced explicitly, because those are the ones a diff-only review cannot see.

Generic best practice conflicts with what the codebase actually does

Conventions are mined from the repository with a conformance rate attached. A deviation is reported as 'differs from 41 of 43 modules' rather than as an abstract rule.

Indexing 184 repositories on every push is prohibitively slow

Indexing is incremental at symbol granularity. A push re-resolves only the affected subgraph, so index latency tracks diff size rather than repository size.

An incomplete index silently produces confidently wrong impact analysis

Resolution coverage is tracked per language and per crate. When it drops, answers touching that region are marked incomplete instead of being presented as exhaustive.

Generated tests cover the path that already worked

Generation is driven by uncovered branches and observed failure modes from issue history, so the tests target the paths that are actually untested.

The stack behind it.

Structural index

  • Tree-sitter
  • Language servers
  • Symbol resolution
  • Type resolution
  • Call-graph indexing
  • Reference binding
  • Graph store

Architecture & impact

  • Graph algorithms
  • Reachability queries
  • Module boundary inference
  • Dependency cycle detection
  • Diff-to-symbol mapping
  • Caller impact analysis
  • Risk scoring

Semantic retrieval

  • Embeddings
  • pgvector
  • Symbol-aware chunking
  • Docstring embeddings
  • Hybrid retrieval
  • Reciprocal rank fusion

Convention mining

  • Python
  • AST analysis
  • Pattern frequency statistics
  • Conformance thresholds
  • Deviation scoring
  • Per-repo rule sets

Reasoning & generation

  • LLMs
  • Tool calling
  • MCP
  • Citation binding
  • Call-graph context assembly
  • Branch-coverage test generation
  • Index-completeness guards

Ingestion pipeline

  • Queue workers
  • Sandboxed builds
  • Incremental diffs
  • Symbol-granular reindexing
  • Git provider webhooks
  • PostgreSQL
  • Object storage

Workspace & query API

  • Next.js
  • React
  • TypeScript
  • Virtualised lists
  • Go
  • GraphQL
  • Tailwind CSS
Product evolution

How it grows with the business.

The same system at three stages. Most products should not start at the third — but the architecture should not have to be thrown away to get there.

MVP

One repository indexed, with search and impact analysis working.

  • Single repo symbol and reference index
  • Semantic and structural code search
  • Caller impact analysis on a diff
  • Architecture map
Scale

Team-wide review assistance grounded in the call graph.

  • Incremental indexing on every push
  • PR risk scoring and convention checks
  • Issue-to-code-path investigation
  • Test generation for uncovered branches
Enterprise

Cross-repository intelligence for a whole engineering org.

  • Cross-repository impact for shared libraries
  • Architecture drift alerts over time
  • Migration planning sequenced by dependency order
  • Incident-to-commit linking
Future expansion

Where it could go next.

Directions this system would extend into.

  • 01

    Autonomous refactors proposed as reviewable PRs with impact proofs

  • 02

    Cross-repository impact analysis for shared internal libraries

  • 03

    Architecture drift alerts when boundaries erode over time

  • 04

    Migration planning that sequences changes by dependency order

  • 05

    Incident-to-code linking that connects production failures to the introducing commit

Trying to make a large codebase navigable rather than just searchable?

We built FORGE to work through exactly this. Tell us where you are and we will tell you what we would do differently for your constraints.