# Mapowanie ekranów

> Źródło: repo luneta/docs/MAPOWANIE.md — edytuj w repo, nie tutaj.

# Mapowanie ekranów: F-klawisze i paczka sesji

Decyzja właściciela z 2026-10-06. Cel: mapować ekrany i zgłaszać problemy bez wychodzenia z gry,
a po sesji oddać Claude Code jedną zwięzłą paczkę zamiast setek klatek.

## F-klawisze (tylko gdy wykryta gra działa)

| klawisz | akcja |
|---|---|
| F5 | **zgłoś**: zrzut okna gry + okienko przy kursorze (opis, potem typ) |
| F6 | auto-skan **i** nakładka razem (któreś wyłączone → oba wł., inaczej oba wył.) |
| F7 | panel mapowania (debug/normal), etykiety zmiennych „tu jest X” |
| F8 | opis do ostatniego zgłoszenia z F5 |
| F9 | okno Lunety pokaż/schowaj |
| F10 | wolne na przyszłość |

Poza grą klawisze są zwolnione (globalny skrót zabierałby np. F5 przeglądarce). Włącznik:
ustawienia → „F5 zgłoś…”. Kod: `src-tauri/src/fkeys.rs`, `src-tauri/src/report.rs`.

Każda akcja daje komunikat w nakładce (jeśli włączona) i w zakładce „aktywność”.
Zero wejścia do gry: okienko zgłoszenia to zwykłe okno pulpitu, chwilowo zabiera fokus.

## Zgłoszenie (F5)

1. F5 — Luneta robi zrzut okna gry **w tej chwili** (zanim pojawi się okienko).
2. Przy kursorze otwiera się okienko: wpisz, o co chodzi (opcjonalnie), potem kliknij typ
   (albo Ctrl+1…5):
   - **nowy ekran / do mapowania** — ekran, którego Luneta nie zna;
   - **zły odczyt** — zła liczba, zły ekran, zły fakt;
   - **zadanie nie odhaczone / błędnie**;
   - **pomysł na funkcję** — np. „pokazuj tu taktyki”;
   - **inne**.
3. Klik zapisuje klatkę i wpis do lokalnego dziennika problemów (`<dane>/review/`,
   `kind: manual`, `data.category`). Esc albo 60 s bez wyboru: nic nie trafia na dysk.

F8 otwiera to samo okienko z samym polem opisu dla ostatniego zgłoszenia (dziennik jest tylko
dopisywany, więc opis to osobny wpis `kind: note` z `data.ref`; `luneta review` i paczka sklejają
je ze zgłoszeniem). Zgłoszenia nie idą na serwer.

## Paczka sesji

```
luneta session-pack <gra> [--since <godz.>|--all] [--frames N] [--learn <katalog>…]
```

albo przycisk **paczka sesji** w zakładce „aktywność” (gra wybrana w dniówkach).

- Okres: od ostatniej paczki tej gry, najdalej 24 h wstecz (`--since 3` = ostatnie 3 h,
  `--all` = cały dziennik).
- Zawartość `session.md`: zgłoszenia pogrupowane po typie (z opisami F8), etykiety z panelu,
  dziennik automatyczny zliczony po rodzaju i ekranie, wynik toru ekranów (`luneta screens`)
  na unikalnych klatkach sesji wg **bieżących** reguł i modelu, lista klatek w paczce,
  opcjonalnie wiersz „sprawdzenie” z `luneta learn` (`--learn mapping/ba-1 …`; model trafia do
  katalogu paczki, nie do `assets/`).
- Klawisze (ustawienie „klawisze”, domyślnie wył.; CLAUDE.md): sekcja „klawisze” — najczęstsze
  per ekran i sekwencja z 15 s przed każdym zgłoszeniem F5. Źródło `<dane>/review/<dzień>/keys.jsonl`,
  zapisywane tylko przy aktywnym oknie gry i działającym auto-skanie.
- Klatki: najwyżej N (domyślnie 8), **tylko nierozpoznane** — zgłoszenia „nowy ekran”/„zły odczyt”,
  `new_screen`, `anchor_mismatch`, `unknown_screen`, którego bieżące reguły nadal nie rozpoznają.
  Prawie identyczne (dHash < 12 bitów) odpadają. Przeskalowane do 1280 px, JPEG 80.
  Logika wyboru: `luneta_lib::core::session_pack` (z testami).
- Miejsce: `<dane>/review/packs/<data>-<gra>/` (Linux: `~/.local/share/pl.ariku.luneta/review/packs/`).
  Zostaje 10 ostatnich paczek. Nic nie jest wysyłane.

Szacunek tokenów jest w nagłówku `session.md`: tekst ≈ znaki / 3, obraz ≈ szer.×wys./750 po
skalowaniu do 1568 px. Klatka 1920×1080 ≈ 1840 tokenów, 1280×720 ≈ 1230.
Pomiar 2026-10-06 (BA, 24 h, 45 klatek w dzienniku): paczka ~11,2 tys. (tekst ~1,4 tys. +
8 klatek ~9,8 tys.) vs surowe klatki ~83 tys.; czas ~1 min 45 s (OCR 44 unikalnych klatek).

## Przegląd przez Claude Code

Tylko na wyraźną prośbę właściciela, w sesji z nim (CLAUDE.md, wyjątek „dziennik problemów”).
Wskaż katalog paczki: najpierw `session.md`, klatki tylko te, do których odsyła tekst.