# PRD: System Wersjonowania Plików CNC (CNC-Sync) – v1.0 ## 1. Cel Projektu (Overview) Stworzenie rozproszonego systemu wersjonowania plików (DVCS) dla środowisk warsztatowych (CAD/CNC). System ma zapewnić spójność plików G-code oraz projektów CAD pomiędzy komputerami projektantów a maszynami CNC w lokalnej sieci LAN, eliminując potrzebę używania pendrive'ów. ## 2. Model Stanów Pliku (State Machine) Każdy plik w śledzonym folderze ("Repozytorium") musi znajdować się w jednym z czterech stanów: * **Untracked**: Plik nowy, nieznany systemowi. * **Tracked**: Plik zsynchronizowany z serwerem (lokalny hash == hash na serwerze). * **Modified**: Plik znany systemowi, ale zmieniony lokalnie. * **Staged**: Plik oznaczony przez użytkownika do wysłania (przygotowany do Commitu). ## 3. Funkcjonalności Kluczowe (Scope) * **Background Watchdog**: Usługa w tle monitorująca operacje: `Create`, `Update`, `Rename`, `Delete`. * **Windows Toasts**: Powiadomienia systemowe pytające użytkownika: "Czy śledzić nowy plik?" po wykryciu operacji Create. * **System Tray App**: Ikona w zasobniku z trzema opcjami: - **Zapisz (Commit UI)**: Okno wyboru plików ze stanu Modified/Staged, pole tekstowe na opis zmian (co i dlaczego). - **Ustawienia: Wybór** folderu repozytorium, nazwa użytkownika. - **Przeglądarka Repozytorium (Explorer)**: - Wgląd w pełną strukturę plików na serwerze. - Podgląd historii wersji dla każdego pliku (kto, kiedy, co zmienił). - Selective Sync: Możliwość zaznaczenia, które pliki/foldery mają być pobrane i utrzymywane lokalnie na danej maszynie. - **Wyjście**: Zamknięcie agenta. * **Synchronizacja**: Informowanie o nowej wersji na serwerze bez automatycznego nadpisywania (użytkownik decyduje, kiedy pobrać aktualizację, zachowując tę samą nazwę pliku). ## 4. Architektura Techniczna * **Serwer (Centralne Repozytorium)** - **Blob Storage**: Katalog z plikami, gdzie nazwa pliku to jego hash. Zapobiega to duplikacji tych samych wersji. - **Metadata DB**: Baza (np. SQLite/PostgreSQL) przechowująca strukturę drzewa plików, historię commitów i powiązania hashy z nazwami plików. * **Klient (Agent)** Instalowany na maszynach i stacjach CAD. Wykorzystuje bibliotekę watchdog do monitorowania systemu plików. Lokalna struktura zarządzania: - Index: Plik (np. JSON lub SQLite) przechowujący aktualny stan "snapshotu" lokalnego folderu (ścieżka, hash, data ostatniej modyfikacji). Służy do szybkiego wykrywania zmian bez liczenia hashy wszystkich plików przy każdym starcie. - Config: Plik konfiguracyjny specyficzny dla maszyny (lista plików do synchronizacji, dane serwera, nazwa użytkownika). - Local Blobs: (Opcjonalnie) tymczasowy bufor dla plików przygotowanych do wysłania (Staged). * **Język**: Python. * **Komunikacja**: Odporna na awarie sieci, wspierająca tryb offline (buforowanie zmian lokalnie). ## 5. Dane i Bezpieczeństwo * **Identyfikacja**: Unikalny username dla każdej instalacji. * **Selective Sync**: Maszyna CNC przy tokarce nie musi posiadać plików dla frezarki. Użytkownik decyduje o subskrypcji plików w Przeglądarce Repozytorium. * **Konflikty**: Brak automatycznego łączenia (merging). System informuje o nowej wersji, użytkownik akceptuje nadpisanie lokalnego pliku wersją z serwera. * **Skala**: Obsługa do ok. 1000 plików w jednym repozytorium.