AprilNEA/OpenLogi · error
a retained HID++ route has no captured capability facts…
Error message
a retained HID++ route has no captured capability facts; refusing to guess setting support (no profile was written)
What it means
Raised in `capture_hidpp_settings` when the retained device's `capabilities` field is `None`. The capture refuses to guess which settings (DPI, wheel, lighting) a device supports: without the agent's captured capability facts it cannot decide between Supported/Unsupported/Unavailable, so it aborts without writing a profile. Capability facts come from the agent's probe; their absence means the device was never probed or the facts were dropped.
Solutions
- Wait for the agent to finish probing the device (open the GUI or run `openlogi list` and confirm capability details appear), then retry the capture.
- Reconnect the device so the agent re-probes it.
- Restart the agent to force a full re-enumeration.
- If capabilities never appear, the device's HID++ probe is failing — check agent logs and file a device-support issue.
Example fix
// confirm capabilities exist before recording openlogi list --verbose # device shows capability facts openlogi fixture record profile --id my-mouse --name "My Mouse" --output mouse.json
Defensive patterns
Strategy: validation
Validate before calling
// pre-check: device must have probed capability facts
let ready = |snap: &AgentSnapshot, sel: &str| snap.inventory.iter()
.flat_map(|inv| inv.paired.iter())
.any(|d| d.capabilities.is_some());
if !ready(&snapshot, selector) { eprintln!("device not yet probed; wait or reconnect"); } Type guard
fn has_capabilities(d: &PairedDevice) -> bool { d.capabilities.is_some() } Try / catch
// abort cleanly and prompt a probe wait
match capture_hidpp_settings(...).await {
Err(e) if e.to_string().contains("no captured capability facts") => {
eprintln!("device not probed yet; reconnect and retry");
}
other => other,
} Prevention
- Wait for the agent to finish probing (visible in GUI/openlogi list) before recording.
- Reconnect the device so the agent re-probes if capabilities are missing.
- Don't record profiles for freshly paired devices until enumerated.
When it happens
Trigger: Recording a profile for an inventory device that the running agent has not probed — `PairedDevice.capabilities` is `None` in the snapshot, e.g. a freshly paired or half-enumerated device.
Common situations: Device just plugged/paired and the agent hasn't finished its probe; device in a degraded state where probing failed at agent startup; snapshot served by the mock or an older agent that omits capabilities.
Related errors
- a retained offline HID++ route has no captured
- a retained Agent inventory route is not safely addressable
- the running Agent could not complete the online
- no online HID++ device found — is a Logi device paired and…
- no online device matches `--device
AI-assisted analysis of AprilNEA/OpenLogi@e846e6f4b4 (2026-09-13).
Data as JSON: /api/errors/d0b664a1d2f85e91.
Report an issue: GitHub.
Appendix: source
Thrown at crates/openlogi-cli/src/cmd/fixture/record_profile.rs:277
let mut settings = Vec::with_capacity(retained.paired.len());
for ((source_route, profile_route), device) in source_routes
.iter()
.zip(profile_routes)
.zip(&retained.paired)
{
settings.push(capture_hidpp_settings(client, source_route, profile_route, device).await?);
}
Ok((vec![retained], Vec::new(), settings, selected_route))
}
async fn capture_hidpp_settings(
client: &AgentClient,
source_route: &DeviceRoute,
profile_route: DeviceRoute,
device: &PairedDevice,
) -> Result<ProfileDeviceSettings> {
let capabilities = device.capabilities.ok_or_else(|| {
anyhow!(
"a retained HID++ route has no captured capability facts; refusing to guess setting \
support (no profile was written)"
)
})?;
let dpi = match capability_setting(device.online, capabilities.pointer) {
Some(setting) => setting,
None => {
semantic_read(
"DPI",
client.read_dpi(context::current(), source_route.clone()),
)
.await?
}
};
let smartshift = if device.online {
semantic_read(
"SmartShift",View on GitHub (pinned to e846e6f4b4)