Journal v1.12.1: fix NullReferenceException when adding map section
Details
The MapHeightSelector ComboBox fires SelectionChanged during XAML
InitializeComponent (due to SelectedIndex="1"), before named controls
are resolved. Added null-conditional checks on MapHeightSelector and
MapContainer to guard against the initialization race.
Journal v1.12.0: add notification reminders with settings overlay
Details
Add configurable journal entry reminders that fire OS-level
notifications at user-specified times on selected days of the week.
Users access settings via the gear icon in the Journal toolbar.
New files:
- JournalPlugin.Reminders.cs: IReminderProvider implementation that
reads reminder settings and returns ReminderInfo for the current day
- Models/JournalReminderSettings.cs: data model for reminder config
- ViewModels/JournalSettingsViewModel.cs: settings overlay VM with
add/remove/save/cancel for reminder list
- ViewModels/JournalReminderItemViewModel.cs: per-reminder VM with
time picker and day-of-week toggle bindings
- Views/JournalSettingsOverlay.axaml: ModalOverlay with TimePicker,
circular day-of-week toggle buttons, enable/disable toggle per
reminder, and add/remove controls
Modified files:
- JournalPlugin.cs: add IReminderProvider to class declaration,
register capability, pass Host.Settings to ViewModel
- PLUGIN_CONTEXT.md: document notification reminders section
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.
Journal v1.11.0: rich text editor integration for text sections
Details
Replace plain TextBox controls with RichTextEditor (WYSIWYG inline markdown)
in text section editors and quick-capture card. Add persistent FormattingToolbar
with bold/italic/underline/strikethrough/code/link buttons. Text sections in
read-only views (focused view, section grid) now render formatted text via
RichTextEditor IsReadOnly mode. Feed card previews strip markdown to plain text
via updated StripLinksConverter. Search indexing and RAG chunks strip markdown
before indexing. Backward-compatible — existing plain text entries render
identically since plain strings are valid inline markdown.
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.
Get notified about new releases