Skip to content

Record that the register derives fingerprints, not the scanner - #99

Merged
GabeBolton merged 1 commit into
mainfrom
docs/fingerprint-split
Aug 12, 2026
Merged

GabeBolton merged 1 commit into
mainfrom
docs/fingerprint-split

Conversation

@GabeBolton

Copy link
Copy Markdown
Contributor

Follows the #81 restructure, so the design record stops contradicting the issues.

I had written that the analysis pipeline's highest-value output is a diff rather than an inventory. That is half right, and the wrong half matters.

The diff is the right reviewer-facing output. But computing it in the scanner would mean two things I do not want:

  • Giving a component that holds model API keys and source-code access read rights on the compliance database.
  • Making any change to the fingerprint definition a re-scan of every codebase, rather than a re-derivation over data already held.

So the scanner emits raw attributes — column name, type, question text, source location — and the register derives the fingerprint and computes the diff. The scanner stays dumber and more stable, which matters most for the component that will be iterated on constantly early on.

Also recorded: a definition change is a mass re-review event

Widen the fingerprint definition and every field's fingerprint moves at once, so every inherited assessment lands in the "changed" branch — thousands of records demanding human review because someone added a field to a tuple.

The definition is therefore versioned, and the version that produced each stored fingerprint is recorded, so the register can distinguish "these diverged because the definition changed" from "these diverged because the data did". Without that, the first definition change reads as a compliance emergency.

Issues restructured to match

🤖 Generated with Claude Code

The design record said the analysis pipeline's highest-value output is a diff.
That is half right, and the wrong half matters: the diff is the right
reviewer-facing output, but computing it in the scanner would mean giving a
component that holds model API keys and source-code access read rights on the
compliance database, and would make any change to the fingerprint definition a
re-scan of every codebase rather than a re-derivation over data already held.

So the scanner emits raw attributes - column name, type, question text, source
location - and the register derives the fingerprint and computes the diff. The
scanner stays dumber and more stable, which matters most for the component that
will be iterated on constantly early on, and it never needs to read the register.

Also records that a fingerprint definition change is a mass re-review event.
Widening the definition moves every field's fingerprint at once, so every
inherited assessment lands in the "changed" branch - thousands of records
demanding review because someone added a field to a tuple. The definition is
therefore versioned and the version that produced each stored fingerprint is
recorded, so the register can distinguish a divergence caused by the definition
from one caused by the data.

Issues restructured to match: #81 narrowed to comparison and the gate, #69's
payload settled as raw attributes, #68's contract gaining the required
attributes and the definition version, #71 narrowed and my earlier framing
corrected there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@GabeBolton
GabeBolton merged commit 8efa705 into main Aug 12, 2026
2 checks passed
@GabeBolton
GabeBolton deleted the docs/fingerprint-split branch August 12, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant