Skip to content

Release Notes

1.4.3 [2026-09-09]

Enhancements:

  • The gear now de-identifies zip archives created on macOS or Windows even when they contain hidden OS files (__MACOSX/._*, .DS_Store, Thumbs.db, desktop.ini), automatically removing those entries first instead of skipping the whole archive. Real DICOM files are preserved, and an archive that contains only such hidden files still fails as it did before.

1.4.2 [2026-08-21]

Enhancements:

  • Added validate config option to enable or disable deid profile validation before deidentification occurs; defaults to true.

Maintenance:

  • Updated gear category from converter to utility in manifest.json.
  • Updated manifest.json description to more accurately reflect gear capabilities.
  • Updated license from Other to MIT in manifest.json.
  • Pinned pytest dev dependency to >=9.0.3,<10.

1.4.1 [2026-06-04]

Fixes:

  • Copied deid-profile input to a writable working directory path before use, preventing failures when the input file is read-only
  • Enabled autoescape=True on the Jinja2 Environment in deid_template.py to prevent template injection vulnerabilities

Maintenance:

  • Migrated base image from flywheel/python:3.12-alpine to flywheel/python:3.12-wolfi-build
  • Added chmod a+x on run.py and --chown=flywheel:flywheel to production Dockerfile copy step
  • Updated dev dependencies: pytest to >=9.0.3, pytest-cov to >=7.1.0, pytest-mock to >=3.15.1

1.4.0 [2026-04-02]

Enhancements:

  • Added support for acquisition.* Jinja template variables in de-identification profiles, allowing acquisition container metadata to be used during de-identification.
  • Added clear ValueError with a descriptive message when a template references container variables (subject, session, or acquisition) but the input file does not have the corresponding parent container.

Maintenance:

  • Added _parse_acquisition_vars() helper to parse acquisition.* variable names from Jinja template files.
  • Extended test coverage for acquisition container variable resolution and error handling when parent containers are missing.

1.3.2 [2026-03-31]

Enhancements:

  • Added session-level-profile config option to support session-level de-identification profiles via CSV lookup, requiring both subject.label and session.label columns.
  • Added support for resolving Flywheel container metadata variables (project, subject, session) directly from the de-identification template using Jinja2 syntax.

Fixes:

  • Fixed validate() to raise errors for missing required CSV columns before checking uniqueness, improving error clarity.
  • Fixed Jinja variable regex to avoid greedy matching across multiple template expressions on the same line.
  • Fixed working directory to context.work_dir before running migration to allow pixel actions to write correctly.
  • Fixed output_file_metadata null guard to prevent errors when metadata is None.

Maintenance:

  • Migrated from flywheel-gear-toolkit to fw-gear library.
  • Updated fw-gear-deid-export dependency from ~=1.8 to ~=1.10.0.
  • Updated python runtime to 3.12.13.
  • Replaced flywheel-sdk direct dependency with fw-gear[sdk]~=0.3.7.
  • Updated setuptools constraint to >=80.9.0,<81.0.0 and added ruamel.yaml>=0.18,<1 as an explicit dependency.

Documentation:

  • Updated CONTRIBUTING.md to reflect migration from poetry to uv for dependency management.
  • Updated README.md to document session-level-profile config option and session-level CSV customization, including migration guidance.

1.3.1 [2025-07-15]

Maintenance:

  • Migrated from poetry to uv for dependency management
  • Updated python from 3.12.10 to 3.12.11
  • Standardized Dockerfile FROM statement casing to use uppercase AS

1.3.0 [2025-06-10]

Enhancements:

  • Added delete-reason configuration option to specify deletion reason when removing original files on validated instances

1.2.7 [2025-06-02]

Enhancements:

  • Added file type validation to deid-profile input (requires source code type)
  • Added file type validation to subject-csv input (accepts tabular data type)

Fixes:

  • Updated flywheel-sdk to ^20.3 to address compatibility issues

Maintenance:

  • Updated python from 3.12.9 to 3.12.10
  • Updated flywheel-migration constraint from ^13.10.2 to ^13.10
  • Updated pytest-cov from ^3.0.0 to ^6.1
  • Updated pytest-mock from ^3.8.2 to ^3.14
  • Updated build system requirement from poetry>=0.12 to poetry-core>=1.0.0

Documentation:

  • Improved formatting of poetry configuration link in CONTRIBUTING.md

1.2.6 [2025-05-29]

Maintenance:

  • Pinned setuptools to 80.9.0 and removed pre-existing versions from base image to ensure consistent dependency resolution
  • Changed container runtime user to flywheel (UID/GID 31337) for improved security

1.2.5 [2025-05-12]

Enhancements:

  • Added support for asymmetric encryption/decryption using public and private keys via new public_key and private_key configuration options
  • Added support for symmetric encryption/decryption using secret keys via new secret_key configuration option
  • Added key file retrieval functionality that downloads encryption keys from specified Flywheel paths

Fixes:

  • Fixed bug in pixel scrubbing through updated flywheel-migration and fw-gear-deid-export dependencies

Maintenance:

  • Updated fw-gear-deid-export from ^1.7.0 to ^1.8
  • Updated flywheel-migration from 13.9.1 to ^13.10.2
  • Updated pytest from ^6.1 to ^8.3
  • Updated CI reference from main to sse
  • Updated pre-commit hooks reference from main to sse
  • Increased pytest coverage threshold from 0 to 52
  • Enabled VALIDATE_CLASSIFICATION in CI configuration
  • Enabled markdownlint pre-commit hook
  • Removed git package installation from Dockerfile
  • Refactored parse_config() to return single RunConfig dataclass instead of tuple
  • Added .markdownlint.jsonc configuration file
  • Added executable permissions to run.py in Dockerfile
  • Updated .dockerignore to remove unnecessary test exclusions
  • Removed empty __init__.py file

Documentation:

  • Added detailed documentation for new encryption key configuration options (private_key, public_key, secret_key)
  • Fixed line length formatting throughout README.md to meet style guidelines
  • Updated CONTRIBUTING.md formatting for consistency

1.2.4 [2025-03-11]

Fixes:

  • Added deid package to explicit dependencies to enable pixel-scrubbing functionality

Maintenance:

  • Updated fw-gear-deid-export from 1.6.1 to ^1.7.0
  • Added flywheel-migration 13.9.1 with pixel extras for enhanced DICOM deidentification support

1.2.3 [2025-02-11]

Fixes:

  • Fixed metadata deidentification returning None for file info in some cases
  • Improved error handling and logging when deidentified file save fails
  • Added validation to prevent processing when no files are deidentified

Enhancements:

  • Removed automatic addition of filename key to YAML config files

Documentation:

  • Added note to README about requiring flywheel section in deid profile to preserve file metadata

Maintenance:

  • Removed add_or_replace_filenames() function and related tests

1.2.2 [2025-01-21]

Enhancements:

  • Added support for deidentifying file metadata using the flywheel section in deid profiles
  • Added new RunConfig dataclass to encapsulate gear runtime configuration

Fixes:

  • Fixed issue where garbage collection could delete deidentified files by working on symbolic links instead of original files

Maintenance:

  • Updated git from 2.47.1-r0 to 2.48.1-r0
  • Removed build-base package from Dockerfile
  • Pinned flywheel-sdk to 16.19.2 (downgraded from ^19)
  • Removed flywheel-migration dependency
  • Added fw-gear-deid-export dependency at version 1.6.1
  • Refactored file deidentification logic into separate deid_file module
  • Refactored output processing logic into main module for better separation of concerns
  • Moved utility functions (create_tag, add_tags_metadata, validate_destination) from run.py to utils.py
  • Updated .gitignore to exclude all files by default with specific inclusions

1.1.1 [2025-01-06]

Enhancements:

  • Added gear classification metadata to manifest including function, modality, organ, species, and therapeutic area

Fixes:

  • Improved conditional logic structure in find_profile_element() function in fw_gear_deid_inplace/deid_template.py

Maintenance:

  • Updated git from 2.46.2-r0 to 2.47.1-r0 in Dockerfile
  • Added build-base package to Dockerfile
  • Migrated flywheel-migration dependency from Git reference to PyPI version ^13.9
  • Removed unnecessary return statement in add_or_replace_filenames() function
  • Reordered imports in run.py to follow standard conventions
  • Applied code formatting improvements to test files using parenthesized context managers

1.1.0 [2024-10-10]

Enhancements:

  • Added git package (2.46.2-r0) to Docker image for version control capabilities

Maintenance:

  • Updated flywheel-migration to use git reference e737a2d4 with pixel extras
  • Added --no-cache-dir flag to all uv pip install commands to reduce Docker image size
  • Added requirements-dev.txt to .dockerignore and .gitignore whitelist
  • Removed .idea/.gitignore IDE configuration file
  • Relaxed pytest version constraint from ^6.1.2 to ^6.1

1.0.1 [2024-10-03]

Enhancements:

  • Added Docker build cache support for faster CI builds
  • Added cache clearing capability to GitLab CI pipeline

Fixes:

  • Replaced subprocess.call with shutil.move for more reliable file operations

Maintenance:

  • Migrated Dockerfile from Debian to Alpine base image
  • Implemented multi-stage Docker build for optimized image size
  • Updated flywheel-sdk from 16.16.2 to ^19
  • Updated Jinja2 from ^2.11.2 to ^3
  • Added rpds-py ^0.20.0 dependency
  • Removed unused backoff import from run.py
  • Removed explicit pinning of several dependencies (pyaml, joblib, dotty-dict, jsonschema, MarkupSafe, fs)
  • Added .idea/* to .gitignore for IDE configuration exclusion
  • Updated .dockerignore to include all requirements files
  • Set PUBLISH_POETRY to true in GitLab CI configuration
  • Configured test stage to use Podman instead of Docker
  • Added environment variables to manifest (PATH, VIRTUAL_ENV, PYTHON_VERSION, PYTHONPATH, TERM)
  • Removed unused git and libexpat1 system dependencies from Dockerfile
  • Removed non-root user configuration from Dockerfile

1.0.0 [2024-09-27]

Enhancements:

  • Added profile-based de-identification functionality for multiple file types including DICOM, JPG, PNG, TIFF, XML, JSON, CSV, TSV, and text files
  • Added support for field transformations including remove, replace-with, increment-date, increment-datetime, hash, hashuid, jitter, encrypt, decrypt, and regex-sub
  • Added DICOM pixel data masking based on pre-defined coordinates
  • Added subject-specific de-identification configuration via CSV mapping
  • Added configurable file tagging with -PASS or -FAIL suffixes
  • Added option to delete original files or create versioned copies via delete-original configuration
  • Added debug logging configuration option

Documentation:

  • Added comprehensive README with usage instructions, examples, and supported file types
  • Added CONTRIBUTING guide with development setup and workflow instructions
  • Added FAQ documentation file
  • Added MIT LICENSE file

Maintenance:

  • Added CI/CD pipeline configuration with .gitlab-ci.yml
  • Added pre-commit hooks for code quality checks including ruff, pytest, yamllint, jsonlint, and hadolint
  • Added poetry for dependency management with python ^3.12 requirement
  • Added flywheel-sdk ==16.16.2, flywheel-gear-toolkit ^0.6.18, and flywheel-migration ^13.8.5 dependencies
  • Added comprehensive test suite with unit tests for main modules, parser, and utilities
  • Added .dockerignore and .gitignore for build optimization
  • Added Dockerfile with python 3.12 base image and security hardening