Spaces:
Running
Running
| # SCRUB-WP_BASIC_MODE_DECLUTTER_CONTRACTS | |
| Status: contract-tests-only boundary document. | |
| Repository: `solidprivacy-nl/scrub` | |
| ## Purpose | |
| This document defines the product and safety contracts for the next Basiscontrole declutter implementation. | |
| The goal is to make `Basiscontrole` materially cleaner than the current first mode-split implementation while preserving `Expertcontrole` as the full review, audit and troubleshooting surface. | |
| This package does not implement UI changes. A later implementation requires a separate workpackage. | |
| ## Product thesis | |
| ```text | |
| Basiscontrole is not weaker review. | |
| Basiscontrole is lower cognitive load with the same safety boundaries. | |
| Expertcontrole preserves the full review/audit machinery. | |
| ``` | |
| Basiscontrole should reduce visible complexity. It must not weaken privacy, review, export, Scrub Key, reinsert, audit or document-hygiene controls. | |
| ## Basiscontrole target | |
| Basiscontrole must remain the default selected review mode. | |
| The mode state key must remain: | |
| ```text | |
| solidprivacy_review_mode | |
| ``` | |
| The primary visible flow should remain: | |
| ```text | |
| 1. Voeg document of tekst toe | |
| 2. Controleer resultaat | |
| 3. Exporteer resultaat / Download veilig | |
| ``` | |
| Under `2. Controleer resultaat`, Basiscontrole should keep the practical essentials visible or near-visible: | |
| - `Controleweergave`; | |
| - `Basiscontrole` / `Expertcontrole`; | |
| - side-by-side review; | |
| - `Markeringen tonen`; | |
| - short instruction copy; | |
| - replacement count; | |
| - `Gemiste waarde toevoegen`; | |
| - one compact correction/detail path such as `Details aanpassen`; | |
| - primary document downloads. | |
| The replacement table remains the internal source of truth and fallback. It should remain reachable in Basiscontrole, but it should not dominate the default visual path. | |
| ## Basiscontrole declutter contract | |
| Basiscontrole should avoid showing the full expert expander stack as equally prominent top-level controls. | |
| The following should not all remain equally prominent in Basiscontrole: | |
| - `Waarom controleren?`; | |
| - `Extra controlehulpen`; | |
| - `Mogelijk extra te controleren waarden`; | |
| - `Geavanceerde details bij de vervangtabel`; | |
| - `Stap voor stap controleren`; | |
| - `Herbruikbare vervangingen`; | |
| - `Technische informatie`; | |
| - `Geavanceerde herkenningsdetails`. | |
| Acceptable Basiscontrole approaches: | |
| - show only a smaller correction path such as `Details aanpassen`; | |
| - keep `Gemiste waarde toevoegen` visible or immediately reachable; | |
| - keep `Vervangtabel controleren` reachable through the correction path; | |
| - show candidate-warning controls only when candidate rows exist; | |
| - keep Scrub Key and audit downloads available but secondary; | |
| - keep technical/advanced details primarily in Expertcontrole. | |
| ## Expertcontrole preservation contract | |
| When `Expertcontrole` is selected, the full detailed machinery must remain available: | |
| - `Waarom controleren?`; | |
| - `Gemiste waarde toevoegen`; | |
| - `Extra controlehulpen`; | |
| - `Mogelijk extra te controleren waarden`; | |
| - `Vervangtabel controleren`; | |
| - `Geavanceerde details bij de vervangtabel`; | |
| - `Stap voor stap controleren`; | |
| - `Herbruikbare vervangingen`; | |
| - `Scrub Key downloaden`; | |
| - `Audit en technische bestanden`; | |
| - `DOCX hygiene audit`; | |
| - `Technische informatie`; | |
| - `Geavanceerde herkenningsdetails`. | |
| Expertcontrole may remain more technical. It must not be stripped down as part of Basiscontrole decluttering. | |
| ## Mode-switch and session-state contract | |
| Switching modes must not reset: | |
| - uploaded text; | |
| - uploaded file; | |
| - recognized replacements; | |
| - manual additions; | |
| - replacement decisions; | |
| - download outputs; | |
| - session state needed for the active document. | |
| A later implementation should capture the review-surface return value in `presidio_streamlit.py`, for example: | |
| ```python | |
| side_by_side_review_state = render_side_by_side_review_panel( | |
| source_text=st_text, | |
| edited_replacements_df=replacement_editor_df, | |
| ) | |
| review_mode = side_by_side_review_state.get("review_mode", "Basiscontrole") | |
| is_expert_review = review_mode == "Expertcontrole" | |
| ``` | |
| The mode flag may control visibility and grouping only. It must not control recognition, replacement construction, export payloads, Scrub Key JSON, reinsert behavior or audit generation. | |
| ## Streamlit implementation constraints | |
| Do not introduce nested expanders. | |
| A later implementation must not put existing `st.expander(...)` blocks inside a parent `st.expander(...)`. | |
| Allowed approaches: | |
| - conditionally render fewer top-level expanders in Basiscontrole; | |
| - rename a top-level expander in Basiscontrole, for example `Details aanpassen — vervangtabel`; | |
| - keep expert-only controls as top-level expanders only when Expertcontrole is selected; | |
| - use simple headings/captions above grouped controls; | |
| - use tabs only if they do not introduce state loss or visual confusion. | |
| Do not introduce a parent `Meer controleopties` expander containing other expanders. | |
| ## Safety boundaries | |
| A later implementation must not change: | |
| - replacement logic; | |
| - review table data semantics; | |
| - include/remember/find/replace_with meaning; | |
| - export content; | |
| - download filenames; | |
| - download MIME types; | |
| - Scrub Key JSON semantics; | |
| - Scrub Key warning meaning; | |
| - reinsert behavior; | |
| - recognizer logic; | |
| - benchmark logic; | |
| - DOCX/PDF parsing behavior; | |
| - runtime/startup behavior; | |
| - dependencies. | |
| A later implementation must not introduce: | |
| - cloud processing; | |
| - AI processing; | |
| - OCR; | |
| - restored PDF promise; | |
| - PDF-to-DOCX reconstruction; | |
| - click-to-mark; | |
| - advanced editor; | |
| - full-document marking; | |
| - hidden export gate; | |
| - old replacement decision helper panel. | |
| ## Required app verification checklist for later implementation | |
| When a later implementation changes UI behavior, live app verification must confirm: | |
| 1. App starts without Script execution error. | |
| 2. Basiscontrole is selected by default. | |
| 3. Basiscontrole is visibly cleaner than before. | |
| 4. Side-by-side review remains visible. | |
| 5. `Markeringen tonen` remains visible. | |
| 6. `Gemiste waarde toevoegen` remains reachable. | |
| 7. `Vervangtabel controleren` / `Details aanpassen` remains reachable. | |
| 8. Expertcontrole exposes the full detailed controls. | |
| 9. Step-by-step review remains reachable in Expertcontrole. | |
| 10. Scrub Key download remains separated and warning-protected. | |
| 11. Primary document downloads remain visible. | |
| 12. Audit/technical downloads remain available. | |
| 13. DOCX hygiene audit remains available when relevant. | |
| 14. No visible export, Scrub Key or reinsert regression appears. | |
| ## Next package | |
| The next implementation package may be: | |
| ```text | |
| SCRUB-WP_BASIC_MODE_DECLUTTER_IMPLEMENTATION | |
| ``` | |
| Only start implementation after these contract tests are accepted and merged. | |