AprilNEA/OpenLogi · error
no addressable physical device candidate was found
Error message
no addressable physical device candidate was found
What it means
`select_target` in the fixture tooling resolves the physical device a fixture operation should target from a candidate list. When the candidate list is empty there is nothing addressable to select, so it bails immediately before even consulting the query. It throws because fixture recording/verification is defined only against real, enumerable hardware candidates.
Solutions
- Plug in the Logitech device (or its Bolt/Unifying receiver) and rerun
- Verify enumeration works: `openlogi list` shows the device
- On macOS, grant Input Monitoring/Accessibility so device enumeration is not blocked
- If using agent-backed snapshots, ensure the agent is running with the device visible
Example fix
// before $ openlogi fixture record --name case1 # no device attached error: no addressable physical device candidate was found // after $ openlogi list # confirm device present $ openlogi fixture record --name case1
Defensive patterns
Strategy: fallback
Validate before calling
// shell pre-check: is there anything enumerable?
openlogi list || { echo "no devices visible; connect hardware or check permissions"; exit 2; } Try / catch
match select_target(&candidates, query) {
Ok(t) => proceed(t),
Err(e) if e.to_string().contains("no addressable physical device candidate") => {
eprintln!("Connect the device (or receiver), then retry.");
Err(e)
}
other => other,
} Prevention
- Run `openlogi list` before any fixture command to confirm enumeration
- Plug hardware in / pair Bluetooth before scripted fixture runs
- On macOS ensure Input Monitoring is granted so devices are visible
- Note in CI that fixture recording jobs need real hardware or the agent-mock
When it happens
Trigger: Calling `select_target` with an empty `candidates` slice — e.g. running a fixture subcommand with no compatible Logitech device attached, no receiver plugged in, or enumeration returning nothing.
Common situations: Running fixture commands on a machine without the device plugged in; Bluetooth-direct device not paired; on macOS, missing Input Monitoring/permissions hiding devices; agent snapshot unavailable and direct enumeration finds nothing.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- --name must not be empty
- --channel must not be empty
- --id must be a nonempty synthetic identifier
- --name must be a nonempty synthetic profile name
- relationship verification failed: cassette file
AI-assisted analysis of AprilNEA/OpenLogi@e846e6f4b4 (2026-09-13).
Data as JSON: /api/errors/a4701e1f470ec663.
Report an issue: GitHub.
Appendix: source
Thrown at crates/openlogi-cli/src/cmd/fixture/target_selection.rs:15
//! Strict fixture target selection with privacy-safe diagnostics.
use std::fmt::Write as _;
use anyhow::{Result, anyhow, bail};
use openlogi_core::hid::DeviceRoute;
pub(super) trait FixtureTarget: Clone {
fn route(&self) -> &DeviceRoute;
fn display_name(&self) -> &str;
}
pub(super) fn select_target<T: FixtureTarget>(candidates: &[T], query: Option<&str>) -> Result<T> {
if candidates.is_empty() {
bail!("no addressable physical device candidate was found");
}
let mut matches = match query {
Some(query) => candidates
.iter()
.filter(|candidate| {
candidate.display_name().eq_ignore_ascii_case(query)
|| candidate.route().to_string() == query
})
.cloned()
.collect::<Vec<_>>(),
None if candidates.len() == 1 => candidates.to_owned(),
None => Vec::new(),
};
if matches.len() != 1 {
let message = match (query, matches.len()) {
(Some(_), 0) => "no candidate exactly matched --device",
(Some(_), _) => "--device matched more than one candidate",View on GitHub (pinned to e846e6f4b4)