mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-08-25 19:46:53 +02:00
116 lines
3.1 KiB
Markdown
116 lines
3.1 KiB
Markdown
# Known edge cases and regression patterns
|
|
|
|
This file is a regression-awareness list. Reproduce/inspect current code before deciding a historical bug still exists.
|
|
|
|
## Incomplete ChatMember
|
|
|
|
Known failure pattern:
|
|
|
|
```text
|
|
Cannot invoke "java.lang.Double.intValue()" because
|
|
ChatMember.getQrb() is null
|
|
```
|
|
|
|
Lesson:
|
|
|
|
- QRB can be absent;
|
|
- UI/calculation code must not blindly unbox/convert;
|
|
- unavailable is not zero.
|
|
|
|
Apply the same reasoning to QTF and other server/fallback-derived fields.
|
|
|
|
## Callsign suffix collisions
|
|
|
|
A historical issue caused messages/identity problems between:
|
|
|
|
```text
|
|
DN9APW
|
|
DN9APW-2
|
|
```
|
|
|
|
The corrective model is not "strip all suffixes".
|
|
|
|
Instead:
|
|
|
|
- keep full-call chat identities distinct;
|
|
- include category;
|
|
- use base call only for explicitly base-call-wide features such as worked state/monitoring.
|
|
|
|
## Unsupported chat categories
|
|
|
|
The ON4KST ecosystem can expose categories outside the two central ones.
|
|
|
|
A parser/switch/filter must not throw because the category is irrelevant to KST4Contest.
|
|
|
|
Safe ignore/fallback beats fake band assignment.
|
|
|
|
## AirScout higher-band queries
|
|
|
|
A historical observation showed aircraft visible in AirScout while API results for a 432 MHz case were empty.
|
|
|
|
Potential causes included frequency-string formatting.
|
|
|
|
Lesson:
|
|
|
|
- verify the exact upstream contract;
|
|
- compare request produced by KST4Contest with a known-working request;
|
|
- do not "fix" by guessing a string format or falling back to an unrelated band.
|
|
|
|
## Second airplane-scatter result / missing aircraft
|
|
|
|
A known UI failure involved missing/partial airplane-scatter data and a `TextInputControl` range error (`start must be <= end`).
|
|
|
|
Lesson:
|
|
|
|
- empty/partial AP results must be validated before text-range highlighting/selection;
|
|
- second-result paths need the same null/range checks as primary results.
|
|
|
|
## Historic/unknown user message
|
|
|
|
A user/message record can refer to a callsign not present in the current member list.
|
|
|
|
Do not require current login membership to render or classify historic messages.
|
|
|
|
## UM3-style handling
|
|
|
|
Historical message handling included cases that should be ignored safely if the user is not in the chat/member state.
|
|
|
|
Lesson:
|
|
|
|
- external message types must tolerate missing member references.
|
|
|
|
## CR/LF and disconnect suspicion
|
|
|
|
Do not treat line endings as harmless text formatting in socket code.
|
|
|
|
When diagnosing a disconnect:
|
|
|
|
- inspect transmitted bytes;
|
|
- inspect server response/EOF;
|
|
- compare Windows versions only after proving the application sends different bytes;
|
|
- avoid duplicated LF/CRLF terminators.
|
|
|
|
## Filter reset
|
|
|
|
A reset button that clears control values but leaves predicates active is not a valid reset.
|
|
|
|
Verify final predicate composition, not only UI state.
|
|
|
|
## Map render flicker
|
|
|
|
Leaflet/WebView render fragmentation under Java 21 was mitigated by:
|
|
|
|
```text
|
|
window.L_DISABLE_3D = true
|
|
```
|
|
|
|
before Leaflet load.
|
|
|
|
Do not remove as "obsolete CSS cleanup" without a visual regression check.
|
|
|
|
## Network start/reconnect loop
|
|
|
|
Initial connection failure must not spin indefinitely or block controlled recovery.
|
|
|
|
Connection state must be based on actual I/O lifecycle rather than only `Socket.isConnected()`-style historical state.
|