Spaces:
Running
Running
| # WP37 — DOCX hidden content extraction helper | |
| Status: completed helper/tests/documentation-only | |
| Repository: `solidprivacy-nl/scrub` | |
| WP37 adds a pure local, read-only helper for detecting and extracting text from high-risk DOCX package parts that are outside the current DOCX reinsert foundation scope. | |
| The helper is: | |
| ```text | |
| docx_hidden_content_extractor.py | |
| ``` | |
| Primary function: | |
| ```text | |
| inspect_docx_hidden_content(content: bytes) -> dict | |
| ``` | |
| --- | |
| ## 1. Purpose | |
| The helper makes hidden-content risk audit-visible before any cleaner, removal policy or export-blocking policy is implemented. | |
| It focuses on: | |
| - headers; | |
| - footers; | |
| - comments / kantlijncommentaren; | |
| - comment author/person-like metadata where present; | |
| - tracked-change markers such as insertions, deletions and move markers. | |
| This directly follows WP35 and WP36A. | |
| --- | |
| ## 2. What the helper reports | |
| The helper returns an audit-oriented dictionary with fields such as: | |
| ```text | |
| valid_docx | |
| validation_issues | |
| local_only | |
| ai_processing | |
| cloud_processing | |
| extraction_only | |
| cleaning_applied | |
| export_blocking | |
| docx_parts_seen | |
| headers | |
| footers | |
| comments | |
| tracked_changes | |
| detected | |
| warnings | |
| ``` | |
| Detection flags include: | |
| ```text | |
| headers_detected | |
| footers_detected | |
| comments_detected | |
| tracked_changes_detected | |
| ``` | |
| --- | |
| ## 3. Supported extraction scope | |
| The helper inspects these DOCX package patterns: | |
| ```text | |
| word/header*.xml | |
| word/footer*.xml | |
| word/comments.xml | |
| word/commentsExtended.xml | |
| word/person.xml | |
| word/*.xml for tracked-change markers | |
| ``` | |
| It extracts text from WordprocessingML text nodes and reports parse errors per part where applicable. | |
| Tracked-change markers include: | |
| ```text | |
| w:ins | |
| w:del | |
| w:delText | |
| w:moveFrom | |
| w:moveTo | |
| w:moveFromRangeStart | |
| w:moveFromRangeEnd | |
| w:moveToRangeStart | |
| w:moveToRangeEnd | |
| ``` | |
| --- | |
| ## 4. Explicit non-goals | |
| WP37 does not: | |
| - clean DOCX files; | |
| - remove comments; | |
| - remove or accept tracked changes; | |
| - remove metadata; | |
| - block export; | |
| - change export semantics; | |
| - change DOCX reinsert behavior; | |
| - change Scrub Key schema; | |
| - change Streamlit UI; | |
| - add dependencies; | |
| - add cloud processing; | |
| - add real-data fixtures. | |
| The helper is deliberately extraction/audit-only. | |
| --- | |
| ## 5. Privacy boundary | |
| The helper is local and side-effect free: | |
| - no file-system persistence; | |
| - no network calls; | |
| - no AI calls; | |
| - no cloud processing; | |
| - no mutation of source bytes; | |
| - no export package writing; | |
| - no real-data test fixtures. | |
| It accepts bytes and returns an in-memory audit dictionary. | |
| --- | |
| ## 6. Recommended next step | |
| Recommended next package: | |
| ```text | |
| WP38 — DOCX hygiene audit report | |
| ``` | |
| Purpose: | |
| - Convert the extraction helper output into a user/support-facing hygiene audit structure. | |
| - Keep it warning/report-only unless a later approved package defines export-blocking semantics. | |
| Do not start comment removal, tracked-change removal or export blocking before the audit policy is explicit and tested. | |