A LEDGER, NOT A FINDINGS LIST

DELTAevidence ledger & trend analysis

Code Audit with a memory: what stayed, what came back

DELTA scans your source code repository, gives every vulnerability it finds a permanent identifier and shows, with every further scan, the difference to the last one: what disappeared, what returned, what your team keeps building anew.

Read access to your repository. No access to running systems.

01Problem

A security audit without history is a snapshot.

One PDF, one date, one number. With the next scan the counting starts over: nobody can say whether today's 23 findings are the same as the 23 from May. Findings are renumbered with every scan, superseded scan series quietly keep counting, and a reported fix counts as evidence although no second scan has confirmed it.

The expensive part is not the finding. The expensive part is knowing whether anything has improved.

The same scan, once with and once without prior knowledge

Same scope, same model. The only difference: the list.

5 of 23 findings. 18 missed.

Anyone who sees the list of what is expected confirms the list. That is why the auditor does not get one. Actually measured, not a thought experiment.

02How the audit works

Three roles that do not have to trust each other.

The same pattern as SARIF, GitHub Code Scanning and DefectDojo — the reason the numbers hold up.

The AI auditorSensor

Reads the code without prior knowledge and delivers facts only: verbatim quoted location, CWE, severity with justification, CVSS, remediation proposal. It knows neither the inventory nor earlier results.

The pipelineRecognition

Computes the fingerprint from method, CWE and a stable location and assigns the permanent number. Deterministic, no line numbers, no free text. Incomplete runs are rejected.

The ledgerState

Derives from that what is open, what is fixed, what came back. Append-only, reproducible from the runs at any time. Nobody awards “fixed”: absence in the next complete run is the evidence.

And what if a scan is wrong? Answer in the FAQ →

A dashboard that answers for its numbers.

Every tile is a filter, every view a link, every number recalculable.

Prioritization

“What next?” — with visible reasoning.

The ranking comes from a base value plus named modifiers: internet reachability, production environment, sensitive data, exploitability, business criticality. No black-box rank — the chips that explain it always sit next to the recommendation. You can see why something is at the top, and you can contradict it.

The modifiers do not come from an inference: “internet reachable” and “production” come from your application profile, the affected data classes come from the evidenced location in the code. We weight with what someone has taken responsibility for — not with what a tool assumes.

Trend table
Trend table with demonstration data: six audits between 09.04. and 21.08., one returner and one fix report that the audit on 16.07. disproved.
Finding09.04.21.04.19.05.24.06.16.07.21.08.Status
SEC-01Sign-in only checks whether the cookie existsfound in this auditfound in this auditfound in this auditfound in this auditfound in this auditfound in this auditOpen
SEC-07Missing CSRF check in the form handlerfound in this auditfound in this auditconfirmed as fixedno entry in this auditno entry in this auditno entry in this auditFixed
SEC-11Reflected XSS in the search parameterfound in this auditnot found in this auditfound in this auditfound in this auditfound in this auditfound in this auditReturner
SEC-21Hard-coded credentials in the deploy scriptReported as fixed on 24.06. — disproved by the audit on 16.07.no entry in this auditfound in this auditfound in this auditfound in this auditfound in this auditfound in this auditOpen
  • found — the finding was in this audit
  • not found — this audit did not see it, it may still be there
  • fixed — no longer traceable in the complete run
  • no entry — the finding was not yet recorded or already closed

History

Every finding has a story. DELTA tells it in full.

The history table — internally the chain matrix — shows every finding across all scans: when it appeared, whether it was missing in between, when it disappeared. Returning findings carry a badge instead of slipping through as “new” — and a reported fix that the next scan disproves is flagged separately.

Time series are drawn as steps, never interpolated. If the auditor, the model or the scope changes, the curve is broken and labeled — a continuous line would claim a comparability that does not exist.

Findings in detail

No finding without evidence. No fix without the next scan.

Every finding carries a verbatim quoted location — never paraphrased, line numbers never guessed. How certain it is that the finding is real (confidence) and how bad it would be (severity) are two independent values; suspected cases are recorded rather than left out.

The verification criterion defines what counts as a fix before the remediation starts — worded so that a cosmetic partial fix fails against it. It does not replace the evidence, it makes the evidence testable: the criterion says what has to be done, the next scan says that it was done.

Full-text search, facet filters, CSV export — the assessment stays human.

Insights

Findings turn into learning.

Blind spots are ranked by dynamics — newly appearing findings of the same kind, the same CWE in several places, returning findings, long remediation times — not by the size of the existing inventory.

03Scope

What DELTA scans, what it does not.

Static analysis of your repository. No access to running systems.

We scan

  • Application code for exploitable vulnerabilities: injection, insecure deserialization, missing access checks, session management, cryptography
  • Configuration and deployment: exposed keys and credentials, insecure defaults, infrastructure as code
  • Dependencies: outdated or riskily integrated packages, assessed by whether the location is reachable at all

We do not scan

  • No attacks on running systems. No firing at your production, no testing of your firewall.
  • No penetration test. A pentest thinks from the outside and goes deep in selected places; DELTA reads from the inside, without gaps and repeatably. The two do not replace each other.
  • No continuous CVE monitoring. That belongs in your build pipeline and runs daily, not quarterly.

Covered: TYPO3, PHP, TypeScript, SQL, nginx, Azure, Bicep, Azure DevOps. The scan is language-agnostic; the scope is cut together beforehand and recorded in writing.

Three details are not in the code: environment, reachability from the internet, business criticality. We do not infer them, we ask you and put the answer in writing. That is exactly why the ranking in the dashboard is worth something. Effort on your side: one conversation, about 30 minutes.

04Effort

What this costs.

Before you talk to us, not afterwards.

You are not choosing between commitment and freedom. Both options can be cancelled monthly. You are choosing between paying in advance and paying full price.

Monthly

€1,200

per month

  • No advance payment
  • Full scope of service

Annual

Two months free

Regular price: €1,200€1,000

per month, paid in advance

  • €12,000 instead of €14,400
  • Full scope of service

The reduced price applies to the full year. If you cancel early, we charge €1,200 for every month used and refund the rest. After four months that is €4,800 charged and €7,200 back.

Any number of applications in your tenant. All scans included, every re-scan after a fix among them.

Why one price and no tiers

We do not charge per finding, because we would otherwise have an interest in finding a lot of them. Not per application, because you would otherwise start weighing up which ones to leave out. And not per run, because the re-scan is the product. A price that punishes repetition sells the opposite of what this page says.

Why you can walk away at any time

A tool that sets out to make improvement measurable has to be measured by it as well. If you see no difference after two quarters, stop. All findings, evidence and the complete history stay yours. Export any time, including when you leave.

Included

  • Every application in your tenant, with no cap on the number
  • Complete runs at the agreed rhythm
  • Every re-scan after a fix, off schedule as well
  • Dashboard operation and history across all scans
  • A handover session per initial audit, high findings walked through one by one
  • A dedicated contact

Not included

  • The fix. That stays with your team, for the reason given in section 02.
  • Nothing else. No compute costs, no setup fee, no module surcharges.

A single penetration test of a web application typically costs between €6,000 and €12,000 in Germany and shows you one day. Enterprise platforms for static code analysis start at around €30,000 a year and hand you a tool, not findings. Here you pay the price of a pentest and get the history a pentest cannot deliver: what was found, what disappeared, what came back, each with a date and evidence.

A tool that wants to measure improvement has to let itself be measured. From the second scan on, you see in your own data whether it works.

05FAQ

The questions that rightly come up.

The answers we give in a sales conversation too.

Does this replace a pentest?

No, and it is not meant to. A penetration test thinks like an attacker from the outside: selective, creative, deep, with an eye on the running system. DELTA reads from the inside: without gaps across the agreed scope, repeatable, with a history. Anyone using both should aim the pentest at what is not visible in the code: runtime behavior, infrastructure, interaction with third-party systems. If you can only fund one: a pentest without a documented history gets paid for again every year and never answers the quarterly question.

Does the AI hallucinate findings?

Three things stand against that. First, the evidence requirement: no finding without a verbatim quoted, verifiable location — what cannot be evidenced does not exist. Second, the separate confidence: how certain it is that a finding is real stands beside it as a value of its own and is not mixed up with the severity. Third, the history: a one-off outlier stands out at the next scan and is visible as such. And the opposite case — a finding that gets overlooked — is the more important one — see the next question.

What if the scan is wrong and misses a finding?

That can happen — with an AI-supported scan just as with a rule-based tool. Three things stand against it. First, a run only counts if it was complete: the pipeline rejects incomplete runs, and if a scope entry drops away compared with the last run, it raises an alarm before the data reaches the dashboard — a quietly reduced scope would otherwise “fix” everything nobody looks at any more. Second, an overlooked finding comes back and is visibly marked as a returning finding — a mistaken scan leaves a scar in the ledger, not a silent gap. Third, every fix stands on two legs: the verification criterion traceable in the code, and the absence across several runs, which the history table shows individually.

Why a verification criterion, if absence is the evidence?

Because the two sit at different points in time. The verification criterion comes first and is addressed to your development team: it defines what counts as a remediation before anyone starts — a Definition of Done for this one vulnerability. The absence comes afterwards and is the proof that the change took effect. Without the criterion, “gone” would be arbitrary: a location can disappear without the cause being fixed — code renamed, call moved, symptom papered over. Both together are the evidence — one alone is not.

Does DELTA prove that our application is secure?

DELTA is not a release gate. It does not prove that your application is secure — no method can do that, neither rule-based nor AI-supported. It proves three things: what was found, what disappeared and what came back — each with a date and evidence. The fourth statement, “there is nothing left now”, appears nowhere on this page. It would be the only thing that would really reassure you, and that is exactly why we do not assert it.

How does DELTA know that our system is in production and reachable from the internet?

From you. A code scan cannot see that, and we do not guess it. Before the first scan we record a short application profile: environment, reachability, business criticality, scope. This information is carried along with every scan, sits on every finding and is the reason the ranking holds up. If something changes — staging goes live, a service is sealed off — you change the application profile, and the prioritization follows. Which data classes hang on a location, by contrast, is what the auditor reads out of the code and evidences with the location.

Do you also scan our dependencies for known vulnerabilities?

We scan how you use your dependencies: outdated or redundant packages, risky integrations, call paths that are actually reachable. What we do not do is a comparison against a vulnerability database — that would need a feed updated daily, and we have not connected one. That monitoring belongs in your build pipeline anyway, where it runs daily instead of quarterly. We will tell you in the handover session whether it is missing on your side.

Why an AI and not a classic scanner?

Because rule-based tools see what is in their rules. They find known patterns reliably and report everything that resembles a pattern — including what is harmless in your context. The AI auditor assesses the context on top of that: is this location reachable at all? Which data hangs on it? Is this running in production? That is the difference between 400 hits and 20 findings that hold up. Classic tools are not an opposite — their results can go through the same bookkeeping. Scanning uses the strongest model available. Not as a concession, but because the difference to the cheaper one is a single-digit euro amount and a missed finding is not. That decision is not negotiable, which is why it does not show up as an option in your quote.

What if the model gets better or the auditor changes?

Then we break the curve off instead of smoothing it. A new auditor, a new scope or a new model creates a new scan series: the line in the chart is interrupted and labeled, because the numbers before and after are not comparable. A jump from 5 to 23 findings sometimes measures the quality of the predecessor, not new gaps — a continuous line would claim the opposite. The old history stays fully visible.

Do our source files or findings leave the building?

For the scan the auditor needs read access to the code. That is the one unavoidable point, and we define in writing beforehand what it covers.

The models run exclusively in Azure, either in our tenant or in yours. Your code is processed there and is not used for training, contractually assured and processed within the EU. No provider outside that chain sees your source code.

If operation runs in your tenant, code, findings and dashboard stay entirely inside your own environment. We then only see what you show us in the handover session.

The dashboard itself calls nothing external at runtime. No interface, no fonts from third-party servers, no analytics services, no embeds. It is a static deployment and can sit behind your login, without internet access if it comes to that. Credentials and keys that are found are stored masked in the audit result, and the finding still remains complete. The dashboard has no write path, it cannot change anything, neither on our side nor on yours.

Can we mark a finding as “accepted”?

Yes — as a human assessment with a justification and a responsible person: false alarm, will not be fixed, cannot be fixed. This assessment is deliberately stored separately from the audit result and is never overwritten automatically. A scan is an observation; a judgment is not. That is why the one must not change the other.

What determines the price?

Nothing you would have to work out beforehand. There is one price, and it is on this page. It does not change with the number of your applications, the number of findings or the number of runs. Before the quote we settle the cut of the scope and the rhythm together and put both in writing. That is an agreement about the work, not about the invoice. Your only choice on the price is monthly or annually in advance.

How long does an initial audit take?

From the cut scope to the handover session, typically five to ten working days. The cutting itself is a conversation of about half an hour.

An initial audit says more than any promise.

DEVDEER scans a project of your choice. You do not get a slide deck, you get this dashboard — with a real audit result, verbatim quoted locations and a verification criterion for every fix.

Request an initial audit

Ready to create impact?

Tell us briefly what it’s about – by email or in a non-binding conversation. We listen, ask the right questions, and show how we can help in a solution-oriented and pragmatic way.

Stefanie Heine

Stefanie Heine

Executive Assistant

Herderstraße 31, 39108 Magdeburg
50+ customers trust DEVDEER

0/500 characters

We respond within one business day.

Glad to have you here!

To help you quickly find what you’re looking for - or just as quickly realize this might not be the right place - we collect anonymized usage data. Not for advertising, but to make this site work as well as possible for you. Honestly: if we could ask you directly, we would. Thank you for your trust!