A pipeline you can explain to your auditor.
This page is the long answer to the question every technical evaluator asks: what is actually happening between "upload" and "score"? Five stages, all of them named, none of them magic.
Five stages, one deterministic path.
- 1Chunk
Documents are split once, snapping to section boundaries, with overlap so nothing falls between the cracks.
- 2Enumerate
One pass per framework under bounded concurrency. Every control in the catalog is assessed; none can be skipped.
ISO/IEC 27001 · 93 controlsSOC 2 · 61 criteriaGDPR · 36 obligationsNIST CSF 2.0 · 106 subcategories - 3Merge
Chunk verdicts merge deterministically: best evidence wins, ties break by earliest position in the document.
- 4Score
Fixed weights produce the numbers. Full 1.0, partial 0.5, missing 0.0, totaled per framework.
- 5Persist
Results land with pinned policy versions, frozen scope, and audit events. History is immutable.
Complete enumeration, not retrieval.
A gap analysis must examine every control, because its job is to find what is absent. Retrieval systems fetch what looks relevant, and absence is precisely what never looks relevant. So the catalogs are enumerated structured data, and gaps can never be silently dropped.
- Fetches the controls that look similar to the text it was given
- A control with no matching text is simply never retrieved
- Coverage depends on the question you happened to ask
- Two runs can silently examine different controls
- Iterates the full catalog: all 296 controls, every run
- A control with no evidence is recorded as a finding, which is the point
- Coverage is a structural guarantee, enforced by tests
- One result per control, or the run does not complete
Numbers the model cannot invent.
The model classifies; the engine calculates. Each control's verdict maps to a fixed weight, chunk verdicts merge by a documented rule, and the total is arithmetic. Ask twice and the same verdicts produce the same score, to the decimal.
The model is a component, and it is treated like one.
Aegis engineers around the model the way you engineer around any unreliable dependency: strict contracts, budgets, retries, and failure modes designed in advance.
Forced structured output
The model answers through a mandatory tool call with a fixed schema, not free text. There is no prose to parse and no room for the reply to wander.
Computed token budgets
Response budgets are calculated from the control count of the framework being assessed, not guessed. Costs stay predictable and bounded.
An explicit retry ladder
Transient failures retry with exponential backoff, then fall back to a second model, then fail cleanly. Nothing hangs and nothing retries forever.
Graceful partial degradation
If one framework pass fails, the run completes as partial with the other results intact. A model hiccup never poisons a whole assessment.
Assessments are records, not chat transcripts.
- Policy versions are immutable once ingested; new uploads create new versions.
- Every run pins the exact policy version and framework version it assessed.
- Scope is resolved and frozen when the run is created, forever.
- Framework content updates never disturb recorded results.
- Hard deletes are refused while any run references the version: the audit trail wins.
- Dispositions and evidence overlay results; raw verdicts are never rewritten.
The questions we hope you ask.
Is this just GPT with a prompt?
No. The model performs one narrow job: reading a document chunk against a structured control catalog and answering through a fixed schema. Enumeration, merging, scoring, scoping, versioning, and the audit trail are deterministic engine code. Swap the model and the engine still stands; delete the engine and the model alone cannot produce a defensible assessment.
What exactly leaves my network?
Document chunks and catalog context travel to the model API over TLS, to exactly one allow-listed host. Nothing else leaves: no telemetry, no embeddings shipped to third parties, no update phone-home. Every egress attempt, allowed or denied, is written to a ledger you can inspect in the app.
Can I reproduce a score?
The scoring is fully deterministic: given the same per-control verdicts, the same numbers come out every time, and the merge rules are documented. The model layer is where variance can enter, which is exactly why verdicts are recorded per control and per chunk, so any surprising verdict can be traced to the specific passage that produced it.
What happens when the model call fails?
Retries with exponential backoff, then a fallback model, then a clean failure that marks the run partial while every other framework keeps its results. Failure states are first-class citizens, not exceptions to hide.
Who reviewed the control catalogs?
NIST CSF 2.0 ships as verbatim official text. ISO/IEC 27001, SOC 2, and GDPR ship complete-coverage control objectives paraphrased by our team, disclosed as such, with a verbatim overlay path for deployers who hold the relevant licenses. Coverage is guaranteed and test-enforced; the wording is honest about what it is.
Want this in writing? Download the security review packet for your team.
Bring the hardest question you have.
The demo is a working session with the engine, not a slideshow about it.