first prd

This commit is contained in:
2026-03-07 15:42:30 +01:00
commit cbed0cf298
2 changed files with 350 additions and 0 deletions

52
PRD.md Normal file
View File

@@ -0,0 +1,52 @@
# 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.