Find entries quickly by path/name without decrypting their contents.
Scope
Add a top-level Search destination with debounced text input and storage-owned typed search results.
Match path/folder/filename according to crates/storage rules and show enough canonical location context to distinguish duplicate names.
Open a selected result in the same structured viewer/navigation model as Passwords.
Use Flow/ViewModel state for query, loading, results, empty/error state, cancellation, and latest-query-wins semantics.
Do not store query history by default; never expand this feature into decrypted grep without a separate explicit security design.
Preserve safe query state across rotation/window changes, but clear it on manual lock/process recreation if the query can reveal sensitive organizational metadata under the selected threat policy.
Cover Unicode, case behavior, path separators, very large stores, repository refresh, and stale result identities with Rust fixtures.
Acceptance criteria
Search returns the same typed matches as the shared Rust API and never decrypts an entry.
Rapid typing/cancellation cannot display results for an older query.
Selecting a stale/deleted result produces a safe typed recovery, not the wrong entry.
Compact and expanded layouts, TalkBack, keyboard search action, and empty/error states are complete.
Kotlin performs no path matching or repository traversal.
Depends on hierarchical navigation and the Compose shell. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
## Goal
Find entries quickly by path/name without decrypting their contents.
## Scope
- Add a top-level Search destination with debounced text input and storage-owned typed search results.
- Match path/folder/filename according to `crates/storage` rules and show enough canonical location context to distinguish duplicate names.
- Open a selected result in the same structured viewer/navigation model as Passwords.
- Use Flow/ViewModel state for query, loading, results, empty/error state, cancellation, and latest-query-wins semantics.
- Do not store query history by default; never expand this feature into decrypted grep without a separate explicit security design.
- Preserve safe query state across rotation/window changes, but clear it on manual lock/process recreation if the query can reveal sensitive organizational metadata under the selected threat policy.
- Cover Unicode, case behavior, path separators, very large stores, repository refresh, and stale result identities with Rust fixtures.
## Acceptance criteria
- Search returns the same typed matches as the shared Rust API and never decrypts an entry.
- Rapid typing/cancellation cannot display results for an older query.
- Selecting a stale/deleted result produces a safe typed recovery, not the wrong entry.
- Compact and expanded layouts, TalkBack, keyboard search action, and empty/error states are complete.
- Kotlin performs no path matching or repository traversal.
Depends on hierarchical navigation and the Compose shell. Part of #87.
## Android support update (2026-10-08)
User-directed scope: Android release and CI targets are **arm64-v8a** and **armeabi-v7a**. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
hugo
added this to the 06 - Implement an Android version of the software milestone 2026-08-17 19:12:20 +00:00
Implemented the top-level Android Search destination using storage-owned name/path matching without entry decryption. The private Rust API reuses the shared search rules and returns typed canonical rows with object revisions; opening validates the identity/revision and hands off to the same structured Passwords viewer. Deleted/replaced results clear selection and use typed stale-navigation recovery.
The Kotlin facade exposes debounced StateFlow state with cancellation, latest-query-wins guards, immediate keyboard Search/refresh, explicit loading/cancelled/empty/error/clear states, lazy results and accessible canonical location/action labels. Queries remain in memory through rotation/window changes, are excluded from serialized saved state/history, and clear synchronously on manual lock/process recreation. Pending search selection is preserved across viewer resume/rotation instead of being replaced by an older saved navigation state. Kotlin performs no repository traversal or path matching.
Acceptance review covered the complete storage/bridge/facade/viewmodel/navigation/DI/UI path, all callers, privacy boundaries and lifecycle races. Rust fixtures prove shared-rule equivalence, Unicode/case and literal separator behavior, duplicate location context, invalid ciphertext, refresh, stale replacement/deletion, invalid identities and a 5,000-entry store. Coroutine regressions cover debounce, uncancellable completions, latest-query wins, cancellation, retry and clearing. Native facade instrumentation opens real Rust search results in the viewer while locked. UI tests cover compact/expanded layouts, accessibility action semantics, keyboard Search, recovery, pending-selection resume, real ViewModel recreation, saved-bundle exclusion and manual-lock clearing.
Validation: all four required Rust workspace gates passed (local mock-server/socket tests were run with authorized access). Full Android debug/release/AAB, unit, lint, ktlint, architecture, package and dependency gates passed for both ARM ABIs. App/core/bridge instrumentation, native cold-load checks and five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB. Computer use in Android Studio's existing embedded emulator verified the public result fixture, cancellation/selection/clear controls and the live Rust-backed Search destination.
Behavior and test evidence are documented in docs/android/name-search.md. ARMv7 receives build/package validation because no suitable emulator image is available. Spoken TalkBack output is not claimed; accessibility semantics/actions were exercised. Physical devices are excluded by the milestone scope. No Apple UI/project changed.
Delivered in commit c7703d8efda325574e615361cffe7b3e2596e174.
Implemented the top-level Android Search destination using storage-owned name/path matching without entry decryption. The private Rust API reuses the shared search rules and returns typed canonical rows with object revisions; opening validates the identity/revision and hands off to the same structured Passwords viewer. Deleted/replaced results clear selection and use typed stale-navigation recovery.
The Kotlin facade exposes debounced StateFlow state with cancellation, latest-query-wins guards, immediate keyboard Search/refresh, explicit loading/cancelled/empty/error/clear states, lazy results and accessible canonical location/action labels. Queries remain in memory through rotation/window changes, are excluded from serialized saved state/history, and clear synchronously on manual lock/process recreation. Pending search selection is preserved across viewer resume/rotation instead of being replaced by an older saved navigation state. Kotlin performs no repository traversal or path matching.
Acceptance review covered the complete storage/bridge/facade/viewmodel/navigation/DI/UI path, all callers, privacy boundaries and lifecycle races. Rust fixtures prove shared-rule equivalence, Unicode/case and literal separator behavior, duplicate location context, invalid ciphertext, refresh, stale replacement/deletion, invalid identities and a 5,000-entry store. Coroutine regressions cover debounce, uncancellable completions, latest-query wins, cancellation, retry and clearing. Native facade instrumentation opens real Rust search results in the viewer while locked. UI tests cover compact/expanded layouts, accessibility action semantics, keyboard Search, recovery, pending-selection resume, real ViewModel recreation, saved-bundle exclusion and manual-lock clearing.
Validation: all four required Rust workspace gates passed (local mock-server/socket tests were run with authorized access). Full Android debug/release/AAB, unit, lint, ktlint, architecture, package and dependency gates passed for both ARM ABIs. App/core/bridge instrumentation, native cold-load checks and five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB. Computer use in Android Studio's existing embedded emulator verified the public result fixture, cancellation/selection/clear controls and the live Rust-backed Search destination.
Behavior and test evidence are documented in docs/android/name-search.md. ARMv7 receives build/package validation because no suitable emulator image is available. Spoken TalkBack output is not claimed; accessibility semantics/actions were exercised. Physical devices are excluded by the milestone scope. No Apple UI/project changed.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Find entries quickly by path/name without decrypting their contents.
Scope
crates/storagerules and show enough canonical location context to distinguish duplicate names.Acceptance criteria
Depends on hierarchical navigation and the Compose shell. Part of #87.
Android support update (2026-10-08)
User-directed scope: Android release and CI targets are arm64-v8a and armeabi-v7a. x86_64 Android is excluded for now. Validation for every Android milestone issue uses emulator devices only; physical-device testing and physical-device checklists are excluded. Record the limits of available ARM emulator/API images without claiming physical-device coverage.
Delivered in commit
c7703d8efd.Implemented the top-level Android Search destination using storage-owned name/path matching without entry decryption. The private Rust API reuses the shared search rules and returns typed canonical rows with object revisions; opening validates the identity/revision and hands off to the same structured Passwords viewer. Deleted/replaced results clear selection and use typed stale-navigation recovery.
The Kotlin facade exposes debounced StateFlow state with cancellation, latest-query-wins guards, immediate keyboard Search/refresh, explicit loading/cancelled/empty/error/clear states, lazy results and accessible canonical location/action labels. Queries remain in memory through rotation/window changes, are excluded from serialized saved state/history, and clear synchronously on manual lock/process recreation. Pending search selection is preserved across viewer resume/rotation instead of being replaced by an older saved navigation state. Kotlin performs no repository traversal or path matching.
Acceptance review covered the complete storage/bridge/facade/viewmodel/navigation/DI/UI path, all callers, privacy boundaries and lifecycle races. Rust fixtures prove shared-rule equivalence, Unicode/case and literal separator behavior, duplicate location context, invalid ciphertext, refresh, stale replacement/deletion, invalid identities and a 5,000-entry store. Coroutine regressions cover debounce, uncancellable completions, latest-query wins, cancellation, retry and clearing. Native facade instrumentation opens real Rust search results in the viewer while locked. UI tests cover compact/expanded layouts, accessibility action semantics, keyboard Search, recovery, pending-selection resume, real ViewModel recreation, saved-bundle exclusion and manual-lock clearing.
Validation: all four required Rust workspace gates passed (local mock-server/socket tests were run with authorized access). Full Android debug/release/AAB, unit, lint, ktlint, architecture, package and dependency gates passed for both ARM ABIs. App/core/bridge instrumentation, native cold-load checks and five cold starts passed on ARM64 API 26/4 KB, API 37/4 KB and strict API 37/16 KB. Computer use in Android Studio's existing embedded emulator verified the public result fixture, cancellation/selection/clear controls and the live Rust-backed Search destination.
Behavior and test evidence are documented in docs/android/name-search.md. ARMv7 receives build/package validation because no suitable emulator image is available. Spoken TalkBack output is not claimed; accessibility semantics/actions were exercised. Physical devices are excluded by the milestone scope. No Apple UI/project changed.