Add markproof init, and the files a public repo is expected to have - #29
Merged
Conversation
The CLI module docstring had promised `init` since M4. It did not exist, which tells a reader the documentation is not checked against the code — the wrong first impression for a tool that sells verification. The audit rated adoption weak partly on this. `markproof init` writes a starting config. Deliberately small: one chat probe, with media, UI and text marking commented out and the reason each is optional. A scaffold full of settings nobody chose is how people end up running checks they cannot interpret. It refuses to clobber an existing file, and it points a first-time user at examples/demo-bot, because someone evaluating this tool may not have an endpoint of their own yet. Six tests, the load-bearing one being that the scaffold actually loads through `load_config` and names a rulepack that ships. A starting config that fails validation would be worse than no command. Also the community files the repository lacked. Two of them are shaped by what this project is rather than copied from a template: The "a verdict looks wrong" issue form asks which direction the verdict went, and names a PASS-that-should-have-failed as the outcome nothing downstream will catch. It asks for report.json specifically, because since #25 that file carries the rulepack digest and the probe URLs, so a run can be reconstructed. A second form exists for "a rule reads the law wrong", pointing at docs/RULES_SOURCES.md first. Legal disagreement is the most valuable contribution this project can get, and the rulepacks are CC-BY and cite their paragraphs precisely so that argument can be had in the open. The code of conduct says the thing that actually matters here — argue with the work, and say what you actually verified rather than what you believe — and is honest that this is maintained by one person, so some good contributions will not be merged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Tippel-AI
added a commit
that referenced
this pull request
Aug 31, 2026
pre-commit run --all-files only covers tracked files, so running it before git add left four new files unchecked. CI, which checks out everything, caught them — and I merged #29 without reading the failing check first. 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.
Final step of the audit remediation.
markproof initThe CLI's module docstring promised this command since M4:
Two of the three shipped. A promised-but-absent command tells a reader the
documentation is not checked against the code — the wrong first impression for a
tool whose subject is verification, and part of why the adoption axis graded
weak.
The scaffold is deliberately small: one chat probe, with media, UI and text
marking commented out and each carrying the reason it is optional. A config
full of settings nobody chose is how people end up running checks they cannot
interpret. It refuses to overwrite an existing file, and it points a newcomer at
examples/demo-bot, because someone evaluating this tool may not have an endpointof their own yet.
The load-bearing test is that the output actually loads through
load_configandnames a rulepack that ships. A scaffold that fails validation would be worse than
no command at all.
Community files
Not copied from a template — two of them are shaped by what this project is:
"A verdict looks wrong" asks which direction the verdict went and names
PASS where I expected FAILfirst, as the outcome nothing downstream will catch.It asks for
report.jsonspecifically: since #25 that file carries the rulepackdigest and the probe URLs, so a run can be reconstructed from it.
"A rule reads the law wrong" points at
docs/RULES_SOURCES.mdfirst and saysplainly that legal disagreement is welcome. The rulepacks are CC-BY and cite their
paragraphs precisely so that argument can be had in the open — the project does
not claim to be right about Article 50, it claims to be explicit about what it
checks.
The contact links route security reports to a private advisory, and route
"is my system in scope?" to the Commission, because that question is for a
lawyer and not for this tool.
The code of conduct says the thing that matters here — argue with the work,
and distinguish "I ran it and it failed" from "I think it would fail" — and is
honest that this is maintained by one person alongside other work, so some good
contributions will not be merged.
Plus
CITATION.cff, since the rulepacks are citable material in their own right.444 tests, ruff + mypy strict clean.
Where the audit stands after this
Still open: #18 (C2PA-in-HTML rule), #19 (marking vs detectability in the report),
#1 (PyPI upload, which is yours to do).
🤖 Generated with Claude Code