Description
Which devices are connected, from where, and on which client version is the WARP fleet view. The fleet-status device endpoint returns one row per device; per-device series (device ID, name, email) are unbounded, so export aggregates and paginate fully (a single page silently truncates large fleets).
Acceptance Criteria
- #1 Connected device counts are exported by status, platform, client version, mode and colo, with full pagination
- #2 No per-device or per-user metric attribute is emitted
- #3 A new dataset or endpoint has a live-verified entry in doc-0003 and an API drift canary probe
- #4 Every new signal and attribute is declared in internal/semconv, listed in docs/signals.md, and has a panel in grafana/build_dashboard.py
- #5 Any new token permission is added to the token permission matrix in the docs
Definition of Done
- #1 just check (fmt-check, lint, vet, test, tidy-check, build, vuln)
- #2 just ci before a change that touches the Dockerfile, goreleaser or the image (adds snapshot + image)
- #3 Every new signal or attribute name declared in internal/semconv and listed in docs/signals.md
Implementation Plan
Root doc-derived WARP device-list contract and current successful empty-list canary recorded in doc-0003. Add disabled-by-default warp.fleet snapshot collector, default five-minute poll and fifteen-minute last_seen window (maximum sixty minutes). Paginate devices at per_page fifty using actual server page metadata and short/empty termination; full validated poll only, bounded unique-device dedup with conflicting duplicates rejected. Export one unit-1 gauge grouped by observed status/platform/client version/mode/colo, no Boolean connected/active inference and no device/user labels. Expiring complete snapshots, genuine empty clearing, a documented bounded tuple cap/remainder. Named fields/config/ownership frozen in root brief before implementation; API drift entry and documentation in own scope. Dashboard is a later dedicated slice; no current populated-row/live-runtime claim.
Loop17 reserve now admitted after DEP1 healthy: read-only current official WARP documentation mapping for one headless service-token Docker client, exact enrollment steps and explicit seat/billing/policy impact. Root proof only if no seat/billing impact and only goal-granted writes; otherwise park without enrollment.
Loop24: prove raw-status AC1 on current main; unchanged existing test accepted if sufficient, otherwise red-first repair and review.
Implementation Notes
Loop15 source delivered at B6 461185cbee8b2e3302137251434e80eed6f4b49d and panel B7 e8c8028157b6550ca76d50eef7fe0d65c7756252. Exact-source independent reviews passed, full required gates and complete CodeRabbit source coverage passed, strict net/all-new-history raw hits were empty before each push. B6 CI36980016542 and B7 CI36982507562 all six jobs passed; nine and eight applicable workflows respectively passed; auto-RC separate. B7 Grafana sync36982507472 succeeded. Actual configuration GET found panel2325 and matching layout/element keys, body hash5cd928fc53017256c37e8de423857df83529ed1c1c75f90ac96c6dccd8554102. Raw equality and the initial mappings-only comparison remain false: the only actual differences are omitted redundant organizer spec.id equal to kind and added empty group. Exact kind/options/every-other-panel-field match after those two specific canonicalizations. No browser, production datasource frame, live fleet values, release or sustained-hour proof is claimed. AC2-5 are checked at their explicit source/documentation/panel-source criteria. AC1 remains open: source exports unique recently seen counts by raw status/platform/version/mode/colo with locally proved full pagination, but documentation does not define a connected status classification. No Boolean connected inference or acceptance-criterion rewrite was made. Initial API rows remained empty; populated shape and paging are doc-derived/local fixtures, not live rows. Default collector remains off.
Loop17 reserve docs mapping returned ineligible after healthy0.16.0 DEP1. Official headless Linux service-token flow is described, but no-seat/no-billing impact for this Free account is not established and authoritative Docker image/capability/policy-impact evidence is incomplete. Park WARP-PROOF without enrollment, service token, include rule, credentials or host project writes; proof attempt unconsumed. No connected/fleet Boolean or populated device proof claimed. Resume only with current authoritative fence evidence and permitted container plan.
Loop24: 1 test-coverage implementation attempt. Raw status decision accepted. TestRawFleetGroupingAcrossThreePagesWithShortFinalPage proves exact five-dimensional tuples across 4/4/3 rows and ignores connected Boolean, with no per-device attributes. Base production was already correct; reviewed mutation-red proves new coverage, not a production bug. Landed 4a74ad304fdb0cd5fe2f59b084c9fc97db0e4883 after immutable just check and security PASS; exact CI37374331818 all required jobs success, composed G-W1 just check exit0. No live populated fleet or hour proof claimed.
Final Summary
Loop24 closes AC1 under owner raw-status decision with fixture-proved grouping/full pagination on current main; no inferred connected classification.