Skip to content

feat(quality): require snapshot secret masking and locked raw-echo properties - #8

Merged
lessevv merged 1 commit into
mainfrom
feat/snapshot-redaction-and-raw-echo-requirements
Aug 2, 2026
Merged

feat(quality): require snapshot secret masking and locked raw-echo properties#8
lessevv merged 1 commit into
mainfrom
feat/snapshot-redaction-and-raw-echo-requirements

Conversation

@lessevv

@lessevv lessevv commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Two rules the implementation already assumed but this repository never stated.
Neither had an identifier, so a change that depended on either could not cite
one — which is what this PR fixes, ahead of the implementation change that
needs them.

F5-R26 — snapshot secret masking

The development system snapshot renders effective configuration and
environment. Masking is keyed on the name, and the rule has to match plural
forms as well as singular: a retired key list decrypts exactly the data the key
in use does, and a rule expressed for the singular alone does not match it.

The page also states which way an uncertain key resolves. The two errors are
not symmetric. An over-masked diagnostic row costs a reader one lookup. An
under-masked one publishes a secret to anything that can read the page, which
includes a screenshot and a support bundle.

Q-R26 — locked raw-echo properties

Output is escaped, with one honest exception: an inline vector image cannot be
escaped and still draw. Where a value is rendered as raw markup, the property
holding it is locked against client mutation.

The reasoning is specific to server-rendered components with a thin client
layer. A serialisable component property is rehydrated from the client on every
request, so "the server built this markup" describes the first render only.
Without the lock, the raw sink accepts whatever the client sends back. The lock
and the raw echo are a pair; adding or removing either alone is what makes the
sink unsafe.

Scope

Documentation only — three files, twenty added lines, no behavioural claim
withdrawn or altered. just integrity, typos and markdownlint-cli2 pass.

Spec: GOV-R13

…operties

Two rules the implementation already assumed but the specification never
stated, so neither had an identifier a change could cite.

F5-R26 covers the development system snapshot. It renders effective
configuration and environment, and the masking rule has to match plural key
forms: a retired key list decrypts the same data as the key in use, and a rule
written for the singular does not see it. Where a key's sensitivity is
uncertain the rule resolves toward masking, because the two errors are not
symmetric — an over-masked row costs a lookup, an under-masked one publishes a
secret to a screenshot or a support bundle.

Q-R26 covers properties rendered as raw markup. An inline vector image is the
honest case for a raw echo, since escaping stops it drawing. A serialisable
component property is rehydrated from the client on every request, so
"server-built markup" holds only for the first render; the lock is what makes
the raw sink safe, and the two belong together.

Spec: GOV-R13
Signed-off-by: Wessel Verheij <info@nightworks.io>
@sonarqubecloud

sonarqubecloud Bot commented Aug 2, 2026

Copy link
Copy Markdown

@lessevv
lessevv merged commit c024227 into main Aug 2, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant