Crest sends passkey requests to the macOS sheet first. Chromium asks that
sheet for this Mac's passkeys only, so with none for the site it ended
without showing anything, and Chromium stopped at "No passkeys available"
with no way to use a phone or a security key. The request now goes on in
Chromium's own list, which offers the phone's QR code and security keys.
Choosing a passkey from another device in a sign-in field's suggestions goes
to that list without reopening the macOS sheet. The engine notes now say the
sheet offers no such fallbacks.
Signed-off-by: Paul Davis <pauldavis101@gmail.com>
What changed
On Chromium pages, signing in with a passkey that isn't on this Mac stopped at "No passkeys available", with no way to use a phone's QR code or a security key.
setShouldShowHybridTransport:false). With none for the site, macOS ends the request without showing anything, and Chromium went to its no-passkeys error.Now, when the system sheet Crest opened ends with no passkey for the site, the request goes on in Chromium's mechanism list, which offers the phone's QR code and security keys. This applies only when that list has something other than iCloud Keychain, and the request stays open meanwhile. A person's own Cancel in the macOS sheet is a separate path and behaves as before. Choosing "a passkey from another device" in a sign-in field's passkey suggestions now goes straight to that list instead of the macOS sheet, which can't offer it. The engine notes and comments are corrected.
Closes #447
#968 (Microsoft sign-in passkeys) may be this path, if the person's passkey is on a phone; that report needs more detail to say.
Engine. This changes engine inputs (
Patches/native-host.patch:authenticator_request_dialog_controller.{h,cc};host-inputs.json). It is part of a stack that ships with one engine, built and published from the top PR.Stack, merged bottom up: #974 → #975 → #976 → #977 → #978 → #982 → #983 → #984. This is #978; the top PR carries the engine key.
Validation
The changed hunks apply without fuzz to the pinned 156 sources and give the recorded hashes, and the engine builds.
Not run: the positive path. Review packages don't carry the browser passkey entitlement, so they keep Chromium's own sheet and never reach Crest's system-sheet dispatch. It needs the installed development build signed with the production identity. Checklist for that build, in a Chromium tab:
Gates on the stack:
apply-chromium-host.pyvalidates the host inputs and installs them, the engine builds with no work left (ninja -n),check-version.sh --fix-commit,check-public-source.py,release_note_catalog.py,check-architecture.py,audit-licenses.py,git diff --check, and the 47 script tests pass. No new tests: the engine overlay and host patch have no unit test target.AI usage
crest-contributionskill (.agents/skills/crest-contribution/SKILL.md), followed it, and reviewed every generated line.Boundaries
Documentation/ReleaseNotes.json.Scripts/check-version.sh --fix-commit.CONTRIBUTING.md.Summary by CodeRabbit