All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Archived Obsolete Module:
depth_canonicalmodule superseded by ADR-019 backend architecture- Moved to
archive/depth_canonical/with full git history preserved - Replacement:
src/transformation_portal/depth/backends/(implemented in PR #906) - Associated tests moved to
archive/depth_canonical_tests/andarchive/test_depth_canonical_yaml.py - See:
archive/depth_canonical/ARCHIVE_README.mdfor migration path and rationale
- Moved to
- Ingest Contract v1.0.0: Audit-grade provenance and schema validation for RAW/TIFF ingest
- Versioned Schemas: Pydantic models for ProvenanceSidecar (v1.0.0) and IngestManifest (v1.0.0)
- Complete Metadata Extraction: exiftool integration captures all EXIF tags + groups
- Provenance Capture: Toolchain versions, git SHA, CLI args, timestamps, host/OS metadata
- Deterministic Output: Sorted JSON keys, stable serialization (except run_id UUID)
- Schema Validation: Hard-fail on missing fields, type mismatches, unknown fields (drift detection)
- Quality Firewall: 8-bit conversion detection, gamma correction detection, dtype/range validation
- CI Enforcement:
.github/workflows/ingest_contract_validation.ymlgates PRs on violations - Atomic Writes: Temp file + rename pattern prevents corruption
- 30 Comprehensive Tests: Schema validation, drift detection, determinism, gamma/8-bit checks
- Exit Codes: 0=pass, 1=schema_fail, 2=8bit, 3=gamma, 4=drift, 5=other
- Contract Documentation:
docs/apex/ingest_contract.mddefines binding guarantees - Dependencies: Added pydantic>=2.0 to core requirements
- See: Ingest Contract v1.0.0
- CRITICAL: Lux Depth V3 Pipeline Bug Fixes (6 issues):
- Fix #1: Double EXIF rotation in v2_enhance.py - Strip EXIF data after
exif_transpose()to prevent viewers from rotating twice (pixels already rotated + EXIF tag says rotate again) - Fix #2: Dimension mismatch in preprocessing/orchestrator - Resize depth maps back to original dimensions after multiple-of-14 padding/cropping required by Depth Anything V3
- Fix #3: Quadratic complexity in batch_stats.py - Pre-compute median once for outlier detection (O(n²) → O(n log n) for large batches)
- Fix #4: Redundant processing in parallel mode - Pass pre-computed paths to avoid duplicate manifest reads and hash computation (~15-20% I/O reduction)
- Fix #5: Alpha channel safety in v2_enhance.py - Resize alpha channel if V2 processing changes resolution to prevent shape mismatch crashes
- Fix #6: Output directory trap in input_discovery.py - Explicitly exclude output_dir when scanning to prevent processing own outputs
- Impact: Data integrity (EXIF, dimensions, alpha), performance (batch stats, parallel I/O), robustness (output exclusion)
- Tests: 15 new regression tests, all 83 lux_depth_v3 tests passing
- See: CRITICAL_FIXES_SUMMARY.md
- Fix #1: Double EXIF rotation in v2_enhance.py - Strip EXIF data after
-
Performance Ledger v1.7 Upgrade: Major enhancement with backward compatibility
- Optional NumPy Dependency: Pure Python fallback for environments without NumPy
- Bootstrap Confidence Intervals: 95% CI for mean using configurable iterations (default 1000)
- Expanded Exit Codes: 0=success, 1=regression, 2=backend_mismatch, 3=insufficient_data
- Backend Mismatch Detection: Prevents comparing incompatible runs
- Input Validation Bounds: DoS prevention (max 10K bootstrap iterations, min 3 samples)
- Strict Mode:
--strictflag fails on potential regressions (recommended for CI) - Backward Compatibility:
--versiondeprecated but functional (use--baseline-version) - Enhanced Statistics: Added std_sec and bootstrap CI to baseline schema
- Performance: NumPy mode maintains v1.0 speed, pure Python ~50x slower (acceptable for small datasets)
- Tests: 50+ new tests (CLI integration, property-based math validation, benchmarks)
- Migration Guide:
docs/performance_ledger_v1.7_migration.md - See: Performance Ledger v1.7 Verdict
-
Backend Registry Integration (ADR-019): Depth backend orchestration with fallback
- DA3Backend adapter wrapping DA3InferenceEngine for unified interface
- DepthBackendRegistry integration in orchestrator
- Automatic fallback to DA3 when requested backend unavailable
- Backend selection metadata captured in manifests
- License enforcement for research-only backends (Depth Pro)
- CLI flags:
--depth-backend {da3,depth_pro} - Tests: Unit tests for DA3Backend, integration tests for orchestrator
- Docs: README updated with backend selection guide
- See: ADR-019: Backend Registry Integration
-
Performance Ledger (ADR-023 Phase 2): Standalone tool for performance regression detection
- Parse manifests from batch runs and compute runtime statistics
- Compare current runs against versioned baselines
- Detect regressions using configurable thresholds (p95 > 10%, mean > 15%, failure_rate > 0%)
- Generate markdown reports for human review and JSON for CI integration
- Manual baseline governance (no automated updates)
- Tool:
tools/performance_ledger.py - Docs:
docs/performance/README.md
-
Backend Selection Truth (ADR-023 Phase 3): Enhanced transparency and debugging
- Backend selection metadata in manifests (
backend_selectionfield) - Truth-line logging on every batch run (requested vs resolved backend)
- Fallback warnings when requested backend unavailable
- Backward-compatible manifest schema (old manifests still parse)
- Additive-only changes (no enforcement yet, deferred to v2.1.0)
- Backend selection metadata in manifests (
- Drop Python 3.10 Support: Minimum required Python version is now 3.11
- Rationale: Align with ecosystem evolution (scikit-learn 1.8.0 dropped 3.10 support)
- Impact: Users must upgrade to Python 3.11 or later
- See: ADR-020: Drop Python 3.10 Support
- Coverage Quality Gate: Adjusted baseline threshold from 33% to 25% to reflect actual combined coverage
- PR #832 fixed coverage artifact consolidation, revealing accurate combined coverage of 25.44%
- Previous 33% threshold was aspirational, not historical
- Added Coverage Improvement Plan with roadmap to 33% by Q2 2026
- Baseline gate now prevents regression while allowing incremental improvement
- ML Stack Upgrades: Major ML framework and dependency updates
- torch: 2.4.1 → 2.10.0
- torchvision: 0.19.1 → 0.25.0
- scikit-learn: 1.7.2 → 1.8.0
- timm: 0.6.7 → 1.0.24
- diffusers: 0.31.0 → 0.36.0
- transformers: 4.53.0 → 4.57.6
- Benefits: Latest features, performance improvements, security fixes
- Dependencies: Requires Python >=3.11 (see PR #794)
- Validation: Comprehensive smoke tests added for ML stack compatibility
2.0.0 - 2025-11-14
- First stable release with production-ready contracts
- Versioned API contracts (schema-aligned payloads)
- Preset stability taxonomy (stable / canary / experimental)
- Service hardening with
/readyreadiness checks - Context-aware rendering workflows
- Depth Pro integration (experimental)
- Unified depth backend contract
- Improved preset discovery via CLI
- Enhanced documentation and architecture decision records
- Various stability and correctness improvements