Route Whisper transcriptions to Duncan when no text input is focused
Details
When Cmd+M is pressed without a text input focused, the speech recording
now proceeds normally and routes the transcription to Duncan's AI tray
instead of silently discarding it. This enables voice commands:
- MainWindow.Speech.cs: removed early return when no text control is
focused — always start recording regardless of focus state
- MainWindow.axaml.cs: OnTranscriptionReady routes to
AiTrayVM.SendVoiceMessageAsync() when _speechTargetControl is null,
and auto-opens the AI tray panel
- AiSuggestionTrayViewModel.Chat.cs: added SendVoiceMessageAsync() that
sets ChatInputText and triggers the standard send pipeline (RAG +
intent classification)
Flow: Cmd+M → record → Whisper transcribe → no text field? → Duncan
processes via RAG + intent engine → shows response/action in AI tray.
Move inline tests to integration tests for crdt, crypto, ffi
Details
Migrate remaining #[cfg(test)] inline test modules to tests/ directories.
Crates migrated:
- privstack-crdt: 18 pn_counter tests → tests/pn_counter_tests.rs
- privstack-crypto: 5 recovery tests → tests/recovery_tests.rs
- privstack-ffi: 337 tests → tests/ffi_tests.rs (biggest migration)
FFI crate changes:
- Added "rlib" to Cargo.toml crate-type for integration test linking
- Made DTOs pub: SyncEventDto, DiscoveredPeerInfo, SyncStatus,
CloudFileInfo, LicenseInfo, ActivationInfo, FfiDeviceInfo,
SdkRequest, SdkResponse (with pub fields)
- Made functions pub: init_core, init_with_plugin_host_builder,
license_error_to_ffi, nullable_cstr_to_str, to_c_string
- Made EntityRegistry methods pub: new, register_schema, get_schema,
get_handler, has_schema
- Made HANDLE static pub, plugin_ffi module pub
Remaining #[cfg(test)] in cloud/config.rs and crypto/key.rs are
test-only constructors (CloudConfig::test, KdfParams::test), not
inline test modules.
Total: 360 integration tests, 0 inline test modules remaining.
Move inline tests to integration tests for ppk, plugin-sdk, plugin-host
Details
Migrate all #[cfg(test)] inline test modules to tests/ directories as
proper integration tests. This enforces the public API boundary and
ensures tests only exercise exported interfaces.
Crates migrated:
- privstack-ppk: 21 tests → tests/ppk_tests.rs
- privstack-plugin-sdk: 34 tests → tests/types_tests.rs
- privstack-plugin-host: 236 tests across 5 new files
(permissions, policy, wit_types, sandbox, manager)
Visibility changes to support integration tests:
- lib.rs: re-export TrackingLimiter, PluginState, AuditConfig
- wit_types.rs: make to_core_field() and to_core() pub
- manager.rs: remove #[cfg(test)] from new_for_test
- sandbox.rs: make track_fuel_consumption and last_fuel_consumed pub
Total: 291 integration tests, 0 inline tests remaining in these crates.
Add core test coverage: sync error/cloud + desktop services/SDK (518 C# tests)
Details
Rust (28 new tests):
- error_tests.rs: all 10 SyncError variants, Display, Debug, std::error::Error,
SyncResult, From<serde_json::Error>, unicode, edge cases (16 tests)
- cloud_storage_tests.rs: CloudStorageConfig defaults/custom/serde,
CloudFile create/clone/serde, ChangeSet empty/populated/clone (12 tests)
C# Desktop Services (5 new test files):
- EntityTypeMapTests: lookup roundtrips, uniqueness, all fields non-empty (14 tests)
- StringHelpersTests: emoji stripping, null/empty, accented/CJK preservation (8 tests)
- FocusModeServiceTests: state toggle, event firing, duplicate suppression (7 tests)
- QuickActionServiceTests: action collection, caching, invalidation, find by
ID/shortcut, case insensitivity, provider exception handling (11 tests)
- PlatformDetectorTests: platform/arch detection, memory, GPU/CPU detection,
hardware assessment, AI recommendation (11 tests)
C# SDK Tests (3 new test files):
- WikiLinkParserTests: wiki-link/privstack URL parsing, mixed formats,
ExtractContentFromEntity, ExtractSnippet, regex patterns (16 tests)
- UnixTimestampConverterTests: number/string/ISO reads, millis write,
roundtrip, epoch zero, negative, invalid token (8 tests)
- GraphProviderModelsTests: node CompositeKey, edge/content/link construction,
GraphContribution defaults and populated (8 tests)
C# Models (1 new test file):
- PropertyModelsTests: PropertyDefinition, PropertyGroup, RelationEntry,
PropertyTemplate, EntityMetadata — defaults, serialization, record with (21 tests)
Total C# tests: 379 → 518 (139 new)
Total Rust sync tests: +28
Get notified about new releases