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>
2.9 KiB
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).