feat(device): add device list and device get - #69
Merged
Conversation
Read-only device surface, pulled ahead of `rule import` as v0.2 (D17 amended). - `id` is the API's `device_id`; `PK != device_id` is a shape error (exit 8) - four-state `status`, `analytics` `null` != `none`, `resolvers.v4/v6` always arrays - `clients`, `ctrld.*`, `icon` nullable: an absent optional never fails the listing - `device get` is a client-side filter over `GET /devices` - release sequence renumbered v0.2-v0.5; `feat:` now bumps minor in release-plz Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CcF4yZHc4V6yQVvsx96KiX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Read-only device surface (
device list,device get <id|name>), pulled ahead ofrule importas v0.2 (D17 amended, roadmap renumbered v0.2-v0.5).Contract
{ "id": "dev...", "name": "...", "profile": {"id": "pk...", "name": "..."}, "status": "pending | active | soft-disabled | hard-disabled", "analytics": "none | some | full" | null, "clients": 1 | null, "learn_ip": false, "icon": "desktop-linux" | null, "ctrld": {"version": "v1.5.3" | null, "last_fetch": "RFC-3339" | null} | null, "resolvers": {"doh": "...", "dot": "...", "v4": [], "v6": []} }idis the API'sdevice_id(what/devices/{device_id}andresolvers.uidkey on);PK != device_idis a loud shape error, never a silent pick.analytics: null= not reported, distinct from"none"(reported as off).resolvers.v4/v6are[]when omitted, never absent.device getfilters client-side;GET /devices/{id}exists live but is undocumented (D16).device.not_found).Also
release-plz.toml:features_always_increment_minor = trueso afeat:slice tags a minor (0.1.2 shippedfeat(cargo)as a patch).commands.mddevice section, roadmap v0.2 gate, stale(vX)tags and one dead anchor fixed, discharged first-release watch items removed.Verification
cargo fmt --check,cargo clippy --all-targets -- -D warnings,cargo test(unit, wiremock + insta snapshots, help/reference snapshots, README matrix check).device listpassed against the real API (read-only check added totests/live.rs).🤖 Generated with Claude Code
https://claude.ai/code/session_01CcF4yZHc4V6yQVvsx96KiX