# SolidPrivacy Scrub — Workpackages This file translates `ROADMAP.md` into executable workpackages. Use: - `PROJECT_PROMPT.md` for full worker instructions and operating rules. - `PROJECT_PROMPT_SHORT.md` for the compact ChatGPT Project Instructions version. - `ROADMAP.md` for product direction and phase order. - `WORKPACKAGES.md` for immediate execution planning and parallelization. - `CHANGELOG.md` for implementation history. --- ## Mandatory worker start sequence Every worker must start by reading, in order: 1. `PROJECT_PROMPT.md` 2. `ROADMAP.md` 3. `WORKPACKAGES.md` 4. `CHANGELOG.md` If the active repository is not `solidprivacy-nl/scrub`, stop and report the mismatch. Every worker must end with a handover summary and write that summary to: ```text handover/workpackages/ ``` Filename format: ```text handover/workpackages/YYYYMMDD_HHMM_.md ``` --- ## Current execution principle Avoid parallel edits to the same Streamlit UI patch area. Parallel work is safe for: - pure helper modules; - tests; - specifications; - documentation; - non-UI architecture work. Parallel work is risky for: - `presidio_streamlit.py`; - `fix_streamlit_nested_expanders.py`; - export/download UI blocks; - shared replacement table flow. UI integration should therefore happen sequentially. --- ## Completed prerequisite ### WP0 — v12.3 stabilization check Status: completed by user verification. Evidence: - GitHub Actions tests green. - GitHub to Hugging Face sync green. - App reloaded successfully. - pandas Index truth-value error gone. - Simplified review table working. - Technical details available in separate expander. Outcome: - v12.3 can be treated as stable. - Work may continue with v12.4. --- ## Completed UI workpackages ### WP1 — v12.4 Review guidance text Status: implemented; GitHub Actions and Hugging Face sync confirmed green by coordinator; app guidance visually confirmed earlier by user. Goal: - Make the review workflow self-explanatory for non-technical legal users. Scope: - Explain that only checked rows are included in export. - Explain that `Controle nodig` rows require manual review. - Explain that the focus filter is a viewing aid, not the export scope. - Explain that technical details are mainly for audit/debugging. - Add AI-use guidance: scrub first, then use AI. Files: - `review_guidance.py` - `tests/test_review_guidance.py` - `fix_streamlit_nested_expanders.py` Verification: - GitHub Actions tests passed. - GitHub to Hugging Face sync passed. - Hugging Face app showed guidance around the review step. --- ### WP2 — v12.5 Final review summary Status: completed and formally closed after verification. Goal: - Show export readiness before downloads. Implemented helper module: - `review_summary.py` Implemented tests: - `tests/test_review_summary.py` - `tests/test_review_summary_ui_patch.py` Implemented summary values: - automatically detected rows; - rows needing review; - manually added rows; - remembered replacements; - checked rows included in export; - unchecked rows excluded from export; - open candidate warning; - Dutch readiness label and markdown lines. UI integration: - `fix_streamlit_nested_expanders.py` imports the review summary helpers. - The app shows `Eindcontrole vóór download` immediately above the download/export section. - The summary is advisory and does not change export/download semantics. Verification evidence: - Latest implementation handover commit before closeout: `ab1c926dfb6a1587f1ec57c3f895d1a5211fd645`. - Coordinator reported GitHub Actions tests green for the v12.5 review summary line. - Coordinator reported GitHub to Hugging Face sync green for the v12.5 review summary line. - Hugging Face app was visually verified by the coordinator/user. - The app showed `Eindcontrole vóór download` before the download section. - Downloads were reported as still working after visual verification: text, CSV, DOCX and PDF. Outcome: - v12.5 is complete. - No export semantics were changed. - WP3 can continue as the next active workpackage. --- ### WP3 — v12.6 Export sanity checks Status: completed and formally closed after coordinator closeout instruction. Goal: - Warn users before export if review risk remains. Implemented helper module: - `export_sanity.py` Implemented tests: - `tests/test_export_sanity.py` - `tests/test_export_sanity_ui_patch.py` Implemented checks: - `Controle nodig` rows remain unchecked; - candidate rows exist but are not included; - no replacements selected; - user review remains required; - export is advisory and not guaranteed anonymization. UI integration: - `fix_streamlit_nested_expanders.py` imports `build_export_sanity_checks` and `export_sanity_warnings`. - The app shows `Extra exportcontrole` near `Eindcontrole vóór download` before the download/export section. - The warning block is advisory only and explicitly says downloads remain available and export settings remain unchanged. - Downloads are not blocked. - TXT, CSV, DOCX and PDF export behavior is not changed. Validation evidence: - Helper verification was reconciled externally by coordinator: `Tests #58` green and `Sync to Hugging Face Space #72` green for commit `b0bf8ae`. - UI integration commits: - `c60b9b4bfa8944e620546ca26a4fe42c287edaa0` — Integrate export sanity warnings into UI patch. - `f5158c9faf8e7676cb8403da0b42b0465539acfa` — Add export sanity UI patch tests. - `7d043d13096518d5dca6a5f187189fa3a8471627` — Update workpackage status for export sanity UI. - `4a84ddb7ca2b298ce2dcdcc5daf8b9f1cc055023` — Add export sanity UI handover. - WP3C closeout was requested by the coordinator as administrative closeout only, with no further code changes. Boundaries preserved: - No direct edit to `presidio_streamlit.py`. - No additional code changes in WP3C. - No export/download behavior changed. - Downloads are not blocked. - No Scrub Key logic added in WP3. - No cloud processing introduced. Outcome: - v12.6 is closed. - v12 Review UX line is complete from WP1 through WP3. - Next UI phase can move to v13 Scrub Key JSON export after coordinator approval. --- ## Active workpackage ### WP4B — v13.1 Scrub Key JSON export UI integration Status: implemented; awaiting GitHub Actions, Hugging Face sync and app verification. Goal: - Add a local Scrub Key JSON download option after review, without adding import, reload, reinsert or AI-output flows. Implemented foundation from WP4: - `SCRUB_KEY_SPEC.md` - `scrub_key.py` - `tests/test_scrub_key.py` Implemented UI integration: - `fix_streamlit_nested_expanders.py` imports `build_scrub_key`, `scrub_key_to_json` and `validate_scrub_key`. - The app shows `Scrub Key (JSON)` near the existing final review/download section. - The app shows a warning that a Scrub Key is pseudonymization, not full anonymization. - The app warns users not to share the key with AI services or third parties unless consciously intended and allowed. - The app offers `Download Scrub Key (.json)` with filename `solidprivacy_scrub_key.json`. - The UI layer adds timestamps at export time, preserving the pure model decision that `scrub_key.py` does not create timestamps itself. Implemented tests: - `tests/test_scrub_key_ui_patch.py` Boundaries preserved: - No direct edit to `presidio_streamlit.py`. - No Scrub Key import/reload. - No reinsert UI. - No AI-output flow. - No cloud processing. - No secret storage. - No real personal data. - No change to TXT, CSV, DOCX or PDF export/download behavior. Validation status: - Local pytest not run from this connector environment. - GitHub Actions pending for commits: - `a9011ccc3fdb981c3101490fdc8b8996696f75e3` — Integrate Scrub Key JSON export into UI patch. - `adb676000d07e6f00b39a378da40adfa9701e0d1` — Add Scrub Key UI patch tests. Next step: - Verify GitHub Actions and Hugging Face sync. - Ask the user/coordinator to verify in the Hugging Face app that `Download Scrub Key (.json)` appears and that existing TXT/CSV/DOCX/PDF downloads still work. --- ## Parallel strategic workpackage ### WP4 — v13.0 Scrub Key specification and pure model Status: implemented; local targeted tests passed; GitHub Actions and Hugging Face sync not independently confirmed by this worker. Goal: - Prepare the strategic v13 Scrub Key / Reinsert phase without touching the active review UI yet. Implemented files: - `SCRUB_KEY_SPEC.md` - `scrub_key.py` - `tests/test_scrub_key.py` - `handover/workpackages/20260607_1342_v13_0_scrub_key_spec_model.md` Implemented Scrub Key fields: - original value; - placeholder; - entity type; - user-facing type label; - source; - review status; - include state; - timestamp; - optional document/project/dossier label. Implemented safety/spec decisions: - A Scrub Key makes scrubbed text reversible. - This is pseudonymization, not full anonymization. - The key must stay local and protected. - Users should not share the key with external AI services unless explicitly intended and allowed. - Scrub Key export/import must not silently change document meaning. - v13.0 excluded-row policy is `omitted`. - The pure model does not generate timestamps itself; timestamps must be supplied by the caller and validation catches missing timestamps. Implemented helper functions: - `build_scrub_key(rows, document_label=None) -> dict` - `scrub_key_to_json(scrub_key) -> str` - `scrub_key_from_json(text) -> dict` - `validate_scrub_key(scrub_key) -> list[str]` Validation: - Local targeted validation passed: `PYTHONPATH=. pytest -q tests/test_scrub_key.py` → 6 passed. - Full local test run not performed because the container could not clone the full repository. - Latest WP4 target/head commit checked: `d65364373e4d3612044d8688ac17e11de81c07e5`. - GitHub combined status returned `statuses: []` for `d65364373e4d3612044d8688ac17e11de81c07e5`. - Commit workflow-run lookup returned `workflow_runs: []` for `d65364373e4d3612044d8688ac17e11de81c07e5`. - Therefore this worker could not independently confirm green GitHub Actions or Hugging Face sync from the connector. Boundaries respected: - No edit to `presidio_streamlit.py`. - No edit to `fix_streamlit_nested_expanders.py` for v13.0. - No export/download buttons added for v13.0. - No reinsert UI added. - No cloud processing introduced. - No secrets or real personal data stored. --- ## Recommended execution order 1. Verify GitHub Actions `Tests` and GitHub to Hugging Face sync for WP4B. 2. Ask the user/coordinator to verify the Hugging Face app shows `Download Scrub Key (.json)` and the pseudonymization warning. 3. Confirm TXT/CSV/DOCX/PDF downloads still work. 4. After v13.1 is verified, plan v13.2 Scrub Key import/reload as a separate sequential UI workpackage.