Everything the system already knows about itself.

Source, history, documents, schema, live data, servers, logs, metrics, traces and tickets, pulled without asking the customer to prepare anything.

Access
Read-only by default. Write is a separate, explicitly granted capability
Cadence
Scheduled and continuous. An assessment that goes stale is worthless
Privacy
Redaction runs at the boundary, before storage. A hard gate, not a cleanup step

Ten connector families.

History is evidence, not just code. Documentation is treated as a claim, never as a fact. The database tells you more about meaning than any wiki ever will.

SourceWhat is readNotes
Source controlFull history, branches, commit messages, authorship, ticket linksGit, SVN, TFS, Perforce
Build systemDependency manifests, build configuration, artifact layoutMaven, Gradle, MSBuild, Ant, make, npm, pip
DocumentationWikis, SharePoint, loose Word and PDF, README files, commentsRecorded as claims, never as facts
Database schemaTables, columns, constraints, indexes, views, triggers, stored procedures, jobsOracle, SQL Server, DB2, Postgres, MySQL, generic JDBC and ODBC
Database behaviourSlow query logs, statement statistics, execution plans, real value profilesThis is what reveals actual meaning
Production serversProcess inventory, configuration files, environment variables, scheduler entries, deployed versionsRead-only agent or a supplied snapshot
LogsApplication, server and batch job outputParsed for failure paths and silent errors
MetricsRequest rates, latency, error rates, resource usePrometheus, Datadog, Dynatrace, CloudWatch, AppDynamics
TracesDistributed traces, method-level samplingOpenTelemetry preferred, vendor APIs supported
TicketingDefect history, change history, who fixed whatJira, ServiceNow, Azure DevOps
Signal traces on measurement equipment in a dim room
Degraded operation is the normal case

No customer has all the sources.

The platform must produce value from source control alone, and then say precisely what each missing source costs. Missing runtime evidence visibly caps the achievable evidence depth rather than quietly lowering the bar.

For customers who will not grant live access at all, offline exports and snapshots run through the same pipeline. Slower to refresh, identical in structure, and labelled as such throughout the model.

One typed graph, and nothing in it is anonymous.

Node kinds run from file and symbol through table, procedure and job to rule, assertion, decision and task. Every node and every edge carries where it came from and how sure the platform is.

Provenance carried by every node and edge
evidence:
  stratum: runtime          # surface | structure | semantics | runtime
  sources: [trace:otel, vcs:commit:a4f2e91]
  confidence: 0.94
  observed_window: 14d
  last_confirmed: 2026-07-24

Runtime outranks structure. Structure outranks documentation.

Old documents describe intent, not behaviour. Where sources conflict, the more direct observation wins and the conflict itself is recorded as a fact about the system rather than discarded.

Because provenance travels with the data, any claim the platform makes can be traversed back to the trace, the commit or the named person it rests on. A number without a source cannot exist in Core.

Four joins between what is written and what runs.

Join 01

Reachability

Static call graph intersected with trace coverage gives what is live, what is dormant and what is dead. Nothing is marked dead on a window shorter than its natural cycle. Annual, quarter-end and disaster-recovery paths become questions instead.

Join 02

Hot path weighting

Request volume is propagated through the call graph, so every symbol carries what it actually costs and how often it matters. Effort estimates stop being guesses about size and start being statements about traffic.

Join 03

Data reality

Declared schema intersected with actual value distributions and query logs shows which columns are used, what they really contain, and which constraints are fiction the database stopped enforcing a decade ago.

Join 04

Failure semantics

Log patterns intersected with the job graph surface silent failures, swallowed exceptions and partial completions. These are the behaviours a rewrite reproduces by accident or destroys by accident.

Language support is a plugin contract, and the tier is stated out loud.

Each analyzer implements the same five steps: parse, symbols, call edges, data access edges, confidence. Nothing above the model layer knows what language it is looking at.

The platform names the tier a given codebase received and caps claimed confidence to match. A structural read of COBOL is useful. Pretending it is a semantic read is how these projects fail.

Tier 1 Java, C#, JavaScript and TypeScript, Python, SQL and PL/SQL, T-SQL Full support
Tier 2 COBOL, PL/I, VB6, Delphi, Perl, PHP, ABAP Structural support
Tier 3 Anything with a grammar. Files, dependencies and entry points, no semantic depth Surface only

Analyzers extract candidate business rules in plain language, each linked to the code, commits, tickets and runtime evidence supporting it. A rule is never recorded as established from code alone. It stays a candidate until a named person confirms it.

What comes out.

System map

Evidence depth stated per module, so you can see which parts of the picture are observed and which are merely parsed.

Blast radius

Dependency queries that answer what breaks if this changes, weighted by real traffic rather than by file count.

Dead code inventory

Dormant and dead code separated, each with its confidence and the observation window it rests on.

Data lineage

Where a value originates and every service and job it passes through before it reaches a customer.

Risk register

Untested hot paths, silent failures and undocumented triggers, ranked rather than listed.

Candidate rules

Business rules in plain language, each awaiting confirmation from someone who can actually rule on it.

See what evidence looks like once it is joined.

Open the system map in the prototype and read depth per stratum, module by module.