6216e933a6
All 5 ACs verified: ICAO lookup via importlib.resources, Nominatim geocoding with User-Agent and timeout, exact error messages, mocked HTTP in tests, portal POST /find-location returns 200 on success and error. 45 tests pass, ruff clean. Sprint status updated to done. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
57 lines
2.9 KiB
Markdown
57 lines
2.9 KiB
Markdown
# Deferred Work Manifest
|
|
|
|
Tracks blocked, deferred, and tech-debt items across sprints.
|
|
|
|
---
|
|
|
|
## Infrastructure / environment setup
|
|
|
|
### [1-1] systemd unit installation
|
|
Story: `1-1-project-scaffold-and-verified-entry-points`
|
|
Task: 7.1, 7.2
|
|
Description: Unit files created at `systemd/`. Must be symlinked or copied to `/etc/systemd/system/` on the Pi and `systemctl daemon-reload` run before they take effect. Cannot be automated without root access to target device.
|
|
|
|
### [1-1] Pi Zero 2W runtime verification
|
|
Story: `1-1-project-scaffold-and-verified-entry-points`
|
|
Task: 9.1, 9.2
|
|
Description: Entry points verified on host (Pi 5, Linux). Full AC1 verification on Pi Zero 2W hardware requires physical deployment.
|
|
|
|
---
|
|
|
|
## Story 1.2 review — no new deferred items
|
|
|
|
Story `1-2-configuration-read-write-wipe` reviewed 2026-04-22. All 4 ACs pass, all 7 tests pass, ruff check and format clean. No deferred items required: `config.write()` already handles directory creation via `mkdir(parents=True, exist_ok=True)`, so deployment to a fresh device with no `/etc/planemapper/` directory is covered at runtime.
|
|
|
|
---
|
|
|
|
## Story 1.3: WiFi Hotspot & Captive Portal Form
|
|
|
|
### [1-3] hostapd and dnsmasq system packages
|
|
Story: `1-3-wifi-hotspot-and-captive-portal-form`
|
|
Category: Infrastructure/environment
|
|
Description: `hostapd` and `dnsmasq` require system packages installed on the Pi; AP mode requires `wlan0` in AP-capable state. Cannot be verified without hardware.
|
|
|
|
### [1-3] Captive portal device testing
|
|
Story: `1-3-wifi-hotspot-and-captive-portal-form`
|
|
Category: Runtime verification
|
|
Description: Actual captive portal detection behaviour (iOS/Android/Windows triggering) requires physical device testing. Automated tests confirm redirect routes are correct but cannot simulate OS-level captive portal probe behaviour.
|
|
|
|
### [1-3] Provisioning loop placeholder
|
|
Story: `1-3-wifi-hotspot-and-captive-portal-form`
|
|
Category: Infrastructure/environment
|
|
Description: `provision.py` provisioning loop currently exits after one iteration (placeholder `provisioned = True`) — full sequence wired in Story 1.5.
|
|
|
|
---
|
|
|
|
## Story 1.4: Location Resolution (ICAO & Address)
|
|
|
|
### [1-4] Nominatim geocoding runtime verification
|
|
Story: `1-4-location-resolution-icao-and-address`
|
|
Category: Runtime verification
|
|
Description: Nominatim geocoding verified in tests with mocks only; real geocoding requires internet access and can only be confirmed on device at provisioning time. No automated test covers live HTTP to Nominatim.
|
|
|
|
### [1-4] ICAO heuristic false-positive risk
|
|
Story: `1-4-location-resolution-icao-and-address`
|
|
Category: Technical debt
|
|
Description: ICAO heuristic (`len(query) == 4 and query.isalpha()`) may misclassify 4-letter words (e.g. "BATH", "YORK") as ICAO codes, causing them to be looked up in `airports.csv` before falling back to Nominatim. Acceptable for MVP given the provisioning context, but noted for future hardening (e.g. validate against a known ICAO prefix list).
|