Wydania

Historia zmian

# EvidLock - dziennik zmian

Ten plik jest dziennikiem zmian aplikacji EvidLock. Od tego momentu nowe poprawki powinny byc dopisywane chronologicznie z data, godzina, numerem kompilacji, galezia Git i commitem.

Changelog zawiera tylko zmiany funkcjonalne i techniczne dotyczace aplikacji EvidLock.

## 2026-08-01 - domknięcie zabezpieczeń offline FULL-DEMO

- Potwierdzono i objęto testami maszynowy stan instalatora: DPAPI LocalMachine,
  dwie kopie w ProgramData, kopię i kotwicę rewizji w HKLM oraz ACL usługi
  LocalSystem. Reinstalacja nie usuwa tych danych.
- Dodano testy cofnięcia obu kopii, naprawy pojedynczej uszkodzonej kopii oraz
  odrzucenia kodu bezterminowego wygenerowanego dla innego komputera.
- Portable serializuje aktualizację licznika nazwanym mutexem między procesami
  modułów i ponawia atomowy zapis przy chwilowej blokadzie przez antywirusa.
- Buildy aplikacji, instalatora i generatora kontrolują rozdzielenie sekretów.
  Prywatne klucze Ed25519 i pepper serwera nie mogą trafić do klienta. Plik
  sekretów otrzymuje ograniczone ACL, a wszystkie sekrety muszą być unikatowe.
- Aktywacja serwerowa pozostaje gotowa, ale domyślnie wyłączona konfiguracją;
  klient dopuszcza wyłącznie HTTPS i host z białej listy.

## 2026-08-01 - niezależne uchwyty Od/Do w ELPlayerze

- Rozdzielono biały uchwyt pozycji odtwarzania, zielony znacznik `Od` i
  czerwony znacznik `Do` na głównej osi czasu oraz nakładce obrazu.
- Znaczniki zakresu mają pierwszeństwo trafienia. Ich przeciąganie nie
  przewija filmu ani nie zmienia bieżącej klatki.
- Po aktywowaniu pola `Od` albo `Do` kliknięcie głównego suwaka zapisuje
  wskazaną granicę i przywraca niezmienioną pozycję odtwarzania.
- Każdy uchwyt pokazuje po najechaniu dymek z rolą, dokładnym czasem i opisem
  działania. Zmiana znajduje się we wspólnym kodzie SMALL, FULL i FULL-DEMO.

## 2026-08-01 - opis Analizy sprawy i skórki ELCommandera

- Zweryfikowano działanie nowego okna `Analiza sprawy`: wspólną bazę SQLite,
  skany sygnatur, zbiory hashy, YARA i Sleuth Kit, anulowanie, wyszukiwanie,
  oznaczanie oraz raporty HTML/JSON/XLSX z sumami SHA-256.
- Rozszerzono opis w samym oknie oraz dodano pełne rozdziały do README,
  dokumentacji technicznej i wbudowanego katalogu funkcji.
- ELCommander otrzymał w nagłówku wybór skórek Systemowa, Silver, Green, Blue,
  Ciemny, Black i Prosta — ten sam zestaw co główny program.
- Zmiana skórki przestylowuje otwarte okno, tabele ttk i aktywne panele bez
  utraty ścieżek. Wybór ELCommandera jest zapisywany osobno pod kluczem
  `elcommander_ui_skin` i nie zmienia skórki głównej aplikacji ani odwrotnie.
- Zmiana wyglądu jest blokowana podczas operacji plikowej albo zabezpieczania,
  aby nie zakłócić pracy w toku.
- Funkcja korzysta ze wspólnego kodu i jest dostępna we wszystkich profilach
  SMALL, FULL i FULL-DEMO, portable oraz instalacyjnych.

## 2026-07-30 - instalacja i uruchomienie Docker Desktop z aplikacji

- Dodano moduł `Docker Desktop dla Plaso` z przyciskiem, paskiem postępu i
  dziennikiem na żywo. Panel jest dostępny w katalogu narzędzi (grupa
  `Analiza`) oraz bezpośrednio z kreatora `Utwórz oś Plaso`.
- Panel obsługuje pełną ścieżkę: pobranie instalatora, kontrolę podpisu,
  instalację z UAC, uruchomienie Docker Desktop i oczekiwanie na gotowość
  demona z odliczaniem pozostałego czasu.
- Instalator jest pobierany wyłącznie z `https://desktop.docker.com`, a wersja
  pakietu odpowiada architekturze stanowiska (amd64 albo arm64). Adres i każde
  przekierowanie są sprawdzane; przekierowanie poza domenę Docker przerywa
  pobieranie i usuwa plik częściowy.
- Docker Inc. nie publikuje sumy kontrolnej bieżącego instalatora Windows,
  dlatego zaufanie opiera się na podpisie Authenticode wystawionym dla
  Docker Inc. Podpis nieprawidłowy albo obcego wydawcy blokuje instalację.
  SHA-256 pobranego pliku trafia do dziennika sprawy jako dowód tożsamości
  pakietu, a nie jako kontrola wobec wartości oczekiwanej.
- Operator może wskazać własny instalator EXE zamiast pobierania; plik jest
  walidowany (rozmiar, nagłówek MZ) i kopiowany do katalogu tymczasowego.
  Wydania z dołączonym instalatorem w `tools\docker` pomijają pobieranie.
- Instalacja cicha `--quiet --accept-license` wymaga jawnego zaznaczenia zgody
  na warunki licencji przez operatora. Bez tego zaznaczenia uruchamiany jest
  instalator interaktywny, który sam przedstawia warunki Docker Inc.;
  aplikacja nigdy nie akceptuje licencji samodzielnie.
- Kod wyjścia 3010 jest rozpoznawany jako poprawne zakończenie z wymaganym
  restartem, a anulowanie okna UAC jest odróżniane od błędu Windows.
- Sonda `docker version` i pierwszy odczyt stanu działają poza wątkiem Tk, więc
  otwarcie panelu nie blokuje interfejsu.
- Do `platform/winapi.py` trafił wspólny, podnoszony przez UAC start procesu z
  oczekiwaniem na kod wyjścia oraz odczyt podpisu Authenticode.
- Funkcja jest identyczna w wydaniach SMALL i FULL; instalator Docker Desktop
  nie jest osadzany w EXE ani w pakiecie instalacyjnym EvidLock.
- Dodano 30 testów: źródła pobierania i odrzucanie niezaufanych hostów,
  postęp i sprzątanie po anulowaniu, walidacja pliku, argumenty instalacji i
  akceptacja licencji, rozpoznawanie wydawcy, diagnostyka i oczekiwanie na
  demona oraz kontrola nazw wymaganych przez `bind_mixin`.

## 2026-07-30 - automatyczne tworzenie osi Plaso

- Dodano przycisk `Utwórz oś Plaso` w module `Oś czasu i graf dowodów`.
- Kreator przyjmuje obrazy E01/RAW/DD i inne pliki albo katalog, a następnie
  automatycznie uruchamia `log2timeline.py` i eksport `psort.py` JSON Lines
  przez oficjalny kontener `log2timeline/plaso`.
- Funkcja jest wdrożona we wspólnym kodzie portable SMALL/FULL oraz
  instalatorów SMALL/FULL. Docker, Plaso i obraz kontenera nie są osadzane w
  EXE; wymagany jest działający Docker Desktop na stanowisku analitycznym.
- Dodano wykrywanie klienta Docker w `PATH` i typowej lokalizacji Windows,
  osobne rozpoznawanie wyłączonego demona oraz automatyczne
  `docker pull log2timeline/plaso`, gdy obrazu nie ma lokalnie.
- Źródło jest montowane w Docker wyłącznie do odczytu, a wyniki trafiają do
  oddzielnego katalogu wskazanego przez operatora. Polecenia są przekazywane
  bez `shell=True`.
- Kolektor działa z jawnymi opcjami `--partitions all`, `--vss_stores all` i
  `--unattended`, aby objąć wykryte partycje/VSS i nie zawiesić GUI na pytaniu
  interaktywnym.
- Po zakończeniu JSON Lines jest automatycznie importowany do grafu EvidLock.
- Dodano dziennik na żywo, anulowanie procesu i kontenera, wykrywanie Docker
  Desktop, automatyczne pobranie brakującego obrazu oraz czytelne błędy.
- Każdy przebieg otrzymuje unikalne nazwy kontenerów kolektora i eksportera.
  Anulowanie kończy tylko właściwy proces i wykonuje `docker rm -f` dla
  zapisanego identyfikatora.
- Wyniki obejmują `.plaso`, `.jsonl`, log, manifest przebiegu i SHA-256 obu
  plików danych. Manifest zapisuje wersję Docker, czasy UTC, ścieżki, rozmiary,
  tryb tylko do odczytu oraz dokładne listy argumentów.
- Importer JSON Lines/NDJSON/JSON działa także bez Docker, zachowuje SHA-256
  eksportu, parser, identyfikator rekordu, źródło, opis czasu i ścieżkę
  artefaktu, a rekordom nadaje deterministyczne identyfikatory `PLASO-...`.
- Udokumentowano brak interaktywnej obsługi zaszyfrowanych woluminów,
  możliwość wielogodzinnej pracy, duże wymagania dyskowe i konieczność
  zachowania obrazu źródłowego oraz łańcucha pieczy.
- Test skompilowanego okna wymaga teraz zarówno `Importuj Plaso`, jak i
  `Utwórz oś Plaso`, otwiera kreator i sprawdza jego kontrolki.
- Dodano testy budowania bezpiecznych argumentów Docker, walidacji katalogów,
  manifestu, SHA-256 i diagnostyki demona. Pełna regresja: 1085 testów OK,
  2 pominięte.
- Przebudowano i sprawdzono portable SMALL/FULL oraz instalatory SMALL/FULL;
  sumy SHA-256 wszystkich czterech artefaktów były zgodne.
- Rozbudowano README i dokumentację techniczną o kompletną instrukcję
  wdrożenia: wymagania Docker Desktop, wariant offline `docker save/load`,
  architekturę usługi i GUI, argumenty procesów, pliki wynikowe, model
  bezpieczeństwa, diagnostykę, ograniczenia oraz listę kontroli stanowiska.

## 2026-07-30 - opcjonalne otwieranie dokumentacji po instalacji

- Końcowa strona instalatora SMALL/FULL udostępnia niezależne opcje
  `Otwórz README` i `Otwórz changelog`.
- Obie opcje są domyślnie wyłączone; użytkownik może zaznaczyć jedną, obie albo
  żadną.
- Dokumenty są otwierane po zakończeniu instalacji, aktualizacji lub naprawy
  przy użyciu domyślnej aplikacji zalogowanego użytkownika.
- Opcje są pomijane w trybie cichym.

## 2026-07-30 - import Plaso we wszystkich wydaniach

- Dodano przycisk `Importuj Plaso` w module `Oś czasu i graf dowodów`.
- Importer działa bez dodatkowych zależności w instalatorach SMALL/FULL oraz
  wydaniach portable SMALL/FULL.
- Obsługiwany jest eksport `psort` JSON Lines (`.jsonl`, `.ndjson`) oraz JSON.
  Wskazanie bazy `.plaso` pokazuje gotowe polecenie eksportu przez `psort.py`.
- Rekordy Plaso są normalizowane do osi EvidLock z deterministycznym
  identyfikatorem, czasem UTC, źródłem, parserem, ścieżką artefaktu i
  proweniencją zawierającą SHA-256 pliku eksportu.
- Usunięto niedziałający adapter kończący się `NotImplementedError`.

## 2026-07-30 - komponentowy instalator SMALL

- Instalator `EvidLockV2_SMALL_SETUP.exe` udostępnia trzy profile:
  `Kompaktowa`, `Pełna` oraz `Niestandardowa`.
- Profil pełny zaznacza wszystkie dostępne komponenty, a niestandardowy pozwala
  osobno wybrać FFmpeg, Tesseract OCR, TShark/Wireshark, Whisper, 7-Zip,
  ImDisk oraz Volatility z WinPmem.
- Duże narzędzia nie są osadzane w bazowym instalatorze SMALL. Skrypt budowania
  tworzy osobne archiwa ZIP, sumy SHA-256 i manifest `components.json`,
  przygotowane do publikacji na `updates.evidlock.pl`.
- Instalator pobiera wyłącznie zaznaczone paczki przez HTTPS, weryfikuje SHA-256
  przed rozpakowaniem i zapisuje wersje zainstalowanych komponentów.
- Dodano alternatywne źródło `Zainstaluj z pakietu offline`. Build tworzy jeden
  plik `EvidLockV2_SMALL_COMPONENTS_OFFLINE_<wersja>.zip`, który można pobrać
  osobno, przenieść na komputer bez Internetu i wskazać w kreatorze.
- Pakiet zbiorczy nie omija kontroli integralności: po jego rozpakowaniu
  instalator ponownie sprawdza przypięty SHA-256 każdego wybranego komponentu.
- README opisuje krok po kroku wybór profilu, źródła offline i wskazanie paczki
  przez przycisk `Przeglądaj`; archiwum nie wymaga wcześniejszego rozpakowania.
- Wybranie ImDisk uruchamia po pobraniu jego instalator sterownika; instalator
  pozostaje także dostępny w katalogu narzędzi EvidLock.
- Naprawiono generowanie dokumentacji i raportów przez wersję instalacyjną.
  Bez wybranej sprawy lub materiału katalogiem roboczym jest zawsze
  `%LOCALAPPDATA%\EvidLock\workspace`, niezależnie od bieżącego katalogu procesu
  i dostępności zmiennych środowiskowych `ProgramFiles`.

## 2026-07-28 - niezależny cykl życia modułów wersji instalacyjnej

- Naprawiono przygotowanie pełnego repozytorium na drugim komputerze: instrukcja
  uwzględnia Git LFS, właściwy katalog po `git clone`, Python 3.13/3.14,
  kontrolę kompletności modelu Whisper oraz aktualne katalogi buildów.
- `setup_second_workstation.ps1` pobiera i kontroluje Git LFS, sprawdza repo,
  zależności, składnię i test dymny oraz udostępnia tryby `-CheckOnly` i
  `-Repair`.
- `setup_dev.ps1` nie korzysta już ze sztywnej ścieżki `C:\Python314`; wybiera
  obsługiwany 64-bitowy Python i potrafi bezpiecznie odtworzyć lokalne `.venv`.
- Przyspieszono start wersji instalacyjnej: aplikacja jest teraz pakowana przez
  PyInstaller jako `onedir`, więc biblioteki są rozpakowywane jeden raz podczas
  instalacji zamiast przy każdym uruchomieniu programu lub modułu.
- Portable pozostaje pojedynczym plikiem `onefile` i zachowuje dotychczasową
  przenośność oraz oddzielne katalogi wynikowe.
- Samodzielny ELPlayer, ELView, ELCommander i ELCarver korzystają z lekkiego
  hosta GUI. Nie budują już niewidocznego dashboardu głównego EvidLock przed
  pokazaniem własnego okna.
- Instalator kompresuje katalog `onedir` algorytmem LZMA2; po instalacji
  biblioteki pozostają rozpakowane, więc kompresja paczki nie spowalnia startu.
- Po wykryciu istniejącej instalacji instalator pokazuje wybór: aktualizacja,
  naprawa/ponowna instalacja albo czysta instalacja.
- Czysta instalacja wymaga dodatkowego potwierdzenia i usuwa wyłącznie stare
  pliki z katalogu programu. Dane w `%LOCALAPPDATA%\EvidLock` pozostają
  zachowane, a instalację można przerwać standardowym przyciskiem `Anuluj`.
- Naprawiono błąd potwierdzenia czystej instalacji, które odwoływało się do
  `{app}` przed zainicjalizowaniem katalogu przez kreator. Komunikat korzysta
  teraz z `WizardDirValue` i pokazuje rzeczywistą ścieżkę danych użytkownika.
- Naprawiono konflikt dwóch komunikatów modalnych, gdy w trakcie dialogu ELView
  kończyło się asynchroniczne nagrywanie MP4. Nowy komunikat jest teraz
  umieszczany nad aktywnym dialogiem, a poprzednia blokada okna jest potem
  prawidłowo przywracana.
- Zakończenie nagrywania całego pulpitu w samodzielnym ELView, ELPlayer,
  ELCommander lub ELCarver nie pokazuje już technicznego głównego okna
  EvidLock działającego jako ukryty host Tk.
- Naprawiono otwieranie systemowych łączy zgodności profilu Windows, takich
  jak `Dokumenty\Moje obrazy`. ELCommander rozpoznaje teraz reparse point,
  przechodzi do właściwego katalogu `Obrazy` i nie proponuje nieskutecznego UAC.
- Usunięto nakładanie się komunikatu o aktywnym trybie administratora z oknem
  samodzielnego modułu po UAC, które mogło zablokować obsługę okna.
- W wersji zainstalowanej domyślny katalog roboczy bez wybranej sprawy lub
  materiału jest tworzony w `%LOCALAPPDATA%\EvidLock\workspace`, dzięki czemu
  raporty nie są zapisywane w chronionym katalogu `Program Files`.
- Naprawiono ujawnianie głównego okna EvidLock po zamknięciu komunikatu
  wyświetlonego przez samodzielnie uruchomiony ELCommander, ELPlayer, ELView
  albo ELCarver.
- Ukryte główne okno Tk jest teraz oznaczane jako techniczny host procesu
  modułu i nie może zostać przywrócone przez wspólną obsługę dialogów.
- Zamknięcie komunikatu o zablokowanej operacji w trybie dowodowym nie
  przełącza już fokusu na główny EvidLock i nie tworzy wizualnej zależności
  pomiędzy samodzielnym modułem a głównym interfejsem.
- Przełączanie do i z trybu administratora zachowuje parametr `--module`,
  dzięki czemu moduł po operacji UAC uruchamia się ponownie jako ten sam moduł,
  a nie jako główna aplikacja.
- Dodano testy regresyjne dla wszystkich czterech samodzielnych modułów,
  widoczności ukrytego hosta, zwykłego uruchomienia aplikacji i argumentów UAC.
- Zbudowano poprawione wydanie instalacyjne FULL. Istniejące pliki portable nie
  zostały nadpisane; otrzymają poprawkę dopiero po ponownej kompilacji swoich
  wariantów.

## 2026-07-28 - instalatory, samodzielne moduły i przygotowanie aktualizacji

- Dodano osobne skrypty `build_installer_SMALL.ps1` i
  `build_installer_FULL.ps1`, które korzystają z Inno Setup 6 i nie nadpisują
  katalogów wersji portable.
- Dodano tryb `--module` dla ELPlayer, ELView, ELCommander i ELCarver oraz
  osobny mutex dla głównego okna i każdego samodzielnego modułu.
- Instalator tworzy komplet skrótów w menu Start i opcjonalny skrót głównego
  EvidLock na pulpicie.
- Dodano niezależny `EvidLockUpdater.exe`, walidację HTTPS, hosta, profilu,
  rozmiaru, SHA-256 i podpisu Authenticode pobranego instalatora.
- Każdy instalator generuje plik `latest.json` dla profilu SMALL albo FULL.
  Aktualizacje pozostają wyłączone do czasu uruchomienia podpisanych wydań na
  `updates.evidlock.pl`.
- Kopia Google Drive rozpoznaje teraz także wydania
  `releases/installer/{small,full}`.
- Generator manifestu wydania wybiera profil na podstawie jawnej nazwy SMALL
  lub FULL zamiast niepoprawnego progu rozmiaru 500 MB.

## 2026-07-28 - profile SMALL i FULL

- Zmieniono nazwy profili builda z `mniejsza/pelna` na `small/full`.
- Skrypty mają teraz nazwy `build_exe_SMALL.ps1` oraz `build_exe_FULL.ps1`.
- Pliki wynikowe nazywają się `EvidLockV2_SMALL_PORTABLE.exe` i `EvidLockV2_FULL_PORTABLE.exe`.
- Katalogi builda, dystrybucji, wydań, instalatorów i backupu używają wyłącznie segmentów `small` oraz `full`.

## 2026-07-28 - osobne katalogi wersji portable i instalacyjnych

- Buildy portable mniejszy i pełny zapisują pliki niezależnie w `build/portable`, `dist/portable` oraz `releases/portable`.
- Pliki wynikowe otrzymały jednoznaczne nazwy `EvidLockV2_MNIEJSZA_PORTABLE.exe` i `EvidLockV2_PELNA_PORTABLE.exe`.
- Paczki profesjonalnego wydania trafiają do `releases/portable/<profil>/packages`.
- Backup Google Drive zachowuje układ `wydania/portable/<profil>` i przygotowuje osobne katalogi `wydania/instalator/<profil>`.
- Przyszły instalator będzie używał równoległych katalogów `build`, `dist` i `releases/installer`, bez nadpisywania portable.

## 2026-07-28 - CI i profesjonalne paczki wydań

- Dodano GitHub Actions dla pełnych testów na Pythonie 3.13/3.14, kontroli składni, Ruff, Bandit, `pip-audit`, `detect-secrets` i walidacji obu profili builda.
- Kontrola repozytorium blokuje artefakty builda i pliki większe niż 100 MiB poza Git LFS.
- Oba skrypty `build_exe_*_WERSJA.ps1` tworzą paczki ZIP zawierające EXE, SHA-256, manifest wydania, SBOM CycloneDX z dokładnymi wersjami środowiska, inwentarz narzędzi, status Authenticode, raport testów i dokumentację.
- Dodano ręczny workflow wydania dla przygotowanego runnera Windows oraz opcję wymagania poprawnego podpisu Authenticode.
- Usunięto błąd domknięcia zmiennej komunikatu w asynchronicznym obliczaniu hasha obrazu i zastąpiono parser XML arkuszy wersją odporną na ataki XML.

## 2026-07-25 - ElPlayer: lupa z zachowaniem proporcji i poprawne skalowanie okna

- Lupa ElPlayera nie rozciaga juz wybranego kadru do proporcji zrodla. Wycinek jest kadrowany i dopasowywany do plotna wedlug wlasnych proporcji, w jednym przeliczeniu LANCZOS zamiast dwoch.
- Kolejne zaznaczenie lupy sklada sie z aktualnym kadrem, zamiast trafiac w inne miejsce klatki. Przyblizanie dziala przyrostowo, a `Resetuj zoom` nadal wraca do pelnego obrazu.
- Suwak `Rozmiar obrazu` liczy okno na podstawie obszaru roboczego monitora, w jednostkach logicznych dla DPI i z zachowaniem pozycji okna. Powiekszony obraz nie wypycha juz stopki ani kart eksportu poza widoczny obszar.
- Pomniejszenie obrazu zachowuje proporcje materialu; dolny limit rozmiaru dziala na wspolczynnik skali, a nie osobno na szerokosc i wysokosc (nagranie 4:3 nie jest juz splaszczane do 16:9).
- Gdy zadany procent nie miesci sie w obszarze roboczym, suwak wraca do faktycznie zastosowanej wartosci zamiast sugerowac powiekszenie, ktorego nie widac.

## 2026-07-24 - ElPlayer, skuteczne wyszukiwanie fraz i kompletna dokumentacja

- ElPlayer skaluje film do rzeczywistego obszaru okna i pelnego ekranu z zachowaniem proporcji, obrotu oraz proporcji piksela; maly material moze zostac czytelnie powiekszony, a duzy jest dopasowywany do monitora.
- Podglad `Od-Do` korzysta z tej samej geometrii obrazu co glowny odtwarzacz, ma wlasny pelny ekran, zoom, zrzut klatki i przycisk wywolujacy formularz analizy.
- Zrzuty JPG ElPlayera sa dekodowane w natywnej rozdzielczosci prezentacji filmu, niezaleznie od wielkosci okna GUI.
- Funkcja `Wyszukaj po frazie` otrzymala dwa silniki: hybrydowy `Szybkie i dokladne (zalecane)` z Windows Search przez `pywin32`, pelna kontrola systemu plikow i cache SQLite oraz `Pelna kontrola od zera` bez indeksu i cache.
- Pelny skan rekurencyjnie obejmuje dyski, katalogi i podkatalogi, korzysta z konfigurowalnej puli `concurrent.futures` oraz odczytuje tresc plikow tekstowych, PDF, Office, OpenDocument i EML.
- Pasek postepu opisuje cala operacje wyszukiwania; dodano pauze, wznowienie, anulowanie, raport niedostepnych sciezek oraz ochrone przed przypadkowym zamknieciem okna podczas konfiguracji i pracy.
- Rozbudowano `README.md`, `TECHNICAL_DOCUMENTATION.md` i wbudowana dokumentacje `evidence_locker/technical_docs.py` o dokladny opis kontrolek, algorytmow, ograniczen, wynikow oraz przeplywu UAC.
- Zastapiono mape glownego okna aktualnym zrzutem dashboardu z 15 numerowanymi pozycjami i legenda oraz dodano numerowana mape ElPlayera z dokladna legenda 15 grup kontrolek.
- Dodano aktualne zrzuty `Screenshots/glowne_okno_evidlock_2026-07-24.png`, `Screenshots/mapa_glownego_okna.png`, `Screenshots/elplayer_mapa_funkcji_2026-07-24.png` i `Screenshots/wyszukiwanie_po_frazie_tryby_2026-07-23.jpg`.
- Zaktualizowano drzewa modulow o `video_player.py`, `video_player_service.py`, `ffmpeg_install_service.py`, `phrase_search.py` i `phrase_search_service.py`.

## 2026-07-21 - ELPlayer z formularzem analizy nagrania

- Połączono odtwarzanie i pauzę w jeden przycisk; kliknięcie obrazu wykonuje tę samą akcję.
- Dodano przewijanie filmu kółkiem myszy, suwak głośności, działające wyciszenie oraz regulację rozmiaru obrazu i okna.
- Ograniczona kolejka klatek odrzuca nieaktualne klatki zamiast powodować narastające opóźnienie odtwarzania.
- Po otwarciu klipu automatycznie uruchamia się numerowany formularz analizy z dokładnymi znacznikami czasu i adnotacjami.
- Zrzuty JPG oraz eksporty całego klipu i fragmentów są rejestrowane wraz z czasem, ścieżką i SHA-256.
- `Zapisz i zakończ` tworzy czytelny raport HTML oraz maszynowy sidecar JSON z metadanymi klipu, znacznikami i artefaktami.

## 2026-07-19 - dokumentacja bez powtarzających się zrzutów

- Usunięto ponowne użycie zrzutu grafu w sekcji Profilowania; graf pozostaje wyłącznie przy dedykowanej funkcji `Oś czasu i graf dowodów`.
- Usunięto ponowne użycie zrzutu kopii 1:1 w opisie porównywania; sekcja porównania korzysta z własnego obrazu wyniku.
- Generator dokumentacji PDF identyfikuje obrazy przez SHA-256 i nigdy nie osadza drugi raz tej samej zawartości, nawet jeśli obraz zostanie wskazany pod inną nazwą.
- Dodano test regresji wymagający unikalnych odwołań do wszystkich zrzutów dokumentacyjnych.

## 2026-07-19 - profesjonalna dokumentacja techniczna i opcje Mapy sprawy

- Akcję dotyczącą plików `Pliki tylko do odczytu (read-only)` przeniesiono do `Czynności uzupełniających` na ścieżce Mapy sprawy. Karta pokazuje liczbę zabezpieczonych plików i pozwala wykonać lub ponowić operację bez tworzenia głównego przycisku.
- Pozycję `Włącz podpowiedzi funkcji` zastąpiono globalnym sterowaniem `Włącz/wyłącz podpowiedzi funkcji`. Operator może jednym ustawieniem włączyć wszystkie podpowiedzi albo wyłączyć je dla całej aplikacji; stan jest zachowywany w konfiguracji i zapisywany w dzienniku.
- Rozbudowano wprowadzenie `O projekcie EvidLock` o cele aplikacji, lokalny model działania, architekturę procesu dowodowego, ograniczenia interpretacyjne oraz rolę Profilowania aktywności użytkownika.
- Dokumentacja szczegółowo opisuje SHA-256, deterministyczny manifest katalogu, BLAKE3, zgodnościowe MD5, ZIP/PDF AES-256, proweniencję, model czasu, stabilne identyfikatory i deterministyczne reguły grafu dowodów.
- Dodano aktualne zrzuty zakończonego profilowania i filtrowanego grafu z legendą oraz panelem uzasadnienia relacji. Usunięto dokładne, bajtowo identyczne duplikaty ilustracji.
- Z sekcji `O projekcie EvidLock` usunięto techniczną listę plików wynikowych oraz ogólną notę o uprawnieniach; informacje szczegółowe pozostają przy właściwych modułach.

## 2026-07-19 - działający podgląd oryginalnych artefaktów grafu

- Przycisk dowodu źródłowego nie uruchamia już celu pliku `.lnk`; otwiera wewnętrzny podgląd tylko do odczytu rzeczywistego artefaktu.
- Podgląd pokazuje ścieżkę, rozmiar, SHA-256 oraz treść pliku tekstowego albo bezpieczny widok HEX pliku binarnego, w tym skrótów LNK.
- Dodano jawną obsługę błędów, zapis operacji w dzienniku oraz opcjonalne wskazanie pliku w folderze.

## 2026-07-19 - pełny licznik Logi w Panelu sprawy

- Zmniejszono pionowe odstępy liczników `Pliki`, `Raporty` i `Logi`, dzięki czemu trzecia ikona, etykieta oraz liczba nie są obcinane przy kompaktowym układzie i skalowaniu Windows.

## 2026-07-19 - responsywny One-Click i read-only na ścieżce Mapy sprawy

- Okno `EvidLock One-Click` ma teraz większy, skalowalny rozmiar, przewijaną treść i nieruchomą stopkę, dlatego pole `Powtórz hasło` oraz przyciski pozostają dostępne przy skalowaniu Windows.
- Do czynności uzupełniających osadzonej i odpiętej `Mapy sprawy` dodano pozycję `Pliki tylko do odczytu (read-only)`, która zabezpiecza wszystkie pliki bieżącej sprawy po potwierdzeniu operatora i zapisuje wynik w dzienniku zdarzeń.
- Licznik operacji read-only rozróżnia teraz rzeczywiście zabezpieczone pliki od nieudanych zmian atrybutu.

## 2026-07-19 - niezawodne zakończenie sprawy

- Usunięto konflikt, przez który sprawa dopuszczona do zamknięcia `z uwagami` bez materiału nie mogła utworzyć raportu końcowego.
- Zamknięcie pustej sprawy tworzy teraz jawny raport dokumentujący brak materiału i brak `hash_dowodowy.json`, zamiast przerywać całą procedurę.
- Generator raportu końcowego może przekazać rzeczywistą przyczynę błędu do procedury zamknięcia, zamiast ukrywać ją za pustą ścieżką wyniku.
- Komunikat nieudanego zamknięcia wskazuje dokładny etap i przyczynę oraz potwierdza, że sprawa pozostaje aktywna i można ponowić operację.
- Dodano testy regresji pustej sprawy, propagacji błędów i końcowej synchronizacji raportu z dziennikiem.
- Zaktualizowano kontrakt starszego testu automatycznego raportu końcowego do nowych parametrów bezpiecznego zamykania sprawy; pełna kompilacja nie jest już błędnie zatrzymywana przed etapem PyInstaller.

## 2026-07-19 - cztery widoczne rzędy narzędzi analitycznych

- Usunięto powtórzony mały nagłówek `Narzędzia` znajdujący się pod właściwym tytułem i opisem modułu.
- Zmniejszono pionowy odstęp między kaflami, aby cztery rzędy zakładki `Analiza` mieściły się w dostępnej wysokości okna.

## 2026-07-19 - natychmiastowy wybór materiału i pełny widok Analizy

- Odczyt zawartości katalogów w oknie `Wybór materiału dowodowego` przeniesiono poza wątek GUI; szybka zmiana Pulpitu, katalogu lub dysku nie blokuje już interfejsu.
- Wiersze dużych katalogów są renderowane porcjami po 12 elementów, dzięki czemu przewijanie, anulowanie i przechodzenie między lokalizacjami pozostają responsywne.
- Kopiowanie zatwierdzonych plików i katalogów do sprawy również działa w osobnym wątku z responsywnym oknem postępu; duże pliki nie zamrażają głównego interfejsu.
- Aktywna pozycja w panelu `Szybki wybór` otrzymała wyraźne kolorowe zaznaczenie wskazujące bieżącą lokalizację.
- Zakładka `Narzędzia → Analiza` otrzymała przewijany obszar kafli, dlatego czwarty rząd z OCR i pozostałymi modułami jest dostępny także przy mniejszej wysokości okna.
- Rozszerzono testy regresji płynności selektora i widoczności narzędzi analitycznych.

## 2026-07-19 - raport końcowy bez mylącego błędu manifestu

- Brak `hash_dowodowy.json` nie jest już przedstawiany jako awaria, gdy raport może obliczyć SHA-256 bezpośrednio z aktualnego materiału sprawy.
- Dla pustej aktywnej sprawy raport pokazuje okno naprawcze z akcjami `Dodaj pliki` i `Dodaj katalog`; bez aktywnej sprawy prowadzi do formularza `Nowa sprawa`.
- Próba utworzenia raportu bez materiału nadal jest zapisywana w dzienniku jako nieudana operacja, bez tworzenia pozornego raportu dla pustej sprawy.
- Dodano testy regresji dla aktywnej pustej sprawy, braku sprawy oraz cichego trybu generowania raportu.

## 2026-07-19 - płynny wybór plików i katalogów

- Usunięto zawieszanie okna `Wybór materiału dowodowego`: zaznaczenie elementu nie skanuje już ponownie katalogu i nie odbudowuje wszystkich wierszy listy.
- Zmiana zaznaczenia aktualizuje tylko odpowiedni wiersz, checkbox, licznik oraz panel szczegółów, dzięki czemu zachowana zostaje pozycja przewijania.
- Odczyt metadanych pliku i zawartości katalogu przeniesiono do osobnego wątku, a wynik jest bezpiecznie przekazywany do GUI przez kolejkę z kontrolą aktualności.
- Dodano testy regresji blokujące powrót synchronicznego odświeżania listy podczas zaznaczania.

## 2026-07-19 - profesjonalny widok Mapy sprawy

- Przebudowano `Mapę sprawy`: dodano duży nagłówek modułu, czytelny opis celu, większe kafle ikon oraz wyraźny podział na ścieżkę obowiązkową i czynności uzupełniające.
- Dodano panel kompletności z paskiem postępu i licznikami `Wykonane`, `Do działania` oraz `Opcjonalne`.
- Następny wymagany krok jest prezentowany w osobnym polu, a główne działania i raportowanie mają jednoznaczną hierarchię przycisków.
- Dostosowano kolory statusów, opisów i ikon do jasnej, ciemnej oraz wysokokontrastowej skórki; powiększono także odpinane okno mapy.

## 2026-07-19 - czytelny graf i odnośniki do dowodów

- Uczytelniono graf dowodów: dodano legendę typów węzłów i relacji, centralne wyróżnienie zaznaczonego zdarzenia, etykiety kluczowych encji oraz opisy relacji bezpośrednich.
- Dodano suwak limitu 10–100 węzłów (domyślnie 25). Ograniczanie zachowuje zaznaczone zdarzenie i kompletne, połączone fragmenty zamiast pozostawiać osierocone węzły.
- Dodano duży widok `Otwórz w nowym oknie` z niezależnym suwakiem oraz aktywne odnośniki dowodów. Kliknięcie identyfikatora pokazuje pełny rekord i pozwala otworzyć istniejący lokalny artefakt źródłowy.

## 2026-07-18 - tryb ciemny, przyciski Zamknij i rozszerzony audyt bezpieczeństwa

- Naprawiono zatrzymanie budowy okna grafu po samym nagłówku (`NameError: MITRE_CATALOG`). Importy grafu, JSON, matematyki i ścieżek są teraz lokalne i odporne na rebinding metod przez architekturę `bind_mixin`.
- Naprawiono puste okno `Oś czasu i graf dowodów`: moduł automatycznie wczytuje bieżący lub najnowszy wynik Profilowania, a brak raportu lub brak zdarzeń pokazuje jako jawny komunikat. Do okna Profilowania dodano przycisk `Graf dowodów`, aktywowany po zakończeniu analizy.
- Dodano moduł `Narzędzia → Analiza → Oś czasu i graf dowodów`: ujednolicone identyfikatory zdarzeń i źródeł, encje użytkownik/proces/plik/urządzenie/IP/sesja, 15 jawnych reguł korelacji, filtrowany graf zaznaczonego zdarzeni