Repository navigation
Add paired HTTPS phone remote and shared CLI color controls - #61
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b82641e662
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let target = app | ||
| .state::<Handle>() | ||
| .fleet | ||
| .as_ref() | ||
| .unwrap() | ||
| .target(&controller)?; |
There was a problem hiding this comment.
Stop sessions when their target controller is removed
If the remote targets a secondary controller and that controller is later deleted, this closure retains its cloned Handle after controllers.rs::remove shuts down the worker and removes it from the fleet. The session continues to report itself as enabled and accepts paired clients, but every command fails against the closed worker until the user manually re-enables the remote; controller removal should revoke the session or commands should detect the stale target and disable it.
Useful? React with 👍 / 👎.
Users can now control a chosen strip from a paired phone on their private network. The opt-in HTTPS server provides power, brightness, solid color and saved offline profiles, with a responsive page, two-minute one-use pairing codes, named clients and immediate revocation. All sessions restart disabled; no capture data or capture-start permission is exposed.
TLS, exact Host/Origin checks, Secure/HttpOnly cookies, hashed credentials, bounded requests and worker-side revocation/pause checks and sleep-aware credential expiry constrain the service. Adds the shared API v1/CLI color command, update-install listener teardown, setup documentation and a complete physical-validation handoff.
Also fixes the USB fast path for extension zones/effects over Solid scenes: send every mapped LED, preserve nonuniform transition output and invalidate the cached solid so revocation restores immediately. The planned 0.15.0 release was withheld before publication after this was found in final review. Games/plugins from #60 first ship here in 0.16.0, together with the remote. Plugins use bounded declarative programs, without executable extensions.
Validation: 99 native tests passed (one unrelated interactive capture test skipped), nine CLI/control cases, strict Clippy/formatting, browser desktop controls, 14 release tests, a real TLS unit roundtrip, mapped USB-packet regression and isolated native Windows HTTPS/phone/CLI smoke. Verified certificate/IP, Origin/auth refusal, pairing reuse refusal, revoked mutations, phone color/brightness/Stop and preserved off state. Tests use loopback and an isolated app identifier; no LAN/firewall or USB/capture changes.
The implementation backlog is empty. Hardware, actual-phone certificate acceptance and screen-reader validation remain open in #37, #38 and #45; the new handoff documents every feature to check.
Closes #17