When a router's package index is empty (e.g., fresh boot, tmpfs), opkg cannot resolve dependencies like ucode-mod-digest, causing install failures. opkg then misreports this as an architecture mismatch (issue #1).
This commit implements a two-part fix:
1. Refresh the package index before installing the local .ipk file (once per run, best-effort to avoid aborting on flaky feeds). apk is left alone as it auto-refreshes on write.
2. Improve error messages by parsing opkg's output to report the actual missing dependency instead of blindly tailing the last 200 characters (which surfaced opkg's misleading last line). Kernel module blockers also get the firmware diagnosis previously only shown at the kmod step.
Adds comprehensive tests for the refresh latch, error reporting, and integration with the update path.
- Add OpenWrt 23.05+ requirement to all README files
- Expand privacy statement to clarify no telemetry/analytics and data only goes to router, provided URLs, and official package sources
- Update smoke check command in CONTRIBUTING and all READMEs to include pytest: `python -m compileall -q src && pytest -q`
- Minor formatting improvements
Change macOS release asset from .dmg to .zip using ditto instead of hdiutil. This preserves app bundle structure and symlinks better than plain zip. Update all README translations with new unzip instructions and clearer Gatekeeper bypass steps for unsigned builds. DMG with proper macOS signing/notarization planned for later.
Remove PyYAML dependency from pyproject.toml and all documentation.
Update architecture documentation to reflect actual implementation:
- Replace Orchestrator/SecurityGate description with engine/* module organization
- Clarify that UI drives setup flow through wizard and settings screens
Remove 'custom' routing mode from documentation (already removed in implementation).
Clean up license file and references.