Skip to content

Commit 3fc2591

Browse files
committed
MD
1 parent d268766 commit 3fc2591

1 file changed

Lines changed: 244 additions & 0 deletions

File tree

MVP_GOAL_PROMPT.md

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
# BlueEye MVP Goal Prompt
2+
3+
## Master Goal
4+
5+
Doprowadz projekt BlueEye Tracker do pierwszej wersji terenowej MVP, ktora ma realna wartosc uzytkowa:
6+
7+
- niezawodnie pokazuje, czy telefon faktycznie zbiera sygnaly BLE/Classic w czasie sesji,
8+
- uczciwie rozroznia ograniczenia Androida, broad scan, filtered/watchlist scan i aktywne zbieranie,
9+
- ma spojny system alertow: watchlist, follow-me i public-safety-like signals,
10+
- pozwala uruchomic pierwsze sesje terenowe z eksportem danych i kalibracja progow,
11+
- nie obiecuje wykrycia osoby, intencji ani kazdego urzadzenia sledzacego.
12+
13+
Pracuj bez branchy, bez XML layoutow, bez Fragments, bez LiveData, bez RxJava. Uzywaj Kotlin, Jetpack Compose, Hilt, Flow/StateFlow, Result<T>, Navigation Compose i istniejacej architektury feature-first. Wszystkie zmiany rob na `main`.
14+
15+
## Execution Rules
16+
17+
Po kazdym podgolu:
18+
19+
1. Uruchom minimalne testy dla dotknietych modulow.
20+
2. Jesli podgol dotyka build/runtime, uruchom tez `./gradlew :app:assembleDebug`.
21+
3. Zaktualizuj checklisty w tym pliku: zmien `[ ]` na `[x]` tylko dla faktycznie wykonanych punktow.
22+
4. Zrob commit z konkretnym komunikatem.
23+
5. Wypchnij `main`.
24+
6. Nie przechodz do nastepnego podgolu, jesli obecny nie ma zielonej weryfikacji albo jawnie opisanego blokera.
25+
26+
Minimalna weryfikacja lokalna:
27+
28+
```bash
29+
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
30+
./gradlew qualityCheck
31+
./gradlew :app:assembleDebug
32+
git diff --check
33+
```
34+
35+
Jezeli JDK 17 nie istnieje lokalnie, pierwszy podgol polega na naprawie toolchainu albo udokumentowaniu dokladnej blokady. Nie zgaduj wynikow testow.
36+
37+
## Non-Negotiable Product Line
38+
39+
Aplikacja nie ma byc "magiczny wykrywacz sledzenia". MVP ma byc narzedziem dowodowym:
40+
41+
- "co telefon zaobserwowal",
42+
- "kiedy to zaobserwowal",
43+
- "dlaczego tak sklasyfikowal",
44+
- "jak pewna jest klasyfikacja",
45+
- "czy alert byl technicznie mozliwy i faktycznie wyslany".
46+
47+
Jesli Android ogranicza skanowanie po zablokowaniu ekranu, UI i eksport maja to pokazac zamiast ukrywac.
48+
49+
## Subgoal 0: Toolchain And Quality Gate
50+
51+
Cel: projekt musi dac sie budowac i testowac lokalnie przed zmianami produktowymi.
52+
53+
- [ ] Zweryfikuj JDK 17 i ustaw `JAVA_HOME` zgodnie z `docs/QUALITY_GATE.md`.
54+
- [ ] Uruchom `./gradlew qualityCheck`.
55+
- [ ] Uruchom `./gradlew :app:assembleDebug`.
56+
- [ ] Jesli quality gate pada przez istniejace problemy, zapisz dokladna liste awarii i napraw tylko blokery potrzebne do dalszej pracy.
57+
- [ ] Nie zmieniaj logiki BLE/alertow w tym podgolu.
58+
59+
Acceptance:
60+
61+
- `qualityCheck` i `assembleDebug` przechodza albo blocker jest jednoznacznie opisany w commit message i w tym pliku.
62+
63+
Suggested commit:
64+
65+
```text
66+
Stabilize local quality gate
67+
```
68+
69+
## Subgoal 1: Scanner Runtime Diagnostics For Field Sessions
70+
71+
Cel: przed poprawianiem detekcji aplikacja ma mierzyc, czy skaner w ogole dziala w realnych warunkach.
72+
73+
- [ ] Dodaj domenowy model diagnostyki skanera, np. runtime state, last BLE result time, last Classic result time, BLE results/min, Classic results/min, dropped queue events, scan start time, screen/lock related state if available.
74+
- [ ] Przekazuj diagnostyke z `BleScanner`, `BleScanSource`, `ClassicScanSource` i `ScannerService` do domenowego API przez Flow/StateFlow.
75+
- [ ] Pokaz diagnostyke w Settings albo Radar jako sekcje developersko-terenowa, bez marketingowego tekstu.
76+
- [ ] Dodaj eksport diagnostyki do sesji JSON, z timestampami i licznikami.
77+
- [ ] Dodaj testy jednostkowe dla formatowania/mapperow diagnostyki.
78+
79+
Acceptance:
80+
81+
- Uzytkownik widzi, czy po zablokowaniu telefonu dalej pojawiaja sie wyniki.
82+
- Eksport sesji pozwala porownac: ekran wlaczony, ekran zablokowany, 5/15/30 minut.
83+
- Brak claimow, ze background broad scan jest niezawodny.
84+
85+
Suggested commit:
86+
87+
```text
88+
Add scanner runtime diagnostics for field sessions
89+
```
90+
91+
## Subgoal 2: Background Scanning Strategy
92+
93+
Cel: naprawic problem "powiadomienia nie dzialaja po zablokowaniu" u zrodla, czyli rozroznic brak alertu od braku danych.
94+
95+
- [ ] Sprawdz oficjalne ograniczenia Androida dla BLE background scanning i zapisz w komentarzu/README tylko praktyczna konsekwencje, bez dlugiej dokumentacji.
96+
- [ ] Nie udawaj, ze unfiltered `startScan(..., ScanCallback)` bedzie niezawodny po screen-off.
97+
- [ ] Dla broad discovery zostaw tryb foreground/live scan i opomiaruj jego skutecznosc.
98+
- [ ] Dla watchlist/background alerts dodaj filtered scan path dla znanych fingerprintow/MAC/service/manufacturer clues tam, gdzie da sie stworzyc sensowny `ScanFilter`.
99+
- [ ] Jesli uzywasz `PendingIntent` scan path, dodaj osobny odbiornik i testowalna warstwe mappera intent -> scan event.
100+
- [ ] Jesli nie da sie stworzyc filtra dla danego watchlist entry, pokaz w UI/export "background reliability limited".
101+
- [ ] Nie dodawaj agresywnego wake-lock/probing obejscia jako glownego rozwiazania.
102+
103+
Acceptance:
104+
105+
- Watchlist ma najlepsza dostepna sciezke dla lock screen.
106+
- Unknown broad detection pozostaje opisana jako ograniczona przez Androida.
107+
- Diagnostyka pokazuje, czy problemem byl brak scan result, decyzja alert policy, permission, czy notification channel.
108+
109+
Suggested commit:
110+
111+
```text
112+
Separate live and background watchlist scanning paths
113+
```
114+
115+
## Subgoal 3: Unified Alert Settings And Dispatcher
116+
117+
Cel: przelaczniki wibracji, dzwieku i popupow maja dzialac przewidywalnie dla wszystkich typow alertow.
118+
119+
- [ ] Zaprojektuj jeden domenowy model ustawien alertow dla kategorii: watchlist return, follow-me, public-safety-like.
120+
- [ ] Kazda kategoria ma jawne ustawienia: enabled, notification/tray, heads-up, sound, vibration.
121+
- [ ] Zastap rozproszone uzycie `WatchlistPreferences` w alert path jednym `AlertSettingsRepository` albo rownowaznym kontraktem domenowym.
122+
- [ ] Zastap rozproszone wywolania notyfikacji/wibracji jednym `AlertDispatcher`.
123+
- [ ] Usun stare wewnetrzne galezie/fallbacki po migracji aktualnych callerow. Nie zostawiaj redundantnej kompatybilnosci API.
124+
- [ ] Dodaj testy dla kazdej kombinacji: master off, category off, vibration off, heads-up off, notification permission missing.
125+
- [ ] Dodaj w Settings proste sterowanie wszystkimi kategoriami.
126+
127+
Acceptance:
128+
129+
- Wylaczenie wibracji znaczy: zadna kategoria, ktora korzysta z tego ustawienia, nie wibruje.
130+
- Wylaczenie heads-up nie kasuje przypadkiem calej historii ani nie wplywa na dzwiek/wibracje, chyba ze UI jawnie tak mowi.
131+
- Watchlist return nie omija globalnej polityki alertow.
132+
133+
Suggested commit:
134+
135+
```text
136+
Unify alert settings and dispatch policy
137+
```
138+
139+
## Subgoal 4: Notification Reliability Diagnostics And Test Alert
140+
141+
Cel: uzytkownik ma wiedziec, czy alert moze pojawic sie na zablokowanym telefonie.
142+
143+
- [ ] Dodaj "Test alert" w Settings dla kazdej kategorii lub jeden test z wyborem kategorii.
144+
- [ ] Pokaz status: `POST_NOTIFICATIONS`, notification channel importance, heads-up enabled, sound enabled, vibration enabled.
145+
- [ ] Jesli permission/channel blokuje alert, pokaz konkretny stan w UI.
146+
- [ ] Dodaj lock-screen-safe notification ustawienia tam, gdzie to ma sens: priority/importance, visibility, category.
147+
- [ ] Nie uzywaj fake popupow jako substytutu notyfikacji systemowej.
148+
- [ ] Dodaj testy dla `AlertContentFormatter`, `AlertDispatcher` i diagnostyki kanalow.
149+
150+
Acceptance:
151+
152+
- Da sie recznie wyslac test alert i zobaczyc, czy system go blokuje.
153+
- Eksport albo diagnostyka odroznia "alert policy blocked" od "Android notification blocked".
154+
155+
Suggested commit:
156+
157+
```text
158+
Add alert delivery diagnostics and test alert
159+
```
160+
161+
## Subgoal 5: Field Session Export Contract
162+
163+
Cel: pierwsze sesje terenowe maja produkowac dane, z ktorych da sie podjac decyzje o progach i detekcji.
164+
165+
- [ ] Upewnij sie, ze eksport zawiera: scanner diagnostics, alert decisions, notification delivery result, scan counts, evidence, RSSI samples, movement/baseline state, active probe state.
166+
- [ ] Dodaj `sessionScenario` albo notatke sesji: home baseline, walk without tracker, walk with known device, city, car/transit.
167+
- [ ] Dodaj czytelny "session readiness" status: czy sesja ma wystarczajaco danych do kalibracji.
168+
- [ ] Dodaj testy JSON mapperow dla nowych pol.
169+
- [ ] Zachowaj schemat eksportu jako jawnie wersjonowany.
170+
171+
Acceptance:
172+
173+
- Po jednej sesji terenowej da sie odpowiedziec: ile danych zebrano, czy screen-off przerwal skan, czy alert mial szanse dojsc, dlaczego score wzrosl.
174+
175+
Suggested commit:
176+
177+
```text
178+
Extend session export for field calibration
179+
```
180+
181+
## Subgoal 6: Sony Headphones Recognition Smoke Path
182+
183+
Cel: nie traktowac sluchawek Sony jako trackerow, ale uzyc ich jako realnego testu rozpoznawania i widocznosci Bluetooth.
184+
185+
- [ ] Dodaj reczny scenariusz testowy w aplikacji/eksportach: Sony headphones nearby/pairing/connected/off.
186+
- [ ] Zweryfikuj BLE Fast Pair, Classic discovery, SDP UUID i name-based classification path.
187+
- [ ] Jesli sluchawki nie sa widoczne, UI/export ma pokazac "not observed", a nie bledna klasyfikacje.
188+
- [ ] Dodaj testy dla istniejacego Sony/Fast Pair/classic evidence mapping, tylko tam gdzie brakuje pokrycia.
189+
- [ ] Nie podbijaj follow-me score dla zwyklych sluchawek bez niezaleznego patternu ruchu.
190+
191+
Acceptance:
192+
193+
- Aplikacja potrafi wyjasnic jedno z trzech: wykryto jako Sony/audio, wykryto tylko generic audio, albo telefon nie zaobserwowal urzadzenia.
194+
195+
Suggested commit:
196+
197+
```text
198+
Harden Sony audio recognition evidence
199+
```
200+
201+
## Subgoal 7: First Field Session Checklist
202+
203+
Cel: przygotowac projekt do pierwszych realnych sesji, bez dalszego kodowania parserow.
204+
205+
- [ ] Zbuduj debug APK.
206+
- [ ] Zainstaluj na telefonie.
207+
- [ ] Wykonaj test alertu na odblokowanym i zablokowanym ekranie.
208+
- [ ] Wykonaj 10-min home baseline.
209+
- [ ] Wykonaj 10-min spacer bez znanego trackera.
210+
- [ ] Wykonaj 10-min spacer z wlasnym znanym urzadzeniem/watchlist item.
211+
- [ ] Wyeksportuj kazda sesje.
212+
- [ ] Oznacz false positives i known safe.
213+
- [ ] Nie zmieniaj progow scoringu przed przejrzeniem eksportow.
214+
215+
Acceptance:
216+
217+
- Sa minimum trzy eksporty z realnego telefonu.
218+
- Jest lista konkretnych false positives/false negatives.
219+
- Nastepny etap to kalibracja progow na danych, nie zgadywanie.
220+
221+
Suggested commit:
222+
223+
```text
224+
Document first field session checklist
225+
```
226+
227+
## Stop Conditions
228+
229+
Przerwij i napisz blocker, jesli:
230+
231+
- build/test nie startuje przez toolchain,
232+
- Android permission/channel blokuje alert i nie da sie tego naprawic kodem,
233+
- broad scan nie daje wynikow po screen-off mimo foreground service,
234+
- zmiana wymaga odejscia od Compose/Clean Architecture/Hilt/Flow,
235+
- dane terenowe pokazuja, ze Follow-Me score nie odroznia baseline od ruchu.
236+
237+
## Commercial Decision Gate
238+
239+
Po wykonaniu Subgoal 7 podejmij decyzje:
240+
241+
- GO: watchlist alerts sa niezawodne, eksport jest uzyteczny, diagnostyka wyjasnia ograniczenia.
242+
- PIVOT: broad unknown tracker detection jest za slabe, ale app ma wartosc jako BLE evidence/session tool.
243+
- STOP: alerty/watchlist nie dzialaja na realnym telefonie po lock screen i nie ma platformowej sciezki obejscia.
244+

0 commit comments

Comments
 (0)