Files
DuckGit/PRD.md
2026-03-07 15:42:30 +01:00

52 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.