Register:Proof/State5 recordsSHA3-256 chainedhead sha3:1376adb55724cd88ae22346d3ab2f7a1486c97856f2351cf56c6598e2af221caIntact

PROOF LAYER 01 / STATE

What was true, as of a time you can name.

PolicyCortex records the configuration of your cloud as evidence: content hashed with SHA3-256, chained to the record before it, kept seven years, regenerable to any timestamp a second party picks. Not a dashboard of now. A record of then, checkable without your help.
REC 0000THE QUESTIONsha3-256c753fa1b8b86a99553ad5bba4c75d0c1f1d22e8ea1a91e2619e969ea2fe11b7cprev:e92b4ef53279

An assessor names a date three months back. Produce the configuration.

Q1Can you produce the configuration of your environment as of a date someone else picks, or only as of today?

The request is ordinary. An assessor names a date three months back and asks what your environment was on that day: which storage accounts enforced encryption at rest, which network paths were open, which identities held which roles, and inside which declared boundary each resource sat. The date is theirs, not yours. That is the whole difficulty.

Dashboards overwrite themselves. A console renders current state, and current state is the one thing nobody asked about. Activity logs record that something changed, not what everything was at a moment. Screenshots preserve whatever someone thought to capture, on the day they thought to capture it. When the date arrives from outside, none of these reconstruct the moment. They reconstruct your best story about it.

Proof of State is the record of the moment itself: point-in-time captures of resource configuration, taken from the cloud provider APIs, content hashed, chained, and kept. As of stops being a reconstruction project and becomes a parameter you pass.

State is the first of three proofs. Proof of Change records what altered the estate and under what authority. Proof of Agency records what your machines were allowed to do before they did it. All three commit to the same evidence base.

REC 0001WHAT WE RECORDsha3-2567862dd1c94e25d6dca8895cb8c7599a8c34cf4c9789b1d4f6f126cc4a92bd795prev:c753fa1b8b86

What we actually record

One record per resource, per capture, whether the capture ran on schedule or a change triggered it. The claim is not a sentence about the resource; it is the raw provider response underneath, hashed. The field names below are the real ones.

resource.id
The full provider path of the resource this record is about: the identifier the cloud API resolves, not a friendly name someone typed into a spreadsheet.
control.mapping
The control statements this state bears on, stored on the record. One encryption setting can evidence NIST 800-171 3.13.16 and 800-53 SC-28 at once, and the mapping is written down, not implied.
asset.scope
The declared boundary the resource sits in: CUI enclave, environment, production class. Scoping arguments get settled by this field instead of by the meeting.
state.proof
The raw cloud API response that grounds the claim, stored verbatim. If a narrative and this payload ever disagree, the payload wins.
content.hash
SHA3-256 digest of the record content. Anyone holding the record can recompute it; a matching digest means unaltered content, with no trust in us required.
captured.at
UTC timestamp of the capture. Every claim in the evidence base reads as of this field, not as of whenever someone last looked.
retention
Seven years, append-only JSONL. A record is never updated in place; newer state is a new record, chained after the old one.
regenerable.to
Any historical timestamp inside retention. The assessor picks the date; the evidence base rebuilds the environment as of that date from the records written then.
Exhibit S-1collectors and artifacts, as shipped
The PolicyCortex evidence system: registered collectors and artifacts grouped by control, each artifact with source, resource path, capture time, size, and SHA hash

Exhibit S-1 · collectors writing hashed artifacts per control: the record family above, as it lands. Illustrative demo data; the interface is real.

state-492118.jsonlone state record, formatted for reading; values illustrative, field names real
# storage account encryption at rest, as of a date the assessor named
record           state-2026-05-14-492118
captured.at      2026-05-14T03:10:22Z
resource.id      /subscriptions/1e6f4c9a/resourceGroups/rg-cui-prod
                 /providers/Microsoft.Storage/storageAccounts/stcuiprod01
control.mapping  800-171 3.13.16  800-53 SC-28  CMMC SC.L2-3.13.16
asset.scope      cui-enclave/production
state.proof      raw provider response, stored verbatim
    encryption.keySource                        Microsoft.Keyvault
    encryption.requireInfrastructureEncryption  true
    supportsHttpsTrafficOnly                    true
    minimumTlsVersion                           TLS1_2
content.hash     sha3:5b19d4a3c7e2
chain.prev       sha3:f04a11c89bd3
scope.declared   2 of 2 connected subscriptions observed, no gap this interval
retention        seven years (until 2033-05-14)
regenerable.to   any timestamp since first capture
as-of scrubberthe assessor picks the date, not us

as of 2026-08-30, assembled from the environment, not from memory.

state-2026-08-30-492963.jsonlrecord on chain
resource                stor-prod-eastus-04
control                 SC-28
encryption.at_rest      enabled
tls.min_version         TLS1_2
public_network_access   Disabled
captured_at             2026-08-30T02:47:33Z
content.hash            sha3:7e50d1a4b98c
chain.prev              sha3:0b64f7e2a1c9

Illustrative records. The shape is real; the values are sample data.

REC 0002VERIFICATIONsha3-256271a782586f858845edeeb71eee46d8739df370576ad4343514486f98cc1452eprev:7862dd1c94e2

How the record is verified

Each state record is content hashed with SHA3-256 and carries the digest of the record before it, so every line commits to the entire history above it. The log is append-only: a correction is a new record, never an edit. Alter one record, anywhere, at any time, and every digest after it stops recomputing. Verification is a recomputation, not an assertion: run the chain from the first record forward and it returns one of two answers, intact, or the sequence number of the first record that breaks.

A second party can do that recomputation without our help. The records, the digests, and the chain rule are everything required: no PolicyCortex account, no API of ours in the loop, no trust in the operator whose environment is being examined. Retention is seven years, and because the log is a chain rather than a table, producing the environment as of any date is a replay, not an archaeology project.

The documents assessors ask for are projections of this record, not parallel artifacts maintained by hand. SSP, POA&M, and SAR generate from one implementation record, and the package exports as OSCAL 1.1.2. The same record ships in assessor handoff shape for the eMASS and C3PAO exchange, and in program-office shapes for federal environments. The document is never the source. The chain is.

How the chain is constructed and where it lives inside your tenant is covered in the architecture. There is no telemetry pipeline to PolicyCortex servers and no egress of evidence. Verification works precisely because nothing about it depends on us.

chain verificationtwo runs of the same command
$ pcx verify state as-of=2026-05-14
records       492118
recomputed    492118
head          sha3:2f8ce1a90b47
gaps          1 declared (interval and reason on record)
result        INTACT

$ pcx verify state   (same log after one record edited in place)
result        BROKEN at seq 310442
note          every digest from 310443 onward fails to recompute
REC 0003STATED LIMITsha3-256781ea88d3d049cc55743e8575c7e62e5f6de5913e1c1f0dad06e81a4bc625d29prev:271a782586f8

What this layer does not do

gap-000841.jsonlabsence is a record, not a smaller number
record        gap-2026-05-02-000841
scope         subscription sb-eng-sandbox
interval      2026-05-02T11:40:00Z to 2026-05-02T14:05:31Z
reason        collector credential expired; rotated 14:05:31Z
effect        no state records for this scope in this interval
declared      true
chain.prev    sha3:77b3f0a2d941
REC 0004FRAMEWORK MAPsha3-2561376adb55724cd88ae22346d3ab2f7a1486c97856f2351cf56c6598e2af221caprev:781ea88d3d04

Where it maps

State evidence files under continuous monitoring, with the audit family governing how the records themselves are protected. The mapping is quiet on purpose: the record is the product, and the rows below are where assessors expect to find it.

NIST 800-53
CA-7 continuous monitoring grounded in point-in-time records, with the AU family covering how those records are protected, retained, and reviewed.
NIST 800-171 / CMMC Level 2
One evidence base for the 110 requirements: state records handed to your assessor as generated evidence with the raw payload attached.
FedRAMP 20x
Machine-readable by construction. State and control mappings export as OSCAL 1.1.2 rather than as documents transcribed from screenshots.
MITRE ATT&CK
Configuration tampering becomes detectable because expected state is on record: an unexplained delta from the last capture anchors the detection.
Exhibit S-2control rows, as shipped
The PolicyCortex control implementation table: CMMC Level 2 controls by family with implementation status and evidence counts

Exhibit S-2 · the 110-requirement table where state evidence files, control by control. Illustrative demo data; the interface is real.

Reconstruct the state a reviewer actually asks for.

Request verification
Register colophonRecomputable by a second party
SeqLabelSHA3-256Prev
REC 0000THE QUESTIONc753fa1b8b86e92b4ef53279
REC 0001WHAT WE RECORD7862dd1c94e2c753fa1b8b86
REC 0002VERIFICATION271a782586f87862dd1c94e2
REC 0003STATED LIMIT781ea88d3d04271a782586f8
REC 0004FRAMEWORK MAP1376adb55724781ea88d3d04

The record headers on this page are SHA3-256 digests of this page's own copy, chained in sequence from a fixed genesis value. Edit one word anywhere above and every digest after it changes. Head of chain: sha3:1376adb55724. The product does the same thing to your evidence.