Skip to content

chore(deps)(deps): bump the minor-and-patch group with 2 updates#82

Merged
overwrite00 merged 1 commit into
developfrom
dependabot/pip/develop/minor-and-patch-0e8e447ea6
Jul 3, 2026
Merged

chore(deps)(deps): bump the minor-and-patch group with 2 updates#82
overwrite00 merged 1 commit into
developfrom
dependabot/pip/develop/minor-and-patch-0e8e447ea6

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 29, 2026

Copy link
Copy Markdown
Contributor

Bumps the minor-and-patch group with 2 updates: presidio-analyzer and spacy.

Updates presidio-analyzer from 2.2.359 to 2.2.363

Release notes

Sourced from presidio-analyzer's releases.

Release 2.2.363

What's Changed

... (truncated)

Changelog

Sourced from presidio-analyzer's changelog.

[2.2.363] - 2026-06-28

General

Added

  • Published source distributions alongside wheels in the PyPI release pipeline (#1924) (Thanks @​Copilot)

Changed

Fixed

  • Skipped the coverage PR-comment step outside pull request runs to prevent CI failures on push and workflow-dispatch runs (#1921) (Thanks @​Copilot)
  • Cleaned stale Poetry virtual environments during CI reruns to avoid mixed NumPy installs and IndentationError failures (#2091) (Thanks @​Copilot)
  • Fixed OpenAI anonymization sample typos, Fabric sample dependency guidance, and duplicate ZIP-code example documentation (#2017, #2027, #2034) (Thanks @​ynachiket, @​BelizSertcan)

Analyzer

Added

  • UK Driving Licence Number (UK_DRIVING_LICENCE) recognizer with pattern matching and context support (#1857) (Thanks @​tee-jagz)
  • German PII recognizers for DE_TAX_ID, DE_TAX_NUMBER, DE_PASSPORT, DE_ID_CARD, DE_SOCIAL_SECURITY, DE_HEALTH_INSURANCE, DE_KFZ, DE_HANDELSREGISTER, and DE_PLZ; all are disabled by default (#1909) (Thanks @​MvdB)
  • SE_PERSONNUMMER recognizer for Swedish personal identity and coordination numbers, plus Swedish Organisationsnummer recognition; both are disabled by default (#1912, #1918) (Thanks @​goveebee)
  • SlimSpacyNlpEngine and slim analyzer configs, enabling lightweight tokenization/lemmatization while delegating NER to recognizers such as GLiNER (#1916) (Thanks @​SharonHart)
  • Canadian SIN (CA_SIN) recognizer with English/French context and Luhn checksum validation (#1934) (Thanks @​kennionblack)
  • Turkish recognizers for TR_NATIONAL_ID, TR_LICENSE_PLATE, and TR_PHONE_NUMBER; all are disabled by default (#1995, #1999, #2006) (Thanks @​mrcuren)
  • Spanish Passport (ES_PASSPORT) recognizer (#2011) (Thanks @​asensionacher)
  • Optional countries filter for RecognizerRegistry.load_predefined_recognizers(), country metadata on predefined/custom recognizers, country-code introspection, and YAML supported_countries support (#2000) (Thanks @​ynachiket)
  • Configurable supported_entity support in PhoneRecognizer, including correct propagation to recognizer results (#2014) (Thanks @​max-tarlov-infinitusai)
  • Philippines TIN (PH_TIN) and Philippine mobile number (PH_MOBILE_NUMBER) recognizers; both are disabled by default (#2016, #2038) (Thanks @​aaronaco, @​Surya-5555)
  • South African ID number (ZA_ID_NUMBER) recognizer with birth-date and Luhn validation; disabled by default (#2064) (Thanks @​thatomokoena)

Changed

  • Consolidated analyzer configuration into a single analyzer.yaml flow while preserving the older config files with deprecation banners (#1970) (Thanks @​SharonHart)
  • Added Python 3.14 package support for presidio-analyzer by allowing Python <3.15 and avoiding spacy==3.8.14, which does not provide compatible Python 3.14 wheels (#2105) (Thanks @​michaelgiraldo)
  • Updated analyzer dependencies and metadata for stanza, gliner, spacy-huggingface-pipelines, pydantic, pyyaml, azure-ai-textanalytics, azure-core, phonenumbers, tldextract, azure-identity, numpy, and explicit click support (#1979, #1981, #1982, #1987, #1988, #1989, #1992, #1993, #1994, #2001, #2058, #2090, #2092) (Thanks @​dependabot, @​Copilot, @​SharonHart)

Fixed

... (truncated)

Commits

Updates spacy from 3.8.13 to 3.8.14

Release notes

Sourced from spacy's releases.

v3.8.14: Bug fix for model downloading in environments without pip on PATH

  • Fix spacy download failing in environments where pip is not on PATH but is available as a Python module (e.g., some virtual environments and containers)
Commits
  • 0069cf9 Set version to 3.8.14
  • 5603226 fix: check pip module availability instead of PATH binary in download (#13947)
  • d4bb796 Add least-privilege permissions to CI workflow
  • 9d29209 Pass github context via stdin instead of CLI arg
  • 4216738 Pin GitHub Actions to commit SHAs for supply chain security
  • 297938e Add smoke test and upgrade test to release build workflow
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps the minor-and-patch group with 2 updates: [presidio-analyzer](https://github.com/data-privacy-stack/presidio) and [spacy](https://github.com/explosion/spaCy).


Updates `presidio-analyzer` from 2.2.359 to 2.2.363
- [Release notes](https://github.com/data-privacy-stack/presidio/releases)
- [Changelog](https://github.com/data-privacy-stack/presidio/blob/main/CHANGELOG.md)
- [Commits](data-privacy-stack/presidio@2.2.359...2.2.363)

Updates `spacy` from 3.8.13 to 3.8.14
- [Release notes](https://github.com/explosion/spaCy/releases)
- [Commits](explosion/spaCy@release-v3.8.13...release-v3.8.14)

---
updated-dependencies:
- dependency-name: presidio-analyzer
  dependency-version: 2.2.363
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: spacy
  dependency-version: 3.8.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file lang:python Python-related scope:core Core library/framework changes labels Jun 29, 2026
@overwrite00 overwrite00 self-assigned this Jun 29, 2026
@overwrite00 overwrite00 self-requested a review June 29, 2026 04:21
@overwrite00 overwrite00 merged commit 59502ae into develop Jul 3, 2026
2 checks passed
@dependabot dependabot Bot deleted the dependabot/pip/develop/minor-and-patch-0e8e447ea6 branch July 3, 2026 20:28
overwrite00 added a commit that referenced this pull request Jul 3, 2026
)

* Create LICENSE

* Delete LICENSE

* Add MIT License to the project

* Aggiunto README.md e immagine cover del progetto

* Aggiornato README.md

* Docs: move changelog to a dedicated file following Keep a Changelog standard

* Ver. 1.2.5 - Fix link mailto: negli indirizzi email censurati

* Aggiornato numero di versione badge

* Aggiunta icona applicazione e script per build automatico per le release

* Fix: stable cross-platform build and versioning

* Fix: UnicodeDecodeError on Windows build (forced utf-8 encoding)

* Fix: generazione dinamica .ico per Windows e aggiornamento asset icona

* Fix: rimozione finta trasparenza dall'icona

* Fix: vera trasparenza assoluta per l'icona

* Fix: applicata icona personalizzata anche alla finestra About

* Feat: integrazione AI locale (Presidio/spaCy), dizionari custom, censura differita e fix icone child windows

* Fix CI: aggiunta pyinstaller mancante nelle dipendenze

* Fix: Corretto numero di versione nel codice

* Fix CI: aggiornato script per estrarre correttamente la versione 1.3.0

* Fix CI: forzato encoding UTF-8 per estrazione versione

* Fix CI: packaging Linux con variabile versione e modelli md

* CI: aggiunto ignore per i file di documentazione per evitare build inutili

* CI: aggiunto ignore per i file di documentazione per evitare build inutili

* Docs: completato restyling grafico con emoji per tutte le sezioni

* Docs: completato restyling grafico con emoji per tutte le sezioni

* Corretto link linkedin

* Corretto badge Linkedin

* Aggiornato CHANGELOG.md

* Fix CI: Corretto script per la generazione dei vai pacchetti

* Corretto testo e formattazione e link repo in README.md

* ci: fix definitivo icone linux e stabilità build rpm

- Aggiunta generazione file .desktop e icone pixmaps per integrazione menu GNOME.
- Risolto conflitto Build-ID negli RPM tramite macro personalizzata.
- Ottimizzata ridenominazione dinamica pacchetti RPM.
- Verificato supporto icone cross-platform.

* ci: disabilitato fail-fast e aggiunti controlli robustezza per build linux

* fix(ci): corretta opzione alien per la creazione dell'RPM

- Sostituito --rpm-set-permissions con --fixperms (come da log di errore).
- Mantenuta la stabilità della build cross-platform.

* fix: risolto bug visualizzazione PDF su Linux e icone About

- Aggiunto hidden-import PIL._tkinter_finder nel workflow per Linux.
- Aggiornata funzione resource_path per compatibilità cross-platform.
- Fix finestra About: aggiunti crediti, licenza MIT e icona scudo reale.
- Sostituita opzione alien con --fixperms per stabilità RPM.

* fix: ripristino funzioni integrali e fix visualizzazione PDF su Linux

- Reinserita logica AI, dizionari e binding del canvas.
- Aggiornata finestra About con icona reale e crediti sviluppatore.
- Aggiunto hidden-import PIL._tkinter_finder per risolvere il crash su Fedora.
- Sostituito comando alien con --fixperms per pacchetti RPM stabili.

* Fix grafica

* chore: aggiornato setup_env.py con dipendenze AI

- Aggiunti presidio-analyzer e spacy.
- Aggiunto download automatico dei modelli linguistici (en_core_web_md, it_core_news_md).

* fix: risolto crash della GUI e aggiornato setup_env.py" -m "- Corretto TclError sostituendo i CTkButton errati con CTkFrame nei contenitori del layout.
- Aggiunte dipendenze AI (Presidio, spaCy e download modelli) allo script di configurazione."

* fix(gui): risolti bug su rendering finestre e interazione canvas su Linux" -m "- Ripristinata l'immagine dell'icona e ripulito il testo nella finestra About.
- Fix scroll del mouse nel Canvas aggiungendo i bind specifici per Linux (<Button-4>, <Button-5>) e gestione sicura del delta.
- Risolto bug di rendering finestra Dictionary vuota spostando il grab_set() post-popolamento UI.

* Aggiornato .gitignore

* Aggiunto PyInstaller come dipendenza

* Aggiunta sezione sviluppo in locale sui sistemi Linux per installare a livello di sistema tkinter

* docs: aggiunti i prerequisiti di sistema (tkinter) per lo sviluppo locale su Linux

* docs: aggiunti i prerequisiti di sistema (tkinter) per lo sviluppo locale su Linux

* - Creato script build_local per lacreazione in locale dei pacchetti in base all'OS
- Aggiornato .gitignore

* Update: Corretto formattazione del testo e titoli
Added: Sezione per gli script di automazione (creazione venv e compilazione in locale)

* Sistemato link repositori per il comando git clone

* Rilascio versione 1.4.0

* fix/perf: centratura popup, crash export e ottimizzazione AI

- Ripristinata la centratura geometrica (X, Y) per le finestre About e Dizionario.
- Corretto crash irreversibile durante l'esportazione di PDF contenenti AcroForms.
- Risolto lo skipping delle annotazioni nel comando 'Clear Page' (iterazione sicura).
- Aggiunta protezione contro eccezioni sul drag del mouse a canvas vuoto.
- [PERFORMANCE] Estrazione e pre-compilazione delle Regex AI: tempo di scansione abbattuto del 70%.
- Riformattato e scompattato il codice della GUI per una migliore manutenibilità futura.

* build(scripts): riscrittura multipiattaforma per Windows e macOS nativo

- [WINDOWS] Risolto il blocco di 'RecursionError' causato da SpaCy iniettando 'sys.setrecursionlimit' in un file .spec dinamico.
- [WINDOWS/MAC] Aggiunta conversione automatica dell'icona da PNG a ICO (Windows) e ICNS (macOS) tramite Pillow.
- [MAC] Implementata l'istruzione BUNDLE per pacchettizzare la build in un'applicazione .app nativa invece di un binario UNIX nudo.
- [CORE] Abbandonato il parsing massivo via riga di comando in favore di un .spec strutturato che gestisce correttamente gli hidden imports (customtkinter, spacy, presidio).
- Aggiornata la logica di rinomina e spostamento dei file per supportare sia eseguibili singoli che directory di bundle.

* docs: aggiornato readme con limiti forensi e redatto changelog v1.5.4

* fix(core): risolto blocco e morte silenziosa del thread AI al primo avvio

- Aggiunti comandi 'self.update()' per forzare l'aggiornamento grafico della GUI prima che il processore venga saturato dal caricamento dei modelli linguistici.
- Implementato un Mutex Lock ('self.is_processing') per prevenire l'accavallamento dei comandi se l'utente clicca più volte per impazienza.
- Avvolta l'intera logica di scansione in un robusto blocco try-except. Qualsiasi eccezione nascosta di SpaCy o Presidio verrà ora mostrata in tempo reale nel box dei log, impedendo la 'morte silenziosa' dell'evento Tkinter.
- Sostituita ultima regex inversa complessa con operatore nativo Python 'in' per ulteriore spinta prestazionale.

* docs: aggiunta guida utente passo-passo localizzata

- Creato file GUIDA_UTENTE.md con tutorial operativo per utenti non esperti. - Inseriti link rapidi nel README per facilitare l'onboarding.

* Update README.md

* fix(linux/core): supporto GNOME nativo, fix scroll e correzione critica regex

- [LINUX] Implementato wrapper per intercettare 'zenity' e 'kdialog' garantendo finestre di selezione file native moderne.
- [LINUX] Ripristinati gli eventi fisici <Button-4> e <Button-5> per garantire il funzionamento dello scroll mouse su server X11/Wayland.
- [GUI] Rimosse le emoji testuali dai bottoni per risolvere i problemi di font fallback su sistemi minimali.
- [CORE] Fixato un grave bug logico nella whitelist che avrebbe protetto sottostringhe parziali usando l'operatore 'in'. Ripristinata e ottimizzata la valutazione tramite Regex boundary (\b).

* fix(core/linux): risolto bug loop annulla e ripristinato controllo crittografico

- [LINUX] Sistemato bug nel wrapper dei file dialog nativi che apriva la vecchia finestra Tkinter se l'utente cliccava su 'Annulla' in Zenity/Kdialog.
- [CORE] Ripristinato il blocco vitale 'if temp_doc.needs_pass:' durante il caricamento del file (inavvertitamente rimosso nelle versioni precedenti) per prevenire crash totali del motore AI su documenti protetti da password.

* fix(linux): corretto crash Zenity su Fedora e decodifica URI per Drag&Drop

- [LINUX] Aggiornata la sintassi dell'argomento --file-filter in Zenity e ottimizzato il gestore dei codici di ritorno per garantire un fallback infallibile verso Tkinter.
- [LINUX] Implementato parser di decodifica URI (urllib.parse) per ripulire il prefisso 'file://' e gli spazi '%20'. Ora il Drag and Drop del file sull'icona dell'eseguibile o tramite Desktop Entry funziona correttamente su GNOME/Wayland.

* fix(linux): rimossi i filtri in Zenity e gestito Drag&Drop nativo

- Eliminato il parametro --file-filter dalle chiamate a Zenity per prevenire il crash (exit code 1) sui sistemi Fedora/GNOME. Ora si appoggia a un controllo formato sicuro interno al tool.
- Aggiunta la decodifica dell'URI (file:// e spazi %20) nella funzione di avvio per permettere il caricamento via Drag & Drop sull'icona o apertura tramite terminale Linux.

* refactor: migrazione Enterprise a PySide6 e architettura Multithread (v2.0.4)

- [ARCHITETTURA] Sostituito integralmente lo stack grafico da CustomTkinter a PySide6 (Qt6). Questo garantisce un supporto nativo assoluto per i File Dialogs e il Drag & Drop su Linux (Wayland/GNOME), Windows e macOS.
- [CORE/THREADING] Isolato il motore AI (Presidio e spaCy) in un 'AIWorker' su QThread dedicato. La GUI ora gode di totale fluidità.
- [SICUREZZA THREAD] Sostituiti i vecchi workaround di aggiornamento con il sistema nativo Qt 'Signals & Slots', prevenendo crash di tipizzazione C++ nel passaggio delle Espressioni Regolari. Chiusura sicura del thread agganciata all'evento di uscita.
- [UX/UI] Rendering PDF accelerato via hardware tramite 'QGraphicsView'. Introdotto foglio di stile (QSS) personalizzato a tema 'Cybersecurity' e log di sistema formattati semanticamente (colori HTML in base a errori, avvisi e successi).
- [DEVOPS] Aggiornati gli script 'setup_env.py' e 'build_local.py' per gestire la transizione del framework rimuovendo customtkinter e ottimizzando il pacchetto Qt6 per PyInstaller.
- [FIX] Reintegrata finestra Info customizzata con logo, risolti artefatti grafici sugli input e allineata la naming convention in ottica white-label.

* docs: aggiornata documentazione per la versione 2.0.4 (Qt6)

- Aggiornati requisiti tecnici (PySide6). - Descritta la nuova architettura multithread nella guida utente. - Inserite istruzioni per il Drag & Drop nativo e i nuovi log colorati.

* chore(build): ottimizzazione PyInstaller per GitHub Actions e fix build-id

- Ottimizzato 'build_local.py' per disabilitare lo strip dei binari (strip=False), prevenendo errori di corruzione legati ai GNU build-id su sistemi Linux CI/CD.
- Perfezionata la gestione delle icone nel PyInstaller .spec: ora garantisce la corretta iniezione dell'icona .ico (Windows) e del BUNDLE .icns (macOS).
- Aggiornato workflow 'build.yml' rimuovendo librerie obsolete e installando binutils e libxcb richiesti da Qt6 su ambiente Ubuntu 22.04 headless.
- Aggiornato 'setup_env.py' per riflettere lo stack pulito delle dipendenze.

* chore(deps): rimossa libreria pillow e generate icone pre-compilate

- Ottimizzata la gestione delle icone: rimosso l'engine di conversione in runtime (PIL) da build_local.py in favore di icone native pre-esistenti.
- Rimossa la dipendenza 'pillow' dagli script setup_env.py e dal workflow GitHub Actions, snellendo la footprint del progetto.

* Aggiornato README.md - Rimosso riga Pillow dalla sezione Tecnologie utilizzate

* refactor(build): allineamento nomi build e automazione release.yml

- Ripristinata la logica di naming 'NullifyPDF_v{version}_{os_name}{ext}' inclusa la dicitura Linux_Portable.
- Implementato workflow release.yml per la pubblicazione automatica degli asset su GitHub.
- Rimossa definitivamente la dipendenza pillow da tutta la catena di build e configurazione.

* fix(macos): trasformato binario in App Bundle installabile (ZIP)

- Ripristinata la logica BUNDLE in PyInstaller per generare un pacchetto .app su macOS.
- Aggiunta compressione automatica ZIP per distribuire il bundle mantenendo icone e permessi.
- Sincronizzati i nomi degli artefatti nel workflow GitHub Actions per caricare .zip, .exe, .deb e .rpm.

* release: v2.0.5 completa e stabile (macOS ZIP, pacchetti DEB/RPM con trigger, no-Pillow)

- [Core] Silenziati i log qt.qpa.wayland e agganciato setDesktopFileName per risolvere bug launcher su Fedora/GNOME.
- [Build] Riscritta completamente la logica dei pacchetti RPM e DEB per eseguire gli update-desktop-database in %post/postinst.
- [macOS] Impacchettamento garantito tramite file ZIP del BUNDLE (.app) mantenendo permessi e firma.
- [Deps] Pillow rimossa da tutti gli script Python e GitHub Actions in favore di asset statici pre-generati (.ico e .icns).
- [CI/CD] Workflow unificato in release.yml configurato per raccogliere solo i 4 formati esatti specificati.

* chore: architettura a Singola Fonte di Verità con requirements.txt

- Introdotto file requirements.txt centralizzato per la gestione dei pacchetti.
- Aggiornato setup_env.py per installare le dipendenze dinamicamente leggendo il txt.
- Ottimizzati i workflow GitHub Actions: reinserita la direttiva 'cache: pip' che ora funziona grazie al requirements.txt, riducendo drasticamente i tempi di build.
- Le azioni GitHub ora richiamano pip install -r requirements.txt evitando duplicazioni di codice.

* chore(build): ottimizzazione cache pip, fix macOS e requirements centralizzati

- Centralizzate le dipendenze in requirements.txt (Single Source of Truth).
- Ripristinata la cache pip nei workflow GitHub Actions per velocizzare le build.
- Creato workflow 'test_build.yml' per la validazione delle PR verso main.
- Fix macOS in 'build_local.py': risolto errore path ZIP e implementata modalità ONEDIR sicura per Apple Gatekeeper.

* fix(build): risolto crash UnicodeEncodeError su Windows

- Sostituiti i caratteri speciali (come la spunta Unicode) con testo ASCII standard ([OK], [ERROR]) per prevenire crash del terminale cp1252 durante l'esecuzione su runner Windows in GitHub Actions.

* Update copyright

* refactor(P0): Critical bug fixes - bare except, input validation, logging

CRITICAL FIXES:
- Remove bare except clauses: jump_page(), cmd_export() [2x]
  Replace with specific exception types: ValueError, RuntimeError, AttributeError
- Add input validation to load_path(): check path exists, type, PDF extension
- Add input validation to jump_page(): check doc loaded before use, bounds
- Fix p.annots() crash: use (p.annots() or []) to handle None return
  Locations: user_click_pt(), cmd_clear(), apply_ai_to_page()

LOGGING INFRASTRUCTURE:
- Add file-based logging with rotation (~/.nullifypdf/logs/nullifypdf.log)
- Setup logging module with UTF-8 encoding (fixes Windows UnicodeEncodeError)
- Add logger to NullifyPDF class and use in error handlers
- Log tracebacks on exceptions for debugging

CODE QUALITY:
- Add docstrings to PDF_Checker.py and build_local.py
- Add validation for PDF_Checker.inspect_pdf(): file_path, target_word, extension
- Improve error messages with helpful context (page ranges, file types)
- Replace generic except with specific exception types

BACKWARD COMPATIBLE: All changes are non-breaking

* refactor(P1): Add type hints and docstrings to all modules

TYPE HINTS:
- Add typing module imports: Optional, List, Set, Dict, Any, Tuple
- Add function/method type hints (parameters + return types):
  * NullifyPDF.py: 26+ methods/functions
  * PDF_Checker.py: inspect_pdf()
  * build_local.py: All 5 build functions
  * setup_env.py: setup_environment()
- Type hints cover: logging.Logger, str, Set, None, QRectF, QPointF, etc.

DOCSTRINGS (Google Style):
- Add module-level docstrings to all files
- Add class docstrings: AIWorker, PDFView, NullifyPDF
- Add method docstrings with Args/Returns/Example sections
- 100+ docstring additions across codebase

CODE QUALITY:
- Improve IDE autocomplete with type hints
- Enable static type checking with mypy (future)
- Self-documenting code through typing

BACKWARD COMPATIBLE: All changes are non-breaking

* refactor(P2): Refactoring and code quality improvements

REMOVED LIST COMPREHENSION SIDE EFFECTS:
- Convert build_ui() radio button setup to for loop (lines 378-386)
- Convert user_click_pt() delete_annot to for loop (lines 527-528)
- Improve code readability and IDE warnings

EXTRACTED PDFListManager CLASS:
- New class manages blocklist/allowlist persistence
- Methods: load_blocklist(), load_allowlist(), save_blocklist(), save_allowlist()
- Encapsulate file I/O logic away from main window class
- Improve testability and separation of concerns
- Reduce NullifyPDF class size (~30 lines removed from methods)

AIWorker INPUT VALIDATION:
- Add validation for pages_text parameter (non-empty list)
- Add validation for choice parameter ('EN', 'IT', 'BOTH')
- Add validation for compiled_allowlist parameter (list type)
- Emit error signals and finish gracefully on validation failure
- Prevent crashes from invalid AI scan parameters

DEPENDENCY VERSION PINNING:
- Specify exact versions for all dependencies:
  * PySide6==6.7.0
  * PyMuPDF==1.24.1
  * presidio-analyzer==2.2.354
  * spacy==3.7.2
  * pyinstaller==6.3.0
- Enable deterministic builds across machines
- Add category comments for dependency organization

BACKWARD COMPATIBLE: All changes maintain existing API and behavior

* refactor(P3): Polish and testing infrastructure

DEBUG MODE:
- Add NULLIFYPDF_DEBUG environment variable support
- Set logging level to DEBUG when NULLIFYPDF_DEBUG=true
- Enables verbose troubleshooting without code changes

SETUP_ENV.PY LOGGING:
- Replace all print() calls with logging module
- Use structured logging with standard format
- Proper error handling with logger.error/warning
- Cross-platform friendly output

SMOKE TESTS:
- Create tests/test_validation.py with 9 test cases
- Test PDFListManager save/load round-trip
- Test word normalization (lowercase, min length)
- Test config directory creation
- Test resource_path returns string
- Test error handling with invalid inputs
- Pytest compatible with parametrized tests

BACKWARD COMPATIBLE: All changes maintain existing functionality

* fix(dependencies): Update package versions for Python 3.13 compatibility

- PySide6: 6.7.0 → 6.11.1 (6.7.0 does not support Python 3.13)
- PyMuPDF: 1.24.1 → 1.24.9
- pyinstaller: 6.3.0 → 6.10.0 (6.3.0 does not support Python 3.13)
- presidio-analyzer: 2.2.354 (unchanged)
- spacy: 3.7.2 (unchanged)

Fixes pip install error with Python 3.13

* fix(setup): Improve venv removal robustness with retry logic

- Add 3-attempt retry loop for removing old .venv directory
- Add 0.5s delay between retry attempts
- Better error handling and logging
- Proceed with venv creation even if removal incomplete
- Handle Windows file locking issues more gracefully

* docs: update documentation for v2.0.5 release

- Add CHANGELOG v2.0.5 with all bug fixes, performance optimizations, and code quality improvements
- Expand GUIDA_UTENTE.md with troubleshooting, debug mode, logging guide, and best practices
- Update README.md with v2.0.5 features (thread-safety, fast-path, disk-backed export, logging)
- Add pytest and mypy to requirements.txt as development dependencies
- Update GitHub Actions workflows to Python 3.12 and include smoke tests and type checking

* docs: remove obsolete tkinter instructions from README

NullifyPDF uses PySide6 (Qt6), not tkinter/customtkinter. Removed misleading and outdated Linux installation notes that referenced a GUI framework no longer used by the project.

* fix: implement all code review fixes for v2.0.5

Critical fixes:
- C2: Handle None from page.annots() on export
- C4: Remove unsafe spaCy vocab mutation
- H1: Add context manager for file handle leak
- H2: Guard against division by zero in progress bar
- H3: Copy QImage buffer to prevent segfault
- H7: Defer self.close() via QTimer for signal handler safety
- H8: Use repr() for safe path quoting in PyInstaller spec
- H9: Add check=True to pip upgrade subprocess

Performance optimizations:
- C1: Disk-backed memory-efficient PDF export (2x to 1x RAM)
- H6: Pre-compile regex patterns outside loops
- M3: Add O(1) fast-path for allowlist exact-match
- M4: Move get_text() extraction to worker thread with QMutex

Code quality:
- 100% type hints coverage across all modules
- Google-style docstrings for public methods
- File-based logging with rotation and debug mode
- Input validation for path, range, language selection
- Thread-safe document access with QMutex serialization

* fix(ci): replace spacy download with direct pip install from GitHub releases

- Use direct GitHub release URLs for spacy models instead of fragile spacy download command
- URLs pinned to exact versions (en_core_web_md-3.7.1, it_core_news_md-3.7.0)
- Fixes HTTP 404 errors on GitHub Actions
- Matches working implementation from setup_env.py for consistency across all environments

* optimization(ci): add spacy models to requirements.txt for pip caching

- Add spacy language models (en_core_web_md-3.7.1, it_core_news_md-3.7.0) to requirements.txt
- Models now installed via 'pip install -r requirements.txt' instead of separate step
- GitHub Actions pip cache now includes spacy models (~100+ MB)
- Subsequent CI runs will be much faster (cache hit on pip install)
- Simplifies workflow by removing dedicated 'Download AI Models' step
- Maintains exact version pinning for reproducibility

* docs: add core documentation (README, CONTRIBUTING, ARCHITECTURE)

- Redesigned README.md in English with EMLyzer style guide
- Added CONTRIBUTING.md with contributor guidelines, code standards, and PR workflow
- Added ARCHITECTURE.md with system design, components, and threading model

All documentation follows GitHub-optimized format with emoji, alerts, and tables.

* docs: add user and developer guides

- Added USER_GUIDE.md with 6-step tutorial, FAQ, and logging setup
- Added TROUBLESHOOTING.md with 10+ common issues and OS-specific solutions
- Added DEVELOPMENT.md with setup guide, code standards, and testing instructions

All guides include collapsible sections, tables with emoji, and EMLyzer style formatting.

* docs: add security, community, and GitHub templates

- Added SECURITY.md with privacy model, technical security details, and responsible disclosure
- Added CODE_OF_CONDUCT.md based on Contributor Covenant v2.1
- Added GitHub issue templates for bug reports and feature requests
- Added GitHub pull request template with testing and checklist

Includes automated template system for users submitting issues and PRs.

* ci: add dependabot configuration for automated dependency updates

- Configure Dependabot to scan pip dependencies weekly
- Auto-open PRs for security updates (max 5 per week)
- Configure Dependabot for GitHub Actions
- Use standardized commit message format (chore(deps), ci(deps))
- Reviewers and labels configured for dependency PRs

* docs: release v2.0.5 documentation suite and security configuration (#51)

* docs: add core documentation (README, CONTRIBUTING, ARCHITECTURE)

- Redesigned README.md in English with EMLyzer style guide
- Added CONTRIBUTING.md with contributor guidelines, code standards, and PR workflow
- Added ARCHITECTURE.md with system design, components, and threading model

All documentation follows GitHub-optimized format with emoji, alerts, and tables.

* docs: add user and developer guides

- Added USER_GUIDE.md with 6-step tutorial, FAQ, and logging setup
- Added TROUBLESHOOTING.md with 10+ common issues and OS-specific solutions
- Added DEVELOPMENT.md with setup guide, code standards, and testing instructions

All guides include collapsible sections, tables with emoji, and EMLyzer style formatting.

* docs: add security, community, and GitHub templates

- Added SECURITY.md with privacy model, technical security details, and responsible disclosure
- Added CODE_OF_CONDUCT.md based on Contributor Covenant v2.1
- Added GitHub issue templates for bug reports and feature requests
- Added GitHub pull request template with testing and checklist

Includes automated template system for users submitting issues and PRs.

* ci: add dependabot configuration for automated dependency updates

- Configure Dependabot to scan pip dependencies weekly
- Auto-open PRs for security updates (max 5 per week)
- Configure Dependabot for GitHub Actions
- Use standardized commit message format (chore(deps), ci(deps))
- Reviewers and labels configured for dependency PRs

* build(deps): bump pytest from 7.4.4 to 9.0.3 (#50)

Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 9.0.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](pytest-dev/pytest@7.4.4...9.0.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump presidio-analyzer from 2.2.354 to 2.2.359 (#60)

Bumps [presidio-analyzer](https://github.com/Microsoft/presidio) from 2.2.354 to 2.2.359.
- [Release notes](https://github.com/Microsoft/presidio/releases)
- [Changelog](https://github.com/microsoft/presidio/blob/main/CHANGELOG.md)
- [Commits](data-privacy-stack/presidio@2.2.354...2.2.359)

---
updated-dependencies:
- dependency-name: presidio-analyzer
  dependency-version: 2.2.359
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps)(deps): bump actions/upload-artifact from 4 to 7 (#52)

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps)(deps): bump actions/checkout from 4 to 6 (#53)

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps)(deps): bump actions/setup-python from 5 to 6 (#54)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps)(deps): bump actions/download-artifact from 4 to 8 (#55)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@v4...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps)(deps): bump softprops/action-gh-release from 2 to 3 (#56)

Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump pymupdf from 1.24.8 to 1.27.2.3 (#57)

Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.24.8 to 1.27.2.3.
- [Release notes](https://github.com/pymupdf/pymupdf/releases)
- [Changelog](https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt)
- [Commits](pymupdf/PyMuPDF@1.24.8...1.27.2.3)

---
updated-dependencies:
- dependency-name: pymupdf
  dependency-version: 1.27.2.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump pyinstaller from 6.10.0 to 6.20.0 (#59)

Bumps [pyinstaller](https://github.com/pyinstaller/pyinstaller) from 6.10.0 to 6.20.0.
- [Release notes](https://github.com/pyinstaller/pyinstaller/releases)
- [Changelog](https://github.com/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst)
- [Commits](pyinstaller/pyinstaller@v6.10.0...v6.20.0)

---
updated-dependencies:
- dependency-name: pyinstaller
  dependency-version: 6.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump mypy from 1.8.0 to 1.20.2 (#58)

Bumps [mypy](https://github.com/python/mypy) from 1.8.0 to 1.20.2.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.8.0...v1.20.2)

---
updated-dependencies:
- dependency-name: mypy
  dependency-version: 1.20.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump spacy from 3.7.2 to 3.8.14 (#61)

* chore(deps)(deps): bump spacy from 3.7.2 to 3.8.14

Bumps [spacy](https://github.com/explosion/spaCy) from 3.7.2 to 3.8.14.
- [Release notes](https://github.com/explosion/spaCy/releases)
- [Commits](explosion/spaCy@v3.7.2...release-v3.8.14)

---
updated-dependencies:
- dependency-name: spacy
  dependency-version: 3.8.14
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps)(deps): bump spacy from 3.7.2 to 3.8.14

Bumps [spacy](https://github.com/explosion/spaCy) from 3.7.2 to 3.8.14.
- [Release notes](https://github.com/explosion/spaCy/releases)
- [Commits](explosion/spaCy@v3.7.2...release-v3.8.14)

---
updated-dependencies:
- dependency-name: spacy
  dependency-version: 3.8.14
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: 0verwrite <31691645+overwrite00@users.noreply.github.com>

* security(workflows): add explicit permissions to GitHub Actions workflows (#62)

- test_build.yml: read contents, read actions (testing only)
- release.yml: write contents, read actions (for creating releases)

Fixes CodeQL alerts about missing workflow permissions.
Follows GitHub security best practices: explicit permissions limit
GITHUB_TOKEN scope to what's necessary for each workflow.

* ci: add auto-approve workflow for maintainer pull requests

- Automatically approves PRs created by the maintainer (overwrite00)
- Removes need for repository admin bypass in ruleset
- Maintains security while enabling smooth workflow
- Approval is traceable and can be disabled if needed

* ci: remove non-functional auto-approve workflow

GitHub Actions cannot approve pull requests due to platform limitations.
The bypass admin in ruleset is the appropriate solution for solo maintainers.

Revert PR #63.

* fix: remove unsupported reviewers property from dependabot.yml

The 'reviewers' property is not supported in Dependabot v2.0.
Removed to fix schema validation warnings in VS Code.

* Revert "fix: remove unsupported reviewers property from dependabot.yml"

This reverts commit 0fdad6b.

* fix: remove unsupported reviewers property from dependabot.yml

The 'reviewers' property is not supported in Dependabot v2.0.
Removed to fix schema validation warnings in VS Code.

This aligns with Dependabot v2 supported properties:
- schedule, labels, commit-message, allow, ignore
- open-pull-requests-limit, etc.

But NOT: reviewers (use assignees instead if needed)

* docs: simplify security support section in SECURITY.md

Removed redundant version support table. Only the latest version
receives security updates, so listing old versions was unnecessary.
Replaced with concise statement that clearly communicates the policy.

* docs: simplify security support section in SECURITY.md (#65)

Removed redundant version support table. Only the latest version
receives security updates, so listing old versions was unnecessary.
Replaced with concise statement that clearly communicates the policy.

* ci: optimize test_build workflow triggers

Remove redundant 'push' trigger that caused duplicate test runs.
Tests now run only on pull_request events to avoid waste.

- Before: Tests ran on both push AND pull_request (duplicate)
- After: Tests run only on pull_request to main
- Manual trigger (workflow_dispatch) still available

Reduces CI/CD noise and resources while maintaining coverage.

* ci: optimize test_build workflow triggers (#66)

* docs: simplify security support section in SECURITY.md

Removed redundant version support table. Only the latest version
receives security updates, so listing old versions was unnecessary.
Replaced with concise statement that clearly communicates the policy.

* ci: optimize test_build workflow triggers

Remove redundant 'push' trigger that caused duplicate test runs.
Tests now run only on pull_request events to avoid waste.

- Before: Tests ran on both push AND pull_request (duplicate)
- After: Tests run only on pull_request to main
- Manual trigger (workflow_dispatch) still available

Reduces CI/CD noise and resources while maintaining coverage.

* ci: configure dependabot to target develop branch

* Add files via upload

* ci: standardize automation with universal schema

- Update dependabot.yml to use universal label schema (lang:python, type:ci, scope:*)
- Update project-automation.yml with centralized PROJECT_ID and GH_PROJECT_TOKEN
- Centralize automation configuration for all repositories

* ci: add reopened trigger to issues workflow

- Include 'reopened' event type for issues (consistent with PR behavior)
- Allows automation to trigger when issues are reopened

* fix: correct bash syntax in project-automation workflow

The workflow had a critical syntax error: attempting to use a GitHub Actions context variable directly as a bash conditional. Fixed by storing the variable value first, then comparing it as a string.

Error was: if ${{ github.event.pull_request.merged }}; then
Fixed to: PR_MERGED="${{ github.event.pull_request.merged }}" && if [ "$PR_MERGED" = "true" ]; then

This syntax error prevented the workflow from running entirely.

* fix: remove emoji from workflow for YAML compatibility

* feat: add automatic reviewer request to workflow

- Request @overwrite00 as reviewer on opened/reopened PRs
- Works alongside automatic assignment to streamline PR review process

* chore: optimize dependabot.yml configuration

- Remove redundant 'allow: dependency-type: all' block
- Add groups to consolidate updates (minor-and-patch + development-updates)
- Limit major version ignore to development dependencies only
- Keep GitHub Actions free of major-version ignore (CI/CD security-critical)

* fix: correct dependabot.yml groups schema

* fix: correct dependabot.yml ignore schema

* chore(deps)(deps): bump pyinstaller in the minor-and-patch group (#75)

Bumps the minor-and-patch group with 1 update: [pyinstaller](https://github.com/pyinstaller/pyinstaller).


Updates `pyinstaller` from 6.20.0 to 6.21.0
- [Release notes](https://github.com/pyinstaller/pyinstaller/releases)
- [Changelog](https://github.com/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst)
- [Commits](pyinstaller/pyinstaller@v6.20.0...v6.21.0)

---
updated-dependencies:
- dependency-name: pyinstaller
  dependency-version: 6.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps)(deps): bump pytest in the minor-and-patch group (#77)

Bumps the minor-and-patch group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 9.0.3 to 9.1.0
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](pytest-dev/pytest@9.0.3...9.1.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(deps): correct spacy version to 3.8.13

* chore(deps)(deps): bump pytest in the minor-and-patch group (#80)

Tested: pytest 9.1.1 passes all 11 tests with no new errors

* ci(deps)(deps): bump actions/checkout from 6 to 7 (#79)

Verified: actions/checkout v7 upgrade is safe - we don't use pull_request_target or workflow_run events

* chore(deps)(deps): bump the minor-and-patch group with 2 updates (#82)

Bumps the minor-and-patch group with 2 updates: [presidio-analyzer](https://github.com/data-privacy-stack/presidio) and [spacy](https://github.com/explosion/spaCy).


Updates `presidio-analyzer` from 2.2.359 to 2.2.363
- [Release notes](https://github.com/data-privacy-stack/presidio/releases)
- [Changelog](https://github.com/data-privacy-stack/presidio/blob/main/CHANGELOG.md)
- [Commits](data-privacy-stack/presidio@2.2.359...2.2.363)

Updates `spacy` from 3.8.13 to 3.8.14
- [Release notes](https://github.com/explosion/spaCy/releases)
- [Commits](explosion/spaCy@release-v3.8.13...release-v3.8.14)

---
updated-dependencies:
- dependency-name: presidio-analyzer
  dependency-version: 2.2.363
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: spacy
  dependency-version: 3.8.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(deps): correct spacy version to 3.8.13 (3.8.14 unavailable on PyPI)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file lang:python Python-related scope:core Core library/framework changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant