feat(biometric): probe.biometric_signal + port-range fallback (v0.9.8)#111
Merged
Conversation
…h (v0.9.8) iOS 26 / Xcode 26.5 changed faceCapture.no-match so notifyutil no longer resolves LAContext.evaluatePolicy. The CLI now sends probe.biometric_signal after platform biometric commands; apps call awaitBiometricResult() from flutter_probe_agent to receive the result via a Dart Completer, bypassing the LAContext entirely in PROBE_AGENT builds. Also adds port-range fallback to ProbeServer: on bind failure, tries the next 10 ports (48686-48695) and emits PROBE_PORT_BUSY=<n> with a "(another probe agent is running)" hint when the occupied port responds to GET /probe/status with the probe-agent signature.
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.
Summary
faceCapture.no-matchnotifyutil notifications no longer resolveLAContext.evaluatePolicyon iOS 26 / Xcode 26.5. Added a newprobe.biometric_signal {result: bool}JSON-RPC command that the CLI sends after platform-level biometric commands. Apps callawaitBiometricResult()fromflutter_probe_agent(new public function) instead oflocal_auth.authenticate()in PROBE_AGENT builds — the result is delivered via a DartCompleter, bypassing LAContext entirely.ProbeServernow tries ports 48686–48695 when the preferred port is busy. For each busy port, it checksGET /probe/statusto detect whether another probe agent is already running, then logsPROBE_PORT_BUSY=<n> (another probe agent is running)orPROBE_PORT_BUSY=<n>accordingly. New/probe/statusendpoint returns{"agent":"flutter_probe","version":"..."}without requiring a token.Test plan
go test ./...— all 16 packages passdart analyze lib/— no issues in probe_agentbiometric_match.probe× 2,biometric_no_match.probe× 2) running in sequencebiometric match→ navigates to Dashboard ✓biometric no match→ shows "Authentication failed" banner ✓biometric match→ Dashboard ✓restart the app✓🤖 Generated with Claude Code