Skip to content

Commit 089734d

Browse files
Claudeclaude
andcommitted
docs: aktualizacja PROGRESS i CHANGELOG po naprawie 5 bugów UX (sesja 42)
E1, E4, E12, E13, F2 — wszystkie naprawione. 558 testów. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 4d0686b commit 089734d

2 files changed

Lines changed: 27 additions & 29 deletions

File tree

docs/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased] — 2026-02-22
99

10+
### Fixed (5 bugów UX — E1, E4, E12, E13, F2)
11+
- **E1 — dziury na granicach zlewni:** `merge_catchment_boundaries()` w `watershed_service.py` — usunięto `ST_SnapToGrid(geom, 0.01)` (przesuwało wierzchołki tworząc mikro-luki między sąsiednimi poligonami), zastąpione buffer-debuffer (0.1m/-0.1m) który zamyka luki ≤0.1m zachowując oryginalny rozmiar. `MIN_HOLE_AREA_M2`: 1000→100 m² (agresywniejsze usuwanie artefaktów merge, 10×10m zamiast ~32×32m).
12+
- **E4 — outlet poza granicą zlewni:** nowa funkcja `ensure_outlet_within_boundary()` w `watershed_service.py` — snap outleta do najbliższego punktu na granicy gdy wypada poza (tolerancja 1m, obsługa Polygon i MultiPolygon). Zastosowanie w `select_stream.py` i `watershed.py` po obliczeniu outlet przed dalszymi obliczeniami.
13+
- **E12 — legenda HSG:** `createHsgLegend()`/`removeHsgLegend()` w `map.js` — 4 pozycje (A=#4CAF50, B=#8BC34A, C=#FF9800, D=#F44336) z auto show/hide. Rozszerzenie `addBdotOverlayEntry()` w `layers.js` o callbacki `onShow`/`onHide`.
14+
- **E13 — nieciągłość HSG na terenach zurbanizowanych:** `distance_transform_edt` nearest-neighbor fill w `step_soil_hsg()` w `bootstrap.py` — wypełnia brakujące piksele (wartości spoza 1-4) wartością najbliższego sąsiada przed polygonizacją. Wymaga re-run pipeline.
15+
- **F2 — snap-to-stream sąsiednia zlewnia:** nowa funkcja `find_nearest_stream_segment_hybrid()` w `watershed_service.py` — priorytet: `ST_Contains` na `stream_catchments` (identyfikacja zlewni pod kursorem → ciek z niej), fallback: globalny `ST_Distance` snap (obecne zachowanie). Zastosowanie w `select_stream.py`.
16+
1017
### Fixed (CR1 — krytyczny blad spadku cieku)
1118
- **`channel_slope_m_per_m` obliczany z dlugosci glownego cieku zamiast calej sieci:** Nowa metoda `CatchmentGraph.trace_main_channel()` traweruje upstream od outletu wg rzedu Strahlera (tie-break: max stream_length, max area). Naprawione 3 miejsca: `catchment_graph.py`, `watershed_service.py`, `select_stream.py`. Spadek byl zanizony 2-10x → czas koncentracji zawyZony → szczyt wezbrania zanizony. ADR-029.
1219

docs/PROGRESS.md

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
| Integracja IMGWTools | ✅ Gotowy | v2.1.0 (opady projektowe) |
1515
| CN calculation | ✅ Gotowy | cn_tables + cn_calculator + determine_cn() |
1616
| Frontend | 🔶 Faza 4 gotowa | CP4 — tryb wyboru obiektow, flow acc coloring, histogram, debounce, zoom fix |
17-
| Testy scripts/ | ⏳ W trakcie | 550 testow lacznie (po usunieciu 43 testow martwego kodu flow_network/flow_graph) |
17+
| Testy scripts/ | ⏳ W trakcie | 558 testow lacznie (po usunieciu 43 testow martwego kodu flow_network/flow_graph) |
1818
| Dokumentacja | ✅ Gotowy | Audyt 16 plikow (2026-02-22), standaryzacja wg shared/standards (2026-02-07) |
1919

2020
## Checkpointy
@@ -44,10 +44,21 @@
4444

4545
## Ostatnia sesja
4646

47-
**Data:** 2026-02-22 (sesja 41)
47+
**Data:** 2026-02-22 (sesja 42)
4848

4949
### Co zrobiono
5050

51+
- **Naprawa 5 bugow UX (E1, E4, E12, E13, F2) — 3 rownolegle zespoly + 1 sekwencyjny:**
52+
- **E1 — Dziury na granicach zlewni:** `merge_catchment_boundaries()` w `watershed_service.py` — usunieto `ST_SnapToGrid(geom, 0.01)` (przesuwalo wierzcholki tworzac mikro-luki), zastapione buffer-debuffer (0.1m/-0.1m) ktory zamyka luki zachowujac rozmiar. `MIN_HOLE_AREA_M2`: 1000→100 m² (agresywniejsze usuwanie artefaktow merge).
53+
- **E4 — Outlet poza granica zlewni:** nowa funkcja `ensure_outlet_within_boundary()` w `watershed_service.py` — snap outleta do najblizszego punktu na granicy gdy wypada poza (tolerancja 1m). Zastosowanie w `select_stream.py` i `watershed.py`.
54+
- **E12 — Legenda HSG:** `createHsgLegend()`/`removeHsgLegend()` w `map.js` — 4 pozycje (A/B/C/D) z kolorami HSG_FILL, auto show/hide. Callbacki `onShow`/`onHide` w `addBdotOverlayEntry()` w `layers.js`.
55+
- **E13 — Fill brakujacych pikseli HSG:** `distance_transform_edt` nearest-neighbor fill w `step_soil_hsg()` w `bootstrap.py` — wypelnia luki w rasterze HSG na terenach zurbanizowanych przed polygonizacja.
56+
- **F2 — Snap-to-stream hybrydowy:** nowa funkcja `find_nearest_stream_segment_hybrid()` w `watershed_service.py` — priorytet: `ST_Contains` na `stream_catchments` (zlewnia pod kursorem), fallback: globalny `ST_Distance` snap. Zastosowanie w `select_stream.py`.
57+
- **Testy:** 8 nowych testow (4 outlet boundary, 2 hybrid snap, 1 HSG fill, 1 SQL inspect), 558 passed total, ruff clean
58+
- **4 commity** na feature branch, merge do develop
59+
60+
### Poprzednia sesja (2026-02-22, sesja 41)
61+
5162
- **CR3 — Cursor leak w `CatchmentGraph.load()` (catchment_graph.py):**
5263
- Named cursor `catchment_graph_load` nie byl zamykany gdy wyjatek wystapil w petli fetchmany — trzymal otwarta transakcje PostgreSQL
5364
- Opakowanie w `try/finally` z `cursor.close()` w `finally`
@@ -550,7 +561,7 @@
550561

551562
### Bledy do naprawy (zgloszenie 2026-02-14, sesja 19)
552563

553-
**Status: ⏳ D1-D4 naprawione (sesja 20), G1-G4 naprawione (sesja 21), E2 naprawione (sesja 18 jako A1), E3 naprawione (sesja 22), F1 naprawione (sesja 24, ADR-024), E5+E6+E9+E10+E11 naprawione (sesja 35), F3 naprawione (sesja 35), E7+E8 naprawione (sesja 38). Pozostaje: E1, E4, E12, E13, F2, H**
564+
**Status: ⏳ D1-D4 naprawione (sesja 20), G1-G4 naprawione (sesja 21), E2 naprawione (sesja 18 jako A1), E3 naprawione (sesja 22), F1 naprawione (sesja 24, ADR-024), E5+E6+E9+E10+E11 naprawione (sesja 35), F3 naprawione (sesja 35), E7+E8 naprawione (sesja 38), E1+E4+E12+E13+F2 naprawione (sesja 42). Pozostaje: H**
554565

555566
#### D. Frontend — profil terenu — ✅ NAPRAWIONE (sesja 20)
556567

@@ -561,21 +572,13 @@
561572

562573
#### E. Frontend — zlewnia i mapa
563574

564-
**E1. "Dziury" na granicach zlewni** (priorytet: wysoki)
565-
- Po wyborze zlewni na granicach pojawiaja sie widoczne "dziury"
566-
- Prawdopodobnie zaglbienia terenowe lub bledy laczenia obiektow wektorowych (ST_Union artifacts)
567-
- **Lokalizacja:** `watershed_service.py` (merge_catchment_boundaries), `watershed.py` (build_boundary)
575+
**E1. ✅ "Dziury" na granicach zlewni** → buffer-debuffer (0.1m/-0.1m) zamiast ST_SnapToGrid w merge_catchment_boundaries(), MIN_HOLE_AREA_M2: 1000→100 — sesja 42
568576

569577
**E2. ✅ Brak mozliwosci odznaczenia zlewni** → naprawione w sesji 18 jako A1 (closeResults czysci wszystkie warstwy)
570578

571579
**E3. ✅ Panel "Parametry zlewni" zaslania przyciski zoom** → panel dokowany z prawej (slide in/out), zoom przesuwa sie automatycznie (sesja 22)
572580

573-
**E4. Punkt ujsciowy poza granica zlewni** (priorytet: sredni)
574-
- Dotyczy obu trybow: "Wybierz zlewnię" i "Wygeneruj zlewnię"
575-
- Punkt ujsciowy (outlet) bywa przesuniety o kilkaset metrow poza granice wyznaczonej zlewni
576-
- Pojawia sie przy ujsciu doplywu do cieku wyzszego rzedu — outlet "przeskakuje" do nastepnego wezla w dol cieku
577-
- Prawdopodobna przyczyna: `traverse_upstream` zwraca segment_idx doplywu, ale outlet pobierany jest z downstream node cieku glownego
578-
- **Lokalizacja:** `watershed_service.py` (logika wyznaczania outlet), `catchment_graph.py` (traverse_upstream)
581+
**E4. ✅ Punkt ujsciowy poza granica zlewni** → ensure_outlet_within_boundary() snap do granicy (tolerancja 1m), zastosowanie w select_stream.py i watershed.py — sesja 42
579582

580583
**E5. ✅ Profil terenu nie generuje wykresu** → Chart.js resize w ukrytych kontenerach (d-none PRZED renderowaniem, resizeChart() z 50ms timeout, canvas w .chart-container) — sesja 35
581584

@@ -591,29 +594,17 @@
591594

592595
**E9. ✅ Usunac wpis "Zlewnia" z panelu Warstwy**~101 linii usunięte z layers.js + 3 wywołania z app.js — sesja 35
593596

594-
**E12. Brak legendy dla warstwy HSG** (priorytet: sredni)
595-
- Po wlaczeniu warstwy HSG na mapie brak legendy objasniajacej kolory grup glebowych (A/B/C/D).
596-
- Legenda powinna byc analogiczna do istniejacych legend ciekow i zlewni — auto show/hide przy wlaczeniu/wylaczeniu warstwy.
597-
- **Lokalizacja:** `frontend/js/layers.js` (legenda warstw), `frontend/js/map.js` (rendering HSG)
597+
**E12. ✅ Brak legendy dla warstwy HSG** → createHsgLegend()/removeHsgLegend() w map.js, callbacki onShow/onHide w addBdotOverlayEntry() — sesja 42
598598

599-
**E13. Nieciaglosc danych HSG na terenach zurbanizowanych** (priorytet: sredni)
600-
- Dane HSG (SoilGrids) wykazuja nieciaglosci (brak danych / artefakty) na terenach zurbanizowanych — zabudowa i uszczelnione powierzchnie nie maja przypisanej grupy glebowej.
601-
- Powoduje luki w wizualizacji warstwy HSG i potencjalne niedokladnosci w obliczeniach CN dla zlewni z duza powierzchnia zurbanizowana.
602-
- Mozliwe rozwiazanie: interpolacja brakujacych wartosci z sasiednich komorek lub przypisanie domyslnej grupy (np. D — najslabsza infiltracja) dla terenow zabudowanych na podstawie pokrycia terenu (BDOT10k).
603-
- **Lokalizacja:** `core/cn_calculator.py` (pobieranie HSG), `core/land_cover.py` (pokrycie terenu), `scripts/bootstrap.py` (import danych glebowych)
599+
**E13. ✅ Nieciaglosc danych HSG na terenach zurbanizowanych** → nearest-neighbor fill (distance_transform_edt) w step_soil_hsg() przed polygonizacja — sesja 42
604600

605601
#### F. Logika zlewni czastkowych
606602

607603
**F1. ✅ Selekcja cieku zaznacza cala zlewnię zamiast czesci miedzy doplywami** → ADR-024: segmentacja konfluencyjna + fine-threshold BFS (sesja 24). Wymaga re-run pipeline.
608604

609605
**F3. ✅ Automatyczny fallback na prog 1000 m² przy selekcji cieku z progu 100 m²** → eskalacja progu w select_stream.py gdy threshold < DEFAULT_THRESHOLD_M2, nowe pole `info_message` w SelectStreamResponse, banner w app.js — sesja 35
610606

611-
**F2. Snap-to-stream moze wybrac zlewnię sasiednia zamiast kliknietej** (priorytet: sredni)
612-
- Po naprawie ADR-027 selekcja opiera sie na snap-to-stream (`ST_Distance` na `stream_network`) — system znajduje najblizszy segment cieku i buduje zlewnię w gore od niego.
613-
- Problem: gdy uzytkownik kliknie wewnatrz jednej zlewni, ale najblizszy ciek nalezy do sasiedniej zlewni (np. blisko dzialu wodnego, przy konfluencji lub w szerokich zlewniach bez ciekow), system zaznaczy niewlasciwa zlewnię.
614-
- Wczesniejszy system oparty na `ST_Contains` (identyfikacja zlewni czastkowej pod kursorem) dzialal poprawnie w tym scenariuszu, ale mial inne bledy (klikniecie blisko granicy zlewni moglo trafic w sasiada — dlatego wycofany na rzecz snap-to-stream w ADR-027).
615-
- Mozliwe rozwiazanie: podejscie hybrydowe — najpierw `ST_Contains` na `stream_catchments` (ktora zlewnia pod kursorem?), a nastepnie snap-to-stream ograniczony do ciekow w obrebie tej zlewni. Fallback na obecny snap-to-stream gdy `ST_Contains` nie znajdzie wyniku.
616-
- **Lokalizacja:** `api/endpoints/select_stream.py`, `core/watershed_service.py` (`find_nearest_stream_segment`)
607+
**F2. ✅ Snap-to-stream moze wybrac zlewnię sasiednia zamiast kliknietej** → find_nearest_stream_segment_hybrid(): ST_Contains na stream_catchments (priorytet) + fallback do globalnego ST_Distance snap — sesja 42
617608

618609
#### G. Frontend — panel warstw i dane — ✅ NAPRAWIONE (sesja 21)
619610

@@ -799,7 +790,7 @@
799790
### Nastepne kroki
800791
1. ~~**Naprawa krytycznych bledow z code review:** CR1, CR2, CR3~~ ✅ (wszystkie 3 naprawione)
801792
2. Naprawa waznych bledow z code review: CR4-CR9 (BFS deque, land cover TODO, enkapsulacja _segment_idx, thread safety, profile info disclosure)
802-
3. Naprawa pozostalych bugow UX: E1 (dziury na granicach), E4 (outlet poza granica), E12 (legenda HSG), E13 (nieciaglosc HSG), F2 (snap-to-stream sasiednia zlewnia)
793+
3. ~~Naprawa pozostalych bugow UX: E1, E4, E12, E13, F2~~ ✅ (wszystkie 5 naprawione, sesja 42)
803794
4. ~~Aktualizacja CLAUDE.md (CR11): usunac flow_graph.py, dodac soil_hsg.py i bootstrap.py~~ ✅ (sesja 39)
804795
5. Weryfikacja podkladow GUGiK WMTS (czy URL-e dzialaja z `EPSG:3857:{z}`)
805796
6. Usuniecie hardcoded secrets z config.py i migrations/env.py

0 commit comments

Comments
 (0)