Skip to content

docs(deploy): say what happens if the report signing key is left unset - #802

Open
remyluslosius wants to merge 2 commits into
mainfrom
docs/report-signing-key-consequence
Open

docs(deploy): say what happens if the report signing key is left unset#802
remyluslosius wants to merge 2 commits into
mainfrom
docs/report-signing-key-consequence

Conversation

@remyluslosius

Copy link
Copy Markdown
Contributor

Raised while discharging an open item from the CMMC sprint review.

[reports].signing_key_file was documented as a preference - "production
should set a durable key"
- which does not tell an operator what going without
costs them.

What actually happens

Leaving it unset does not stop the service. It mints a fresh key each boot,
logs one warning, and signs reports normally. Nothing on any screen looks wrong.

But the key changes on every restart, so every report signed before a restart
stops verifying
against the key the service serves afterwards. The report
itself is unchanged; what changes is that its signature can no longer be
checked - and the person who discovers that is whoever is checking it, not the
operator who deployed.

For a report handed to an assessor, that is silent evidence invalidation found
at the worst possible moment. The CMMC sprint's Document phase output goes to a
C3PAO, which is what made it worth writing down properly.

Change

The guide now states the consequence rather than the preference, gives the
key-generation commands with the ownership the packaged install expects, and
warns that losing the key has the same effect as never setting one.

Docs only. No code change.

Found on the v0.7.1 tag. The release was tagged while the main-branch Quality
gate was still running, and `make release-status` reported

    FAIL  Q1  Quality and security gates

on a job that had not finished. GitHub leaves conclusion empty for an
in-progress run, and the checker read empty as non-success.

That is the same error this tool exists to prevent: presenting the absence of
data as a fact. "The release build failed" and "the release build has not
finished" are different claims, and the first one sends someone looking for a
break that does not exist.

PENDING is now its own status. It still blocks, so nobody promotes a candidate
whose build has not finished, but it no longer accuses. Where several entries
exist for one check name, a finished result outranks a pending one, so a stale
queued entry from a re-run cannot mask a completed pass.

Two tests, and the one that matters asserts PENDING is in BAD and is not FAIL:
blocking and accusing have to stay separable.
The setting was documented as a preference: "production should set a durable
key". That does not tell an operator what going without costs them.

Leaving it unset does not stop the service. It mints a fresh key each boot,
warns once, and signs reports normally, so nothing on any surface looks wrong.
What actually happens is that every report signed before a restart stops
verifying against the key the service serves afterwards, and the person who
discovers that is whoever is checking the signature, not the operator who
deployed it.

For a report handed to an assessor, that is silent evidence invalidation found
at the worst possible moment. Raised while reviewing the CMMC sprint brief,
where the Document phase output goes to a C3PAO.

The guide now states the consequence rather than the preference, and gives the
key-generation commands with the ownership the packaged install expects, plus
the warning that losing the key is the same as never setting one.
@github-actions github-actions Bot added documentation Improvements or additions to documentation size/M labels Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant