Comparison
Compared commit 9ae0851e134af274651b646519b8a7aaeee05f05 with the previous GitHub release baseline 1.3.1 at b0511213dcbccc36ad29ed9869b23ad104216b67.
Decoder and DIMSE changes
- Corrected parser state handling after skipped sequence values. When a header parser skips a complete sequence, the tag parser now explicitly clears its sequence-tracking state before continuing. This fixes cases where subsequent scalar elements, including image dimensions, could be interpreted under stale sequence state.
- Added a regression test for undefined-length sequence handling before dimension tags. The fixture exercises rows, columns, samples-per-pixel, photometric interpretation, and pixel data after an undefined-length sequence.
- Corrected DIMSE PDV control-bit encoding and decoding. Command PDVs now use bit
0x01, and last-fragment PDVs use bit0x02consistently in both encoder and decoder paths. - Updated C-FIND, C-MOVE, and C-GET request command sets to populate the affected SOP Class UID with the query model UID. This aligns the query/retrieve command construction with the command field semantics used by the DIMSE service tests.
- Annotated Storage SCP progress callbacks as
@Sendablefor the association handler, store path, and server start callback. Callers that capture mutable non-Sendable state in these progress closures may need to adapt that state before compiling with stricter concurrency checking.
dicomtool inspect privacy behavior
dicomtool inspectno longer emitsPatientIDin default JSON/text metadata output.- Explicit
--tags PatientIDrequests still acknowledge the requested tag name, but the value is emitted as(redacted)rather than exposing the identifier. - Added command tests that capture stdout and verify both default omission and explicit-tag redaction.
Release-gate resources and fixture organization
- Moved release-gate manifests and policy documents from the public-facing
Roadmaplocation intoTests/DicomCoreTests/Resources/ReleaseGates. - Renamed the parity fixture surface from
DCMTKParitytoDecoderParityand moved parity DICOM files underTests/DicomCoreTests/Fixtures/DecoderParity. - Added structured release-gate resources for clinical parity fixtures, performance budgets, optional runtime fixtures, and public API documentation policy.
- Removed the internal implementation-gap audit from the public repository tree; public tests now depend only on releasable resource manifests.
- Removed standalone JPEG lossless fixture download/validation scripts from the test tree and kept the conformance behavior covered through the Swift test target.
Documentation and maintenance
- Updated benchmark, getting started, troubleshooting, migration, and conformance documentation to match the current test-resource layout and support scripts.
- Simplified interop smoke-script path handling and package-directory resolution.
- Added and updated tests around header parsing, PDV/DIMSE behavior, Storage SCP progress typing, parity fixtures, documentation policy, and inspect-command redaction.
Validation
Validation performed before publishing this release:
swift test --package-path DICOM-Decoder- Focused documentation/release-gate tests for DICOMWeb, documentation reconciliation, and public API documentation policy
- Public-tree audit confirming no
IMPLEMENTATION_GAPS.mdorRoadmapcontent remains in the public DICOM-Decoder checkout
Full comparison: b051121...9ae0851