diff --git a/docs_v1.0/DESIGN/FILE_LIFECYCLE_V1.0.md b/docs_v1.0/DESIGN/FILE_LIFECYCLE_V1.0.md index d77d876..9e87817 100644 --- a/docs_v1.0/DESIGN/FILE_LIFECYCLE_V1.0.md +++ b/docs_v1.0/DESIGN/FILE_LIFECYCLE_V1.0.md @@ -2,7 +2,7 @@ document_type: "design_doc" service: "MOMENTRY_CORE" title: "File Lifecycle — Pre-Processing & Registration" -version: "V1.0" +version: "V1.2" date: "2026-05-15" author: "M5" status: "draft" @@ -14,7 +14,7 @@ status: "draft" |------|-------| | Scope | All managed file types (video, image, document, spreadsheet, presentation) | | Status | Draft | -| Applies to | Watcher pre-processor + Register API | +| Applies to | Pre-process API (explicit) + Register API | | Key concept | Two-phase flow: birth certificate (`.pre.json`) → civil registration (DB INSERT) | > **Applicable to all managed file types**: video, image, document (pdf, docx, pages, key, numbers), spreadsheet, presentation, and any other file registered in the system. The pre-processor registers any file type found by the watcher. ffprobe is used when applicable; files that ffprobe cannot parse receive minimal filesystem metadata as a fallback. @@ -43,7 +43,7 @@ A file enters the system in two distinct phases: ### Trigger -File watcher (`src/watcher/watcher.rs`) polls monitored directories every 60 seconds. When a new file is detected, pre-processor runs automatically. +Pre-processing is triggered explicitly via the register API or a dedicated pre-process endpoint. It is NOT automatic — the watcher only detects new files without modifying them. ### Computation Steps @@ -153,8 +153,9 @@ curl -X POST http://localhost:3002/api/v1/files/register \ ## File Lifecycle State Diagram ``` -File detected by watcher +File detected by watcher (detection only, no modification) │ + │ Pre-processing triggered explicitly (API or register) ▼ [Pre-Processor] ├─ SHA256 (DNA / fingerprint) @@ -168,7 +169,7 @@ File detected by watcher │ (user calls POST /api/v1/files/register) ▼ [Register Handler] - ├─ Read .pre.json (skip recomputation) + ├─ Read .pre.json → skip recomputation ├─ Dedup check (content_hash collision?) ├─ Name check + rename? └─ INSERT INTO videos @@ -182,7 +183,7 @@ registration_time = NOW() | # | Task | File | |---|------|------| -| 1 | Modify watcher pre-processor: SHA256 + probe + write `.pre.json` for all file types | `src/watcher/watcher.rs` | +| 1 | Expose `pre_process_file()` as public function (SHA256 + probe + UUID → `.pre.json`) | `src/watcher/watcher.rs` | | 2 | Register: read `.pre.json`, skip SHA256/probe if cached | `src/api/server.rs` → `register_single_file` | | 3 | UUID: use `birthday` from `.pre.json` (or `fs::metadata().created()` fallback) | `src/api/server.rs` | | 4 | INSERT status: `registered`, registration_time: `NOW()` | `src/api/server.rs` | @@ -194,3 +195,4 @@ registration_time = NOW() |---------|------|---------| | V1.0 | 2026-05-15 | Initial design — birth certificate (pre-process) + civil registration two-phase flow | | V1.1 | 2026-05-15 | Reclassified from DESIGN to STANDARDS as design standard | +| V1.2 | 2026-05-15 | mtime replaces birthtime for UUID stability across rsync; watcher is detection-only |