Changelog
Big changes since the fork of NoteGuard/Automatic-PII-preprocessing-tool,
grouped by pull request / milestone (newest first). Encode Vibe Coding Hackathon — FLock Sovereign AI Challenge (hosted by Encode Hub).
Live-demo polish — 2026-06-21
Direct UI / docs changes on main for the public demo.
- Download de-identified output from the Try-it tab: a single sanitised note or the full sanitised dataset, as JSON or CSV — only the de-identified text is exported (raw PHI never leaves).
- Removed FLock.io as a technical reference throughout (UI + docs); kept only the hackathon credit.
- Added a hackathon footer to every tab.
- Simplified the UI copy: dropped model / algorithm names and file / command references; renamed the "Metrics & Leakage" tab; 1-based note index; 50 sample notes in the browser.
- Fixed the Streamlit
outputs/path after the app moved to the repo root (the Metrics and Two-Trust "Run" buttons read / wrote the wrong location).
[0.0.1] — 2026-06-20 — first release (Gold-RAP restructure & Hugging Face deploy)
Branches dev/refactor-cleancode + feat/hf-spaces-demo, merged to main.
- Reorganised to a Gold-RAP "analysis as a product" layout:
src/package,tests/,docs/,data/(inputs),outputs/(generated artifacts). - Renamed package
noteguard/→src/; British spelling throughout (recognisers). - Packaged via
pyproject.tomlas the single dependency source (removedrequirements.txt). - CI (
.github/workflows/ci.yml) runsruff+pyteston every push/PR; added logging. - Streamlit demo moved to repo root (
streamlit_app.py);run_eval.pymoved undertests/. - Hugging Face Spaces (Docker SDK) deploy:
Dockerfile, README front-matter,docs/DEPLOY_HF_SPACES.md. - Decluttered Claude tooling (eval skill, post-edit hook, local settings) and the root changelog.
Post-PR #3 hardening — 2026-06-20
Direct fixes on main after the team-briefing work.
- Only date-of-birth is masked; visit / admission dates are kept (clinically useful). Human-readable
redaction labels (e.g.
[NHS number]). - Fixed pseudonym mis-mapping caused by spaCy ORGANIZATION over-tagging.
- Removed the roster / gazetteer feature (kept the metric honest — no circularity).
- Consolidated the frontend on Streamlit; removed the Gradio demo.
PR #3 — Action items 1–4 from the team briefing — 2026-06-20
- Default spaCy model
en_core_web_lg(best UK-name recall; clinical transformer tested and rejected). - Human-in-the-loop review queue: low-confidence spans are still redacted and flagged for IG analyst confirmation before SDE-pool admission.
- ORGANIZATION excluded from Presidio's kept entities (it over-tagged labels like "NHS"/"GMC"); NHS site names caught by a LOCATION rule instead.
- Overlap-safe, priority-ranked span merge (precise rule entities beat broad NER spans).
PR #2 — UK entity backport — 2026-06-20
- Added
UK_NINO,UK_PASSPORT,UK_VEHICLE_REGISTRATIONrecognisers and comma-separated NHS-number detection, with format-correct fake surrogates for each.
PR #1 — NoteGuard de-identification gate — 2026-06-20
Consolidated two parallel implementations into one package.
- One pluggable
Detectorinterface:RuleDetector/PresidioDetector, degrading gracefully to pure-Python rules when spaCy/Presidio are unavailable. - Patient-consistent pseudonymisation via a Faker(en_GB) vault + per-patient date-shift; redaction mode.
- Evaluation harness: per-entity precision / recall / F1 and a measured residual-leakage rate, using the dataset's structured patient/admission tables as free ground truth.
- Two-Trust "sanitise-at-source" demo; Streamlit demo UI.
Initial NoteGuard implementation
- Pure-Python
noteguardpackage: rule recognisers (NHS Modulus-11 + context anchor, postcode, date, phone, email), detection layer, redaction/pseudonymisation transforms, evaluation, pipeline. - Loads the NHSE synthetic clinical notes (3 CSVs joined on
person_id/admission_id).
Initial commit
- Fork of
NoteGuard/Automatic-PII-preprocessing-tool.