fix: post-review issues + close M2/M3/M4 from internal backlog (v1.9.9)
From Sonnet pre-release code review (3 real issues): - F1 (high): factory reset atomicity — save cleared creds BEFORE zeroing reset counter, so a power loss between commits still results in WiFiManager AP boot instead of inconsistent "counter=0 + stale creds" state - F2: isValidSSID now allows single-char SSIDs (per 802.11 spec) - F3: ntp_interval changes now trigger needsRestart (NTPClient constructed once in setup() with this value, doesn't pick up runtime changes) From internal backlog: - M2: setupWiFi Try-2 now supports open networks (no password) — fixed the &&-condition that required both ssid and password - M3: removed dead NTP_WAITING/NTP_SUCCESS/NTP_FAILED enum values - M4: randomSeed() with ESP.getChipId() ^ micros() — dissolve pattern varies Tested on hardware: 72/73 tests pass (single failure is expected — ntp_interval fuzz cases now trigger restart due to F3, second case lands in reboot window). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
f42ede5fa4
commit
259eda6663
@@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.9.9] - 2026-05-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Factory reset atomicity**: cleared WiFi credentials are now committed BEFORE
|
||||
the reset counter is zeroed. If power fails between the two writes, the device
|
||||
still boots into WiFiManager AP on next start (cleared creds win over stale counter)
|
||||
instead of being stuck in an inconsistent state
|
||||
- **`isValidSSID` rejected single-char SSIDs**: length-1 networks like "A" were
|
||||
incorrectly flagged as all-same garbage. Now allowed (per 802.11 spec)
|
||||
- **`ntp_interval` config changes ignored until reboot**: `NTPClient` is constructed
|
||||
in `setup()` with this value and never re-initialized. Now triggers `needsRestart`
|
||||
when the interval actually changes
|
||||
- **Open WiFi (no password) failed to connect at setup** (M2): Try-2 block in
|
||||
`setupWiFi()` required both ssid and password; now falls back to `WiFi.begin(ssid)`
|
||||
when password is empty
|
||||
- **Unseeded PRNG, identical dissolve pattern every boot** (M4): `randomSeed()`
|
||||
now called with `ESP.getChipId() ^ micros()` — varies between devices and boots
|
||||
|
||||
### Removed
|
||||
|
||||
- **Dead `NTPState` enum values** (M3): `NTP_WAITING`, `NTP_SUCCESS`, `NTP_FAILED`
|
||||
were defined but never assigned. Removed to reduce code surface area
|
||||
|
||||
## [1.9.8] - 2026-05-19
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in New Issue
Block a user