Commit Graph

99 Commits

Author SHA1 Message Date
Christian Krakau-Louis 9a2c2d20b1 feat(duplication): implement duplicate file handling and detection across processing steps 2026-02-12 02:38:00 +01:00
Christian Krakau-Louis 70757e5644 feat(step-timeout): add automatic recovery for stalled processing steps
- Implement step timeout detection to prevent files from getting stuck in 'pending' state
- Add monitor_stalled_steps periodic task running every minute (Celery Beat)
- Automatically mark in-progress steps as failed if they exceed timeout (default: 10 minutes)
- Add step_timeout configuration setting (default: 600 seconds)
- Recover stalled steps with error message indicating when timeout was triggered
- Fix duplicate check to exclude self-comparison (file not duplicate of itself)

When processing crashes or hangs:
1. Worker detects stalled steps (in_progress for >10 minutes)
2. Marks them as failed with timeout error message
3. Updates UI to show failure status
4. Allows file to be retried or handled by user

This prevents files from being indefinitely stuck in processing state and provides
visibility into what went wrong.
2026-02-12 02:38:00 +01:00
Christian Krakau-Louis 7bbd095152 fix(deduplication): handle UNIQUE constraint violation for duplicate files
- Remove duplicate record creation to avoid UNIQUE constraint on filehash
- When duplicate detected, return original file_id instead of creating new record
- Avoids sqlite3.IntegrityError: UNIQUE constraint failed
- Simpler approach: duplicates not tracked as separate records, just rejected
- Revert filehash column back to NOT NULL (required for original files)
- Fixes error: (sqlite3.IntegrityError) UNIQUE constraint failed: files.filehash
2026-02-12 02:38:00 +01:00
Christian Krakau-Louis 4c11cfd6dd feat(deduplication): implement configurable duplicate file detection
- Add enable_deduplication and show_deduplication_step config options
- Rename hash_file step to check_for_duplicates
- Make deduplication step conditional based on configuration
- Add is_duplicate and duplicate_of_id fields to FileRecord model
- Create database migration for new deduplication fields
- Update process_document task to log deduplication results
- Update step visualization to show/hide step based on config
- Update status calculations to include deduplication step conditionally
- Default: deduplication enabled, step displayed
- Can be configured to hide from UI while still processing
2026-02-12 02:38:00 +01:00
Christian Krakau-Louis 83c65f3c40 feat: enhance processing status tracking and UI display for file details 2026-02-12 01:07:22 +01:00
copilot-swe-agent[bot] 952e27b339 test: add tests for storage reorganization features
- Add tests for get_unique_filepath_with_counter collision handling
- Add tests for immutable original storage
- Add tests for metadata augmentation with file paths
- Add tests for force_cloud_ocr parameter
- Verify existing process_document tests still pass

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 20:13:17 +00:00
copilot-swe-agent[bot] 73a0222e56 feat(storage): implement immutable original/processed file storage and collision handling
- Add original_file_path and processed_file_path columns to FileRecord model
- Create database migration for new fields
- Implement get_unique_filepath_with_counter() with -0001 suffix format
- Update process_document to save immutable copy to /workdir/original
- Add force_cloud_ocr parameter to process_document for forced OCR
- Update embed_metadata to use new collision handling
- Update metadata JSON to include file path references
- Add /files/{file_id}/reprocess-with-cloud-ocr API endpoint
- Update processed_file_path in database during embedding

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 20:10:19 +00:00
copilot-swe-agent[bot] 2b2394f858 fix: pass task_id to check_page_rotation helper for consistent log prefixing
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 10:15:08 +00:00
copilot-swe-agent[bot] 6f286e37b3 feat(tasks): add detailed logging to upload_with_rclone task functions
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 10:06:51 +00:00
copilot-swe-agent[bot] 14eacc7c23 feat(tasks): add detailed logging to rotate_pdf_pages task
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 10:02:25 +00:00
copilot-swe-agent[bot] 4153c5bbcb feat(tasks): add detailed logging to refine_text_with_gpt task
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 09:57:46 +00:00
copilot-swe-agent[bot] acec9954a0 feat(tasks): add detailed logging to Azure Document Intelligence task
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 09:54:53 +00:00
copilot-swe-agent[bot] b18f5ee13c feat(ui): add verbose worker log detail to processing history on file detail page
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 09:06:30 +00:00
copilot-swe-agent[bot] f7799e409d fix(tasks): prevent filename overwrite in extract_metadata_with_gpt and fix embed retry logic
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-11 08:59:27 +00:00
copilot-swe-agent[bot] 11c7d15a90 fix(tasks): skip duplicate check when reprocessing and enable retry from failed pipeline step
- Add file_id parameter to process_document to skip duplicate hash check on reprocess
- Pass file_id from reprocess_single_file and bulk_reprocess_files endpoints
- Extend retry-subtask endpoint to support pipeline steps (process_document,
  process_with_azure_document_intelligence, extract_metadata_with_gpt,
  embed_metadata_into_pdf) in addition to upload tasks
- Add retry button for failed main pipeline steps in file detail UI
- Add comprehensive tests for reprocessing and pipeline step retry

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 21:09:53 +00:00
copilot-swe-agent[bot] 9a89f70cf4 fix: change SFTP host key verification default to secure (False)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 15:39:23 +00:00
copilot-swe-agent[bot] 742b4e2e8c refactor: improve code quality and documentation clarity
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 15:04:48 +00:00
copilot-swe-agent[bot] 6aeb466491 fix: address code review feedback for custom fields
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 15:02:05 +00:00
copilot-swe-agent[bot] 327244c43a feat(paperless): add flexible multi-field custom fields mapping
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 15:00:28 +00:00
copilot-swe-agent[bot] eab75b89db feat(paperless): add support for setting absender custom field
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 14:54:42 +00:00
copilot-swe-agent[bot] a3d0af2efc fix(security): address code review feedback on validation logic
- Improve comment documentation for defense-in-depth validation
- Fix test assertion to properly validate basename sanitization
- Note regex pattern duplication for future refactoring

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 10:28:39 +00:00
copilot-swe-agent[bot] 489aa67a13 fix(security): remediate path traversal vulnerabilities in file operations
- Fix critical vulnerability: sanitize GPT metadata filename before use
- Fix insecure string-based path validation with pathlib methods
- Add validation for GPT-extracted filenames
- Add comprehensive security test suite (24 tests)
- Document all findings in SECURITY_AUDIT.md

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-10 10:26:42 +00:00
copilot-swe-agent[bot] bb155501b4 fix(tasks): apply Black formatting to extract_metadata_with_gpt.py and rotate_pdf_pages.py
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-08 18:21:45 +00:00
copilot-swe-agent[bot] d08040ac4a style: fix all flake8 linter errors across app/ directory
- Run Black formatter and isort on all app/ files
- Remove unused imports (F401) across multiple files
- Add # noqa: F401 for intentional re-exports in celery_worker.py,
  tasks/__init__.py, utils.py, frontend.py, views/base.py
- Fix f-strings without placeholders (F541) in azure.py, notification.py,
  check_credentials.py, upload_to_onedrive.py, settings.py
- Fix bare except (E722) in upload_to_sftp.py
- Fix block comment format (E265) in models.py
- Move imports to top of file to fix E402 in celery_app.py, celery_worker.py
- Fix line-too-long (E501) by wrapping strings in multiple files
- Remove unused variable (F841) in upload_to_nextcloud.py

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-08 17:42:33 +00:00
copilot-swe-agent[bot] b97c80d6bd fix: address code review feedback on security and type hints
- Use Optional[int] type hint for timeout parameter in oauth_helper
- Replace bare Exception with specific ValueError and JSONDecodeError
- Strengthen rclone remote name validation (must start with alphanumeric)
- Fix path traversal validation to check against workdir for absolute paths
- Add comprehensive comments for security validations

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-08 08:31:21 +00:00
copilot-swe-agent[bot] d2eb9846d3 style: fix linting issues and remove unused imports
- Remove unused imports from all modified files
- Fix flake8 violations (unused variables, f-strings without placeholders)
- Apply Black formatting consistently
- Shorten long line in google_drive.py

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-08 08:29:38 +00:00
copilot-swe-agent[bot] 551b23a80c fix(security): reduce code duplication and fix security issues in OAuth and file handling
- Extract common OAuth token exchange logic to shared utility (oauth_helper.py)
- Remove sensitive data logging (client_secret, authorization codes)
- Add path traversal validation in resolve_file_path()
- Add input validation for rclone destination parameter
- Replace bare Exception catches with specific exception types
- Use RuntimeError instead of generic Exception for better error handling

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-08 08:26:10 +00:00
copilot-swe-agent[bot] 90d69979dc Fix S3 upload error: Pass file_id as keyword argument in Celery tasks
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 21:56:38 +00:00
copilot-swe-agent[bot] 7fc2703d90 Increase HTTP request timeout to 120s for large file processing (up to 1GB PDFs)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 19:39:57 +00:00
copilot-swe-agent[bot] edd1acb3a1 Fix all high and medium severity security issues found by Bandit
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 19:35:40 +00:00
copilot-swe-agent[bot] dabd9a944c Final review fixes: consistent parameter order and improved test documentation
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:59:42 +00:00
copilot-swe-agent[bot] e20c88dbc7 Address code review feedback: improve variable naming and parameter order
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:58:08 +00:00
copilot-swe-agent[bot] 22a14431b3 Standardize upload task signatures to accept file_id parameter
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:55:30 +00:00
copilot-swe-agent[bot] 7d24b7c668 Apply code formatting and fix linting issues
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:37:50 +00:00
copilot-swe-agent[bot] 2db58afedf Add original_filename parameter to preserve user's filename
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:36:36 +00:00
copilot-swe-agent[bot] 3f1006b035 Code review feedback: improve readability of S3 upload call
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:28:04 +00:00
copilot-swe-agent[bot] c0e049ae96 Fix OneDrive and S3 upload signature - add file_id parameter
- Updated upload_to_onedrive to accept file_id parameter with bind=True
- Updated upload_to_s3 to accept file_id parameter with bind=True
- Added proper logging with task_id and file_id tracking
- Added comprehensive unit tests for both functions
- All tests passing (8/8)

Fixes #99 and #100

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 17:25:23 +00:00
copilot-swe-agent[bot] 850afd26bd Fix DetachedInstanceError in process_document task by storing file_id before session closes
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 15:59:39 +00:00
Christian Krakau-Louis e45eb04366 Merge branch 'main' into copilot/add-file-processing-notifications 2026-02-07 15:37:17 +01:00
Christian Krakau-Louis e8c091897a Merge pull request #76 from christianlouis/copilot/add-processing-logging
Add comprehensive logging for each processing step with frontend visibility
2026-02-07 15:06:57 +01:00
copilot-swe-agent[bot] 2189802ee8 Add database logging to upload tasks
- Add logging to upload_to_dropbox, upload_to_paperless, upload_to_nextcloud
- Pass file_id through send_to_all to upload tasks
- Log upload progress, success, and failures with context

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-07 14:02:29 +00:00
copilot-swe-agent[bot] adb0b2329e Address code review feedback
- Replace LIKE queries with exact matches in fallback lookups
- Add comments clarifying fallback queries should not be needed
- Fix duplicate comment in embed_metadata_into_pdf
- Add missing file_id parameter to log_task_progress call

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:35:30 +00:00
copilot-swe-agent[bot] 74680c8849 Fix file_id propagation through task chain
- Pass file_id as parameter through all task chains
- Update process_document, extract_metadata_with_gpt, embed_metadata_into_pdf, finalize_document_storage, send_to_all_destinations, rotate_pdf_pages, and process_with_azure_document_intelligence
- Remove unreliable LIKE queries, use explicit file_id passing instead

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:34:01 +00:00
copilot-swe-agent[bot] 9c4cf3d70e Fix notification message to accurately reflect async upload timing
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:33:16 +00:00
copilot-swe-agent[bot] 8be5b844c3 Add file processing notifications feature
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:31:48 +00:00
copilot-swe-agent[bot] 1903dc5bcd Add comprehensive processing logging system
- Added database logging to all major processing tasks
- Created API endpoints for retrieving processing logs
- Updated frontend to display processing logs per file
- Logging includes: process_document, convert_to_pdf, extract_metadata_with_gpt, embed_metadata_into_pdf, finalize_document_storage, send_to_all_destinations

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:30:18 +00:00
copilot-swe-agent[bot] 566079e5e5 Add clarifying comments explaining the use of constants
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:24:58 +00:00
copilot-swe-agent[bot] 91f851238a Replace hardcoded 'tmp' strings with constants in embed_metadata_into_pdf.py
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:23:14 +00:00
copilot-swe-agent[bot] b17bba225f Address code review feedback on temporary file handling
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-01 14:05:51 +00:00
copilot-swe-agent[bot] 859a0825d0 Fix hardcoded temporary directory security issue (Issue #47)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-01 14:05:08 +00:00