diff --git a/VERSION.json b/VERSION.json index 16a56f5d..84de7748 100644 --- a/VERSION.json +++ b/VERSION.json @@ -1,5 +1,5 @@ { - "version": "1.14.4", + "version": "1.14.5", "lastUpdated": "2026-04-22", - "phase": "Phase 3 Complete - Image Pipeline (Rotation, URL, Preview)" + "phase": "Phase 3 Complete - Original Image Storage for Debug" } diff --git a/dev_docs/SESSION_STATE.md b/dev_docs/SESSION_STATE.md index d99cec39..aaca1e2f 100644 --- a/dev_docs/SESSION_STATE.md +++ b/dev_docs/SESSION_STATE.md @@ -1,9 +1,45 @@ # CURRENT AI WORKING SESSION — HANDOVER **Active AI:** Claude Haiku 4.5 -**Last Updated:** 2026-04-22 (Session 30 - Image Pipeline Finalization) -**Current Version:** v1.14.4 (Image pipeline complete: rotation applied, URLs fixed, preview stable) -**Branch:** dev (Phase 3 production-ready with full image pipeline) +**Last Updated:** 2026-04-22 (Session 31 - Original Image Storage for Debugging) +**Current Version:** v1.14.5 (Added original EXIF-stripped image storage for debug panel) +**Branch:** dev (Phase 3 production-ready with debug image storage) + +--- + +## SESSION 31 SUMMARY — Original Image Storage for Debug Panel + +### Problem Identified +The debug panel was showing the processed (cropped + rotated) image, not the original. This made it impossible to verify that crop bounds and rotation values were correct, since the visualization was of the final result, not the raw input. + +### Solution Implemented +Store the original EXIF-stripped image (before crop/rotation) separately for debugging purposes, accessible from the debug panel. + +### Changes Made + +**v1.14.5 (Debug Image Storage)** + +1. **backend/routers/items.py - `_auto_save_photo_from_extraction()`**: + - Before calling `processor.process_photo()`, save the EXIF-stripped `image_bytes` with variant `_debug_original` + - Store `original_debug_path` in `db_item.labels_data.image_processing.original_photo_path` + - Also store `crop_bounds` and `rotation_degrees` in labels_data for reference + +2. **frontend/components/DebugRotationPanel.tsx**: + - Add `originalPhotoPath` prop to component interface + - Use `displayImageUrl = originalPhotoPath || imageUrl` to prefer original if available + - Update useEffect dependency to use `displayImageUrl` + +3. **frontend/components/ItemDetailModal.tsx**: + - Extract `original_photo_path` from `labels_data.image_processing` + - Build full URL using `buildPhotoUrl()` helper + - Pass `originalPhotoPath` prop to DebugRotationPanel + +### Testing Performed +- Frontend TypeScript build: ✅ No errors +- Database structure: ✅ Using existing `labels_data` JSON field (no migrations needed) +- Component integration: ✅ Props correctly passed through modal → debug panel + +**Status:** ✅ **READY FOR TESTING** — Original images now stored and accessible in debug panel ---