How a Scan Runs
A scan reads your code, fingerprints it, matches it against the SCANOSS knowledgebase, and then enriches what it found. You can watch each stage as it runs.Starting a Scan
Scans start in three ways:- Automatically, when a repository is first connected.
- Automatically on merge, to the default branch, if you enable it.
- On demand, with + New scan, from a connected repository, by uploading a folder or a
.zip/.tar.gzarchive, or by importing an existing CycloneDX or SPDX SBOM document (JSON only).
An imported SBOM lists declared components only. There’s no code to match, so
the run always lands as partial coverage.
How Your Source Reaches Earnie
A folder upload doesn’t zip your tree in the browser. Earnie first lists every file it can reach, then applies the same keep rules as a Git scan and sends only the retained files. Generated source under directories such asnode_modules is normally omitted, but Earnie may retain a dependency manifest inside one of those directories because later scan stages need it, so the file viewer can show that directory with the retained manifest, without the skipped source beside it.
- A Git scan clones the repository on the server and applies the same keep rules.
- An archive you supply is unpacked through those rules; the stored scan is the kept files, not the original zip.
A large keep-set can take a while to transfer, that’s expected. You can
Cancel scan from the progress page at any in-progress stage; that
stops the transfer and every job for that run. A folder or archive
receive that sits with no files arriving is failed after one hour.
The Stages of a Run
A standard scan runs through receiving files (folder, Git, and archive keep-set transfers), then fingerprinting, matching against the SCANOSS index, then finalising. Folder and Git scans skip a fat extract of the original tree, you won’t see anExtracting archive stage on those runs; an archive you uploaded still unpacks through the keep engine before fingerprinting.
The optional scanners you selected, with Cryptography on, a Detecting Cryptography stage, start as soon as the source is ready and run alongside matching rather than queueing behind it, so a long cryptography scan no longer adds its time to the run. After them comes one stage per intelligence layer you enabled. A scanner stage still sits at Pending until its turn comes, so you can see it’s queued rather than stalled. Each stage reports Done, Running, Skipped, or Failed, so a partial failure tells you exactly which layer to re-run.
An optional intelligence layer can fail without failing the whole scan.
The live progress view and the completed run both show the same cause
beneath that layer, for example
enrichment failed: SCANOSS service unavailable. Your core scan results remain available; re-run the scan
after the service recovers to fill that optional intelligence.cancelled: sibling phase failed, it was stopped because the run was already over, not because of anything it found. Re-submit the scan once the real cause is addressed; a failed run changes none of your findings.
The cryptography scan reports its own steps underneath, as it reaches them: Cryptography — Scanning Source, Cryptography — Scanning Dependencies, and Cryptography — Building Call Graph. A large repository can spend a long time in one of them, so this is how you tell a working scan from a stalled one. A step only appears once the scan actually reaches it, and a step that’s skipped says why, for example, when the project has no dependency manifest the scan can read.
An imported SBOM runs a shorter pipeline. There’s no archive to extract and no code to fingerprint, so it shows Importing SBOM, then finalising, then the intelligence layers.
If the document contained anything Earnie couldn’t read, a component with
neither a name nor a package identifier, for instance, the Importing SBOM
stage carries a warning naming it rather than dropping it silently.
When a Run Doesn’t Finish Cleanly
A run that ends without results opens on its own page rather than a bare “Scan failed” line. A run you stopped is labelled Cancelled and says so plainly, nothing was kept and nothing in the project changed. A genuine failure is labelled Failed and describes the cause in ordinary language together with what to do about it, a folder transfer that timed out, for instance, asks you to keep the tab open until receiving finishes. Run details names the stage the run stopped in and how far it got, the source, when it started and ended, the reason code, and the scan id, the thing to quote when you ask an administrator to check the logs. Start a new scan and Back to activity sit in the header; if your role can’t start scans, the page names the role that can instead.Activity: Every Run, Kept

Coverage: Full vs Partial
Coverage is the column to notice.
A partial run only ever adds and updates what it saw, it never marks anything absent, because it cannot tell you what isn’t there. That’s why an imported SBOM can never remove a finding an earlier full scan established.
The Dashboard and Review Workspace both prefer your most recent full-coverage run. If a project only has partial ones, they fall back to the latest of those and say so, so an imported SBOM still gives you a posture to work with. Treat it as a floor rather than a complete picture, it lists what the document declared, and nothing about the code the document never mentioned.
Re-scanning is cheap, and safe. Decisions you’ve already recorded survive
a re-scan. A new run tells you what was added, what’s still present, and what
has gone away. It never asks you to triage the same component twice.
Crypto Changes Between Scans
When the current run measured cryptography in full, Earnie compares it with the nearest earlier completed run that also has a full cryptography measurement. A nearer run that skipped cryptography or covered only part of the project is skipped rather than blocking an older valid baseline. If no earlier eligible run exists, Earnie omits the comparison rather than turning missing evidence into zero. Crypto changes groups stable identities into four buckets:- New
- Resolved (absent from the current run)
- Re-detected (reopened, if previously resolved)
- Still open