docs: DEVICE_INTERFACES Status/dedupe + ADR 0001 table tense - #759
Conversation
8d57d99 to
fe67999
Compare
fe67999 to
24cdf08
Compare
|
/agentic_review |
Code Review by Qodo
1.
|
|
Reviewed (Claude): approved, and restacked on #740 — it is not redundant with it (the ADR hunks are disjoint and the six-value |
PR Summary by QodoDeduplicate device guidance and update the feature-gating ADR
AI Description
Diagram
High-Level Assessment
Files changed (2)
|
|
Code review by qodo was updated up to the latest commit 24cdf08 |
Leave #740's Quick Start typed API, CI-OS sentence, and ADR follow-up checkboxes alone. This is the leftover stale copy: six-value Status, README clones replaced with links, Features bullets dropped, Supports recipe added, and ADR 0001 amended to present tense for the shipped table. Co-authored-by: Tyler Kron <tylerkron@gmail.com>
Review follow-ups on this PR: - Rebased onto #740, which is reviewed and edits the same two files. The only textual conflict was the Quick Start block both PRs rewrote; #740's corrected snippet is now identical to the README's, so this takes the link and renames the section "Start here" rather than shipping a third copy to drift. #740's CI-OS fix and its ADR follow-up/table edits are untouched. - The feature-support sample called GetSdCardFilesAsync twice, guarded and then unguarded, which read as a copy-paste. Split into the two real choices: check first, or catch and report. Braces on the single-line if. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Supports(SdFileTransferOverWifi) answers for the device, not the link, so the sample's unconditional check would hide SD files a USB connection can read on pre-3.7.0 firmware (Qodo). The check is now IsUsbConnection || Supports(...), the same predicate EnsureSdFileTransferSupportedOnTransport applies. The section also claimed every gated call throws FeatureNotSupportedException. Only the SD calls enforce their gate; SetAnalogOutput sends regardless and a non-NQ3 board rejects it with no exception, so Supports is the only guard there. Say so, and note that RequiredVersion is null for a board/hardware shortfall. Restore the mDNS reply-parsing detail (PTR/SRV/TXT/A, the TXT keys, ConnectionType.WiFi) that the dedupe dropped without a README copy, and list :SPACe? under SdFileTransferOverWifi in the ADR sketch to match the enum. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24cdf08 to
a35a30a
Compare
|
/agentic_review |
|
Code review by qodo was updated up to the latest commit a35a30a |
…ersion
Supports skips board and hardware requirements while DeviceType is
Unknown, so Supports(AnalogOutput) alone answers true for a board that
has not reported its part number, and SetAnalogOutput has no gate of its
own behind it. The sample now also requires an identified board, and the
text explains why (Qodo).
The catch sample printed "needs {RequiredVersion}" unconditionally,
which renders "needs ," for a board/hardware shortfall where
RequiredVersion is null. It now branches on it (Qodo).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/agentic_review |
|
Code review by qodo was updated up to the latest commit 5b5a31b |
|
Qodo-clean, CI green — ready for review |
What was wrong
IDevice.Statuswas documented asDisconnected, Connecting, Connected, Lost— butConnectionStatusalso hasRetryingandFailed, which is what a device does whileauto-reconnect is working and after it gives up. The page's own reconnect section already
handled all six; only the summary list was short, so anyone writing a
switchfrom it wouldmiss the two cases that matter to a user staring at a stalled UI.
DIO/PWM snippets were duplicated from the README and had already drifted once (docs: fix DEVICE_INTERFACES CI claim and ADR 0001 living table #740 fixed
that drift). Two copies of the same sample means one of them is always the wrong one.
Supports()/FeatureNotSupportedExceptionhave shipped since tracking: DeviceFeature version table + Supports() seam + #327 capability reader (deferred) #256, so a consumer's only guidance was toread ADR 0001 or compare firmware strings by hand.
"deferred until they earn their place" — although the table shipped in tracking: DeviceFeature version table + Supports() seam + #327 capability reader (deferred) #256 and the
capability-document reader in feat: CONFigure:CAPabilities:JSON? reader — populate DeviceCapabilities from the device's self-description #390. A reader of the ADR would conclude neither exists.
How it was fixed
docs/DEVICE_INTERFACES.mdStatuslists all six values and links to the reconnect section.sentence on what this page is for. Discovery and DIO/PWM recipes likewise link to the README.
Everything deleted was verified present there first, including the multicast-filtered-network
escape hatch and the "frequency is device-wide, one timer" note.
LocationKey,CreateDefault/DiscoverAndConnectAsync,continuous discovery,
PreserveActiveStream, diagnostics,RunExclusiveAsync, and the mDNSnotes the README does not carry (Add MDnsDeviceFinder for reliable discovery on home/multi-AP networks (broadcast UDP is fragile) #183, what the finder reads from the PTR/SRV/TXT/A reply,
SO_REUSEADDR, serial hex→decimal,LocalInterfaceAddress).Supports(...), or catchFeatureNotSupportedExceptionand show the required-vs-reported version. It is explicit about the two things that trip
people up:
Supportsanswers for the device, not the link.SdFileTransferOverWifiis only the gateon a WiFi/TCP connection, so the SD sample checks
device.IsUsbConnection || device.Supports(DeviceFeature.SdFileTransferOverWifi)— the samepredicate
EnsureSdFileTransferSupportedOnTransportapplies — rather than hiding files aUSB connection can read on pre-3.7.0 firmware.
SetAnalogOutputsends thecommand regardless and a non-NQ3 board rejects it with no exception. Because
Supportsskips board/hardware requirements while
DeviceTypeis stillUnknown, the analog-outputsample also requires an identified board.
RequiredVersion, which isnullfor a board/hardwareshortfall (no upgrade would help).
Links ADR 0001 rather than restating it.
docs/adr/0001-firmware-feature-gating.md— the ADR is amended, not rewritten. The originaldecision text stays; an amendment notes the trigger landed and the table shipped, the
DeviceFeaturesketch is marked historical and gainsSdFileTransferOverWifi, and theconclusion and consequences point at the #256/#390 implementation notes instead of describing
them as deferred. #740's follow-up "done" markers and the
GetSdLoggingStaterow are untouched.Docs only — no behavior change.
🤖 Generated with Claude Code