Skip to content

test(tauri): on-device DNS-SD verification runbook + Test-tab checks (#334) - #345

Closed
momics wants to merge 3 commits into
momics-interop-test-harness-tabfrom
momics-dns-sd-device-verify
Closed

test(tauri): on-device DNS-SD verification runbook + Test-tab checks (#334)#345
momics wants to merge 3 commits into
momics-interop-test-harness-tabfrom
momics-dns-sd-device-verify

Conversation

@momics

@momics momics commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Stacked on momics-interop-test-harness-tab (draft PR #343, the #340 Test tab). Base this PR on momics-interop-test-harness-tab, not main.

Why

The #330 DNS-SD standardization landed mobile-native Tauri plugin code that no CI job compiles or runs (no iOS/Android runner). Two of those changes are review-only defect fixes needing on-device confirmation:

  • Android serialized resolve queue (IrohHttpPlugin.kt) — NsdManager.resolveService() allows one outstanding resolve; concurrent calls previously failed FAILURE_ALREADY_ACTIVE and silently dropped records.
  • iOS re-emit on record change (IrohHttpPlugin.swift) — dedup changed from one-shot Set<String> to [String: DnsSdRecordSnapshot] (snapshot = TXT + addrs).

An automated session can't press buttons on hardware, so this PR delivers the tooling for the operator's real-device pass.

What

Runbookdocs/internals/dns-sd-device-verification.md: each of the 6 acceptance criteria → concrete Test-tab steps → exact greppable IROH_DNSSD_CHECK / native pass-fail signatures, a device/OS results matrix ready to paste into #334, and follow-up-issue filing guidance. Linked from the internals README.

Test-tab affordances (opt-in, dev-only, force-stopped on page teardown; new cards, no regression to the existing Test flow):

  • browsePeers() isActive transition watch — criterion 2
  • multi-service burst advertise/browse for the Android resolve queue — criterion 3
  • live TXT/port mutate control for the iOS re-emit dedup — criterion 4
  • greppable port/host logging on the generic browse loop so iOS metadata-only (port=0, host=undefined) is directly confirmable — criterion 5

Native additive log lines (same IROH_DNSSD_CHECK prefix, log-only): Kotlin drainResolveQueue (dequeue/resolved/failed + queue depth) and the Swift re-emit branch (new vs reemit + rev).

Key finding

iOS dedups on a TXT + addrs snapshot (its generic browse never resolves an endpoint, so port is always 0). A port-only change is invisible on iOS — the re-emit trigger must be a TXT change. Documented in the runbook; the mutate control bumps a TXT rev (and toggles port for Android's benefit).

Verification (local)

  • cargo check -p iroh-http-core and the tauri plugin crate — clean
  • npm run build:shared then npm run typecheck (shared/node/tauri) — clean
  • example vite build — succeeds (26 modules)
  • example tsc — only 3 pre-existing errors, none in the new code

Native plugin edits are additive log-only (no CI compiles them). Criteria 1–5 are only satisfied by the operator's on-device pass — this PR makes that pass runnable and unambiguous.

Refs #334

momics and others added 3 commits July 12, 2026 09:55
…hecks

The mobile-native DNS-SD plugin changes from #330 are compiled/run by no CI
job. This adds the tooling to verify them on real iOS/Android hardware.

Runbook (docs/internals/dns-sd-device-verification.md) maps each #334
acceptance criterion to concrete Test-tab steps and exact greppable pass/fail
log signatures, plus a device/OS results matrix ready to paste into the issue
and follow-up-issue filing guidance.

Test-tab affordances (opt-in, dev-only, torn down on teardown), all emitting a
stable IROH_DNSSD_CHECK prefix:
- browsePeers() isActive transition watch (criterion 2)
- multi-service burst advertise/browse for the Android resolve queue
  (criterion 3)
- live TXT/port mutate control for the iOS re-emit dedup (criterion 4)
- greppable port/host logging on the generic browse loop so iOS metadata-only
  (port=0, host=undefined) is directly confirmable (criterion 5)

Native additive log lines with the same prefix trace the two defect fixes:
Kotlin drainResolveQueue (dequeue/resolved/failed with queue depth) and the
Swift re-emit branch (new vs reemit with rev).

Note: iOS dedups on a TXT+addrs snapshot (port is always 0), so the re-emit
trigger must be a TXT change, not port — documented in the runbook and driven
by the mutate control.

Refs #334

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add the #334 on-device verification runbook to the top-level docs index so
it is discoverable from the entry point, not only the internals README.

Refs #334

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@momics

momics commented Jul 12, 2026

Copy link
Copy Markdown
Owner Author

Superseded by the consolidation PR #350, which was built from the device-validated integration branch and folds this work in. Closing to reduce review noise — the branch and its commits remain intact as the regression-first record, and can be reopened if needed. All fixes here are verified present in #350 (which is CI-green and device-tested).

@momics momics closed this Jul 12, 2026
@momics
momics deleted the momics-dns-sd-device-verify branch July 20, 2026 08:56
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