Skip to content

Invite device reports via pre-filled GitHub issues - #3

Merged
mannes merged 1 commit into
mainfrom
device-report
Sep 24, 2026
Merged

mannes merged 1 commit into
mainfrom
device-report

Conversation

@mannes

@mannes mannes commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Most drivers haven't met a real meter yet. This asks users to tell us how theirs behaves, without getting in the way.

What the user sees

A dismissible, non-blocking toast (bottom right):

  • A meter goes live on a driver that isn't live-tested → "UT181A is not yet confirmed on real hardware. Does it read right? Report it". The wording follows the driver's verification tier. Asked once per driver: dismissing or reporting is remembered in localStorage. Confirmed drivers and demo meters get no toast.
  • The chooser is dismissed, or connecting fails → "Meter not in the list, or won't connect? Tell us which one". Dismissing hides it until the next cancel or failure.

Both open a pre-filled GitHub issue form in a new tab. The app sends nothing itself; the user reviews and submits on GitHub.

What's in the report

Connected: advertised name, matched driver + verification tier, the matched service and its characteristics with their properties, Device Information strings (manufacturer / model / hardware / firmware / software) if the meter exposes them, and the browser. No readings, no raw frames. If we need a capture, we ask in the thread.

Connection problem: the browser and the error message, if there was one.

Changes

  • .github/ISSUE_TEMPLATE/device-report.yml and connection-problem.yml (labels device report / connection problem, both created)
  • packages/web-bluetooth: Transport.describe() returns a GattDescription. The Device Information reads are best-effort and happen only when the user clicks Report it, never while connecting. Transport.chosen is new. MeterSnapshot gains cancelled. MeterChannel mirrors driverId and cancelled. GattDescription is re-exported from @libreble/multimeter-react.
  • apps/web: lib/report.ts builds the issue URLs; components/ReportToast.tsx shows the toast
  • README: a paragraph under Supported meters & protocols

Testing

  • pnpm test: 622 pass, including new ones for describe(), the cancelled flag, the URL builder and the toast
  • pnpm typecheck, pnpm lint (2 existing warnings), pnpm format:check and pnpm build pass
  • Needs a hardware check: clicking Report it on a live meter shouldn't disturb the stream (the Device Information reads run alongside notifications)

The forms only resolve on main, so the pre-filled links fall back to the plain issue picker until this merges.

A dismissible toast, never in the way:
- a meter goes live on a driver that isn't live-tested: asks once per
  driver whether it reads right and opens the device-report issue form
  pre-filled with the advertised name, driver and verification tier,
  the GATT layout and any Device Information strings. No readings, no
  raw frames.
- the chooser is dismissed or connecting fails: offers the
  connection-problem form.
The app sends nothing itself; the user reviews and submits on GitHub.

MeterSession gains describe() and a cancelled flag; MeterChannel mirrors
driverId and cancelled.
@mannes
mannes merged commit 3e292de into main Sep 24, 2026
3 checks passed
@mannes
mannes deleted the device-report branch September 24, 2026 07:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant