Qualify a passing marking rule where the reader sees it - #31
Merged
Conversation
Closes #19. Article 50(2) asks for output to be marked **and** detectable as artificially generated, and the Commission Guidelines say satisfying one limb does not discharge the other. markproof measures the first, against the operator's own watermark configuration. It cannot measure the second, and this is not a gap to be closed later: whether a third party who does not hold those keys can detect the mark is a property of the ecosystem, not of the endpoint under test, and no probe run against a system can establish it. So "MPF-T-001 PASS" is a smaller statement than it looks, and the risk is a reader concluding Article 50(2) is satisfied. docs/DISCLAIMER.md said so already, which is the wrong place: nobody reading a report opens the disclaimer of the tool that produced it. The Markdown summary and the PDF now carry the qualification immediately after the verdict — the PDF especially, because that is the artefact handed to an auditor and therefore where the over-reading happens. Both renderers state it in the same words, and a test asserts they cannot drift apart, because a reader comparing the two should find no difference to interpret. Only on a pass, and only for the two marking obligations. Nobody over-reads a failure, and a note printed on every run is one more line people learn to skip — the same defect as a warning that fires for every target. The gap is live rather than theoretical. Text-watermark detection tooling is largely announced rather than shipped, and where it exists it is key-gated, which the Guidelines treat as the weaker of the two footings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #19.
The problem
Article 50(2) asks for output to be marked and detectable as artificially
generated. The Commission Guidelines say satisfying one limb does not discharge
the other.
markproof measures the first, against the operator's own configuration. It cannot
measure the second — and this is not a gap to be closed in a later release:
whether a third party who does not hold those keys can detect the mark is a
property of the ecosystem, not of the endpoint under test. No probe run
against a system can establish it.
So
MPF-T-001 PASSis a smaller statement than it looks.docs/DISCLAIMER.mdalready said so, which is the wrong place — nobody reading a report opens the
disclaimer of the tool that produced it.
What a reader sees now
The qualification lands directly under "all checks passed", which is the sentence
it exists to qualify. Same wording in the PDF — the artefact actually handed to an
auditor, and therefore where the over-reading happens. A test asserts the two
cannot drift apart, since a reader comparing them should find no difference to
interpret.
Scoped deliberately
Only on a pass, and only for the two marking obligations. Nobody over-reads a
failure, and a note printed unconditionally is one more line people learn to skip —
the same defect as
MPF-L-001warning about every media target (#27).Obligation.is_markingcarries the reasoning, so the renderers ask a question witha documented answer rather than pattern-matching on strings.
Why now rather than later
The gap is live. Text-watermark detection tooling is largely announced rather than
shipped, and where it exists it is key-gated — which the Guidelines treat as the
weaker of the two footings. An operator reading a green run as full Article 50(2)
compliance today would be wrong in a way that only surfaces when someone asks.
450 tests, ruff + mypy strict clean.
🤖 Generated with Claude Code