Lane 2 · 20x Persistent Validation Assurance · Walkthrough

The provider automates the check. Who checks the check?

Under FedRAMP 20x a provider validates its own Key Security Indicators continuously, in code. That moves the independent assessment question: not "does the SSP say the right thing", but "does this validation actually test what it claims, over the whole boundary, and fail closed when it should". This walkthrough follows one real KSI through all six steps — and ends where it matters, with the provider and the independent assessor recording different conclusions, separately attributed.

A KSI is a security outcome, not a control citation. The provider states the outcome, the pass criteria that demonstrate it, and the Rev5 controls it stands in for — so the claim stays traceable to the catalog an assessor already knows.

# From the CR26 KSI catalog (cr26.10theme.2026-07-10) ksi: KSI-CMT-LMC theme: CMT — Change Management title: Logging Changes outcome: Modifications to the cloud service offering are logged and monitored. validation: automated pass_criteria: every modification to the offering appears in the change log with actor and timestamp, and the log is actively monitored controls: AU-2, CM-3, CM-3(2), CM-4(2), CM-6, CM-8(3), MA-2

The provider submits the machinery, not just the answer: the query that produces the verdict, the evidence sources it reads, how often it runs, and what counts as a failure. This is the artifact an assessor examines — and the one a document review never sees.

# validation/ksi_cmt_lmc.py — runs on the provider's schedule def validate(): changes = cloudtrail.query( accounts=["prod-1", "prod-2"], regions=["us-gov-west-1"], window_days=30, ) logged = [c for c in changes if c.actor and c.timestamp] return len(logged) == len(changes) # declared alongside it evidence_sources: CloudTrail export (JSON), change-management log cadence: every 24h failure_criteria: any modification missing actor or timestamp on_source_error: return last known result

SparkAE compares what the validation reads against what the authorization boundary contains, and reads the method for the failure modes that quietly turn a check into a rubber stamp. It reports findings. It does not decide.

# Coverage analysis vs. the declared boundary boundary accounts: prod-1, prod-2, prod-3, shared-services validation reads: prod-1, prod-2 → 2 of 4 accounts — 51% of change volume uncovered boundary regions: us-gov-west-1, us-gov-east-1 validation reads: us-gov-west-1 → 1 of 2 regions # Method analysis FAIL-OPEN on_source_error returns the last known result, so an unreachable CloudTrail export reports PASS indefinitely. UNTESTED pass_criteria says the log is "actively monitored"; the code tests only that fields are present. OK cadence (24h) is within the KSI's stated tolerance.
  • 3 gaps — 2 coverage, 1 fail-open, 1 unverified criterion
  • Every gap is traced to the line of the method that produced it
  • No verdict is issued here — findings go to both parties

The assessor reads the method themselves and designs probes against the same boundary. A validation that passes its own pipeline and fails an independent probe is the finding — and only an independent party can produce it.

# Assessor-authored challenge tests (not provider code) CT-1 Make a tracked config change in prod-3. provider validation → PASS independent probe → NOT LOGGED → the change never entered the evaluated set CT-2 Sever the CloudTrail export for 48h. provider validation → PASS independent probe → STALE → confirms the fail-open path; PASS survived a dead source CT-3 Strip the actor field from one record in prod-1. provider validation → FAIL independent probe → FAIL → in-scope detection works as designed
CT-3 matters as much as CT-1. The validation is not broken — inside the slice it actually reads, it works. The finding is that the slice is not the boundary, and that the check cannot tell the difference between "nothing wrong" and "nothing seen".

This is the step the architecture exists for. The provider's conclusion is not overwritten, corrected, or merged. It is recorded as the provider's, beside the assessor's, each with its own evidence and reasoning — so a reviewer can see exactly where the two parties diverged and why.

Provider conclusion
PASS
All 1,204 modifications observed in the evaluated set carried an actor and a timestamp. Validation ran on cadence for 30 consecutive days.
Independent assessor conclusion
NOT SATISFIED
The evaluated set excludes 2 of 4 in-boundary accounts and 1 of 2 regions, and the method reports PASS when its evidence source is unavailable. CT-1 and CT-2 reproduce both. The provider's result is accurate about what it measured and does not support the KSI.
SparkAE does not adjudicate between these. It is not a FedRAMP Recognized independent assessment service and it does not resolve the disagreement. It preserves both conclusions, both evidence trails, and the fact that they differ.

The record that leaves the system carries the evidence, the method that produced it, the result, and the independent conclusion — each signed by the party that authored it. A reviewer downstream can verify who said what without trusting the system that stored it.

# Signed authorization data record (illustrative shape) { "ksi": "KSI-CMT-LMC", "evidence": { "sources": ["cloudtrail-export", "cm-log"], "digest": "sha256:4f1c…a903" }, "method": { "ref": "validation/ksi_cmt_lmc.py@9e2b1d4", "cadence": "P1D", "fails_closed": false }, "provider_result": { "call": "pass", "signed_by": "csp:cloudvault" }, "assessor_conclusion": { "call": "not-satisfied", "basis": ["CT-1", "CT-2"], "signed_by": "ias:example-assessor" }, "divergence": true }
  • Separate signatures — neither party can restate the other's conclusion
  • fails_closed: false travels with the record, not just the verdict
  • divergence: true is a first-class field, not an exception

The public engine does not produce FedRAMP 20x deliverables. This walkthrough is illustrative: it shows the shape of a validation-assurance flow, and nothing on this page is produced by the engine this origin publishes, which is the Rev5 Examine engine on the demo. The KSI identifier, theme, pass criteria, and Rev5 control mappings are the real entries from the CR26 KSI catalog; the provider system, validation code, challenge tests, and signatures are constructed to show the shape of the flow. FedRAMP 20x support is not part of this product and is not sold — see what the engine assesses today.

See the Rev5 lane actually run.

The browser demo assesses a synthetic sample SSP against the full FedRAMP Low baseline — 156 controls, 981 objectives — entirely on your machine. No signup, no upload, no network calls.

Run the Rev5 Demo → For Assessors →

Public preview This build runs the engine, not a recording. It reads the documents you give it and computes every determination in the baseline. Those determinations are automated EXAMINE preparation an assessor checks, not an authorization decision, and their accuracy rests on a small published case set rather than on real authorization packages — what the engine gets wrong is published beside what it gets right: the accuracy benchmark →. This describes the public build in this repository, not the commercial server product.