Product
Archito NewLearns from your merge requests and flags what is stuck Integrations 25
Solutions
By role
Why AppArch
Resources
Customers Pricing Contact
Language
Contact us

The failures your tests did not think of, traced from the request to the database.

SmartScan follows every entry point - a web action, a job, a message consumer, a screen in an app - through services and handlers down to the database or the outgoing request, and flags what can break on the way: a lookup that can come back empty, two writes that can half-succeed, a column the input can overflow. Each risk comes with the chain that leads to it.

Screens from a running installation

What it looks for

Four kinds of risk, each found on a real path through your code - not on a pattern somebody wrote down.

Record not found

A lookup keyed on request data can come back empty and the code uses the result without checking: a 500 instead of a 404, or a misleading message.

Partial write

Two separate commits in one flow with no transaction around them: if the second fails, the first stays written.

Contract gaps

The request can carry more than the column holds, a required column has no check on the way, or a unique column is written without a uniqueness check.

Frontend and mobile

A request whose failure nobody handles, an error treated as success, a response used without checking it: the screen crashes or stays silent.

What SmartScan sees in a single request

An order is created through six hops. Each hop is a real call in the code; SmartScan follows them and stops where something can break.

  1. Entry point POST /api/orders OrdersController.Create
  2. Mediator request mediator.Send(CreateOrderCommand)
  3. Handler CreateOrderHandler.Handle
  4. Interface to implementation ICustomerRepository.FindAsync CustomerRepository Not found: the result is used without a check
  5. Writes SaveChangesAsync() ×2 Partial write: two commits, no transaction
  6. Database orders · order_lines

How it works

The unit is a chain: from where a request enters to where it touches data.

  1. 01

    Start from every entry point

    Web actions, scheduled jobs and message consumers; in frontends and apps, events, effects, routes and screens.

  2. 02

    Follow the chain

    Interface to implementation, overrides, mediator requests to their handlers - down to the ORM or the HTTP call.

  3. 03

    Drop what is guarded

    A check, a lookup that throws, a validator with the right limit - on the write's own path - counts. A chain with nothing at risk is not reported.

  4. 04

    Show the path

    Every risk lists its steps with file and line, from the entry point to the column.

A warning, not a gate

SmartScan is not a rule set: it never lowers a score and never fails a pipeline. Each risk can be closed one at a time, like any finding. It is switched on per project and off by default, and it runs on full scans only, so merge request checks stay fast.

In all nine collector languages

.NET Java Python Go PHP Ruby TypeScript Kotlin Swift

A rule and a SmartScan risk are not the same thing

Both show up in the same panel, but they answer different questions and behave differently.

Rule findingSmartScan risk
What it looks forA known pattern someone wrote downA path through your own code
ScoreLowers it, weighted by severityNever touches it
PipelineCan stop it with a fail-on thresholdNever stops it
When it runsMerge request reviews and full scansFull scans only, switched on per project
What you getFile, line and the rule's reasoningThe whole chain, step by step, with file and line

Questions about SmartScan

Is it another rule set?
No. A rule set grows with every scenario someone thinks of; SmartScan follows the code's own paths instead. It warns, it never lowers a score and it never fails a pipeline.
How are false alarms kept down?
A guard counts only on the write's own path: an explicit check, a lookup that throws when nothing is found, a validator with the right limit. Each kind of risk was checked by hand against real codebases before it shipped.
Does it slow down merge request reviews?
No. SmartScan runs on full repository scans only; merge request checks keep their quick path.
Which languages and frameworks?
All nine collector languages: .NET, Java, Python, Go, PHP, Ruby, TypeScript (React and Next.js frontends included), Kotlin (Android and Spring) and Swift (iOS).

See it in the product

All screenshots

Find the failures before your users do

Switch SmartScan on for one project during a PoC; the next full scan shows every chain at risk.