Add inno comply: GDPR deletion verification and data-residue scanning - #211
Merged
Conversation
…ning Adds the `comply` subcommand, the inverse of `undelete`: instead of recovering data that lingers, it verifies a value has been purged from every InnoDB-retained location in a file and reports residue where it remains. - verify-deleted: decode-and-compare over live, delete-marked, free-list, and undo DEL_MARK records; --thorough adds a raw byte sweep of slack space - scan-residue: literal byte-pattern sweep across all page regions - encryption-audit: encrypted vs plaintext page report and key availability - audit --compliance --pattern: directory-wide residue scan - docs: comply CLI reference + GDPR verification walkthrough The scan covers only the files passed in - not the OS page cache, replicas, or other backups - and reports byte/record-level residue rather than certifying legal compliance. Patterns are literal (UTF-8 or hex:), keeping the core library free of a regex dependency and WASM-lean. Closes #175, #176, #177, #182, #183
Owner
Author
Deep review (auto-fix)Applied 6 fixes to the working tree (uncommitted - review with
Verified locally: Could not auto-fix 2 issues (left for manual review)
- Fixes are uncommitted in the author's working tree. Review before merging. |
- Reject non-ASCII hex: patterns instead of panicking on a non-char-boundary slice - Reject an empty --where value (would match every NULL row and report NOT purged) - Tag --thorough raw hits with their real page region (raw_<region>) instead of always labeling them raw_slack, which mislabeled live-record matches as slack - Escape the error field in audit --compliance CSV output - Replace em-dashes with hyphens in CLI output, doc comments, and the guide - Scope the comply.md summary to the clustered index rather than "every location"
This was referenced Jul 18, 2026
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.
Implements epic #165 (GDPR & Compliance Verification) - the last unbuilt piece of the v5.0-v5.2 roadmap. Epics 8/9/11 (undelete, timeline, binlog correlation) already shipped.
inno complyis the inverse ofinno undelete: instead of recovering data that lingers, it verifies a value has been purged from every InnoDB-retained location in a file and reports residue where it remains.What's included
--verify-deleted --where col=value- decode-and-compare over live, delete-marked, free-list, and undoDEL_MARKrecords.--thoroughadds a raw byte sweep of slack space using the value's InnoDB-encoded form.--scan-residue --pattern <text|hex:..>- literal byte-pattern sweep across all page regions (record heap, free space, header/trailer), reporting page/type/offset/region with hex context.--encryption-audit- encrypted vs plaintext page report and key availability.inno audit --compliance --pattern- directory-wide residue scan across every tablespace, in parallel.complyCLI reference + a GDPR-verification walkthrough guide, wired into SUMMARY, the CLI overview, and the sitemap.Design notes
scan_free_list_records,scan_undo_for_deletes,decode_page_records,walk_lob/record walkers - so no binary-format parsing was rewritten. Net-new code is the residue/verify orchestration, the value encoder, and the CLI.--helpstate this plainly.hex:), so the core library stays regex-free and WASM-lean.Testing
value_matchesflips exactly the "present" verify tests; breakingfind_allflips exactly the scan tests. Present/absent pairs are the guards.cargo fmt --check, wasm target check, andmdbook build/testall pass. New code is clippy-clean.Closes #175, #176, #177, #182, #183.
Note: a pre-existing
completions_teststack overflow and some newer-clippy-lint errors in unrelated files (simulate.rs,schema.rs,recover.rs,fts.rs) reproduce on master and are untouched here.