Release/v0.5.1 - #41
Merged
Merged
Conversation
* Bump Flutter version to 3.47.5 * Harden Snap artifact selection and add runtime verification in Linux CI workflow * Validate built Snap artifacts by checking build outcomes, workspace path boundaries, build start timestamp, and `snapcraft.yaml` hash integrity. * Add verification checks for Snap shared runtime libraries, WebKit helper processes, packaged Git/SSH tools, GStreamer plugins, symlinked fonts, and Yaru themes. * Optimize Snap packaging and deduplicate primed assets * Remove redundant platform-supplied stage packages from `snapcraft.yaml`. * Introduce `gnome-46-2404-prime-exclusions.amd64` to purge duplicate GNOME and GStreamer runtime files during priming. * Replace duplicate font copies and Yaru themes/icons in the snap prime phase with symlinks to staged system assets. * Optimize Snap packaging audit tests and configuration for GNOME extension runtime * Refactor audit tests to expect standard platform libraries (`libsecret-1-0`, `libhandy-1-0`, `libwebkit2gtk-4.1-0`, GTK/GLib, GStreamer base/good) to be provided by the GNOME extension rather than stage packages. * Update Snapcraft audit assertions to check for font, theme, and icon resource symlinking instead of directory copying. * Add packaging audit test cases verifying `gnome-46-2404-prime-exclusions` runtime library deduplication and retention of required private packages (`gstreamer1.0-libav`, plugins-bad/ugly, Noto fonts). * Enhance audit tests for local snap builder script output and GitHub Actions CI snap build step outcome checks. * Clarify development repack scope in `build_install_snap_local.sh` * Add documentation comments and script runtime notices clarifying that local builds perform a development repack that reuses scaffold dependencies. * Direct users to the clean Snapcraft procedure in `README.md` for release, security, and package change builds. * Add Snap release and security build guidelines to README * Document authoritative Snapcraft build steps for releases and security refreshes. * Clarify that `tools/build_install_snap_local.sh` is strictly for local development and not release artifacts. * Add password-manager-service plug and harden Linux Snap verification * Add `password-manager-service` plug to Snap configuration and update confinement documentation for AI provider key storage. * Enhance Linux CI workflow with strict dynamic library resolution checks (`inspect_dependencies` and `require_resolution`) for Snap packages. * Update local Snap build script to replace scaffold font symlinks with bundled fonts during local repack. * Add audit tests for local font repacking and confined runtime dependency validation. * Stabilize asynchronous Flutter test completion checks * Add headless Chrome test suite for DevTools evaluation
* Add input validation for embedded NUL characters and fix Thai word boundaries * Add test script for spelling dictionary installation process * Add comprehensive tests for Markdown and Writerside XML spelling projections * Improve spelling service robustness with enhanced caching, dictionary installation locking, and personal word handling refinements * Enhance spelling settings loading with error handling, retry mechanism, and state management improvements * Add localized strings for spelling settings error messages and retry actions * Refine spelling preparation logic, enhance Markdown projection accuracy, and expand tests for spelling service, settings, and inline images. * Refine personal store conflict handling, enhance Markdown spelling projection with improved inline syntax and fence parsing, and expand projection and spelling service test coverage. * Expand Markdown spelling projection with tab handling in list fences, improve blank line continuation logic, and add comprehensive tests for fence parsing. * Improve markdown spelling source mapping * Enhance title mapping for destination-only links and images, ensuring no false titles are exposed. Update tests to verify correct behavior. * Enhance spellcheck projection line break handling, HTML parsing, and session recovery * Add `interpretHtmlSyntax` option to `_MarkdownScanner` to disable HTML parsing within attribute and title sub-scanners. * Implement `_scanMappedLabel` and inline line break splitting to properly project multiline link labels and text nodes with newline transformations. * Include `markdownParenthesizedTitle` in WYSIWYG projection context assertions. * Track project word store read failures in `SpellingSessionController` to allow restoring the previous state upon successful read recovery. * Improve multiline Markdown label spellchecking and refine project store error recovery * Expose raw positioned line breaks and container continuation prefixes in `BusyMarkMappedInlineParse`. * Refactor `MarkdownSpellingProjector` label scanning to process multiline link and image labels using exact line break and continuation syntax mappings. * Isolate project store read failure state in `SpellingSessionController` to ensure accurate recovery without clearing unrelated personal storage errors. * Add test cases for positioned line breaks in mapped blocks, multiline label spelling projections, and project store failure recovery. * Support multiline nested inline elements in markdown spelling projection * Include image labels in opaque syntax spans and track internal newlines via `opaqueSemanticBreaks`. * Update inline projection scanning to process nested opaque spans and recognized links before advancing past raw physical line breaks in link labels. * Add unit tests covering source projection and WYSIWYG rich text correction for nested multiline code spans and image destinations within link labels. * Support spellchecking code-styled image alt text and hard breaks in link labels * Add `_parseMappedImageLabel` to translate normalized line break offsets back to raw source coordinates for image label inline parses. * Process hard breaks and code spans within link and image labels during Markdown spelling projection instead of treating code spans in image alt text as opaque. * Add `_scanImageCode` to parse code backticks in image alt text and project spellcheckable semantic content. * Add test coverage for spelling projection and rich document correction of code-styled image alt text and inline breaks in link labels. * Preserve line breaks and source offsets for code spans in Markdown image labels * Update `_parseMappedImageLabel` to process positioned line breaks and translate structural continuation prefixes within image label ranges. * Enhance `_MappedImageCode` to track individual text and line-break units with exact source boundary offsets. * Introduce `_ParsedImageLabel` to return mapped inline parses alongside extracted image code spans. * Add unit and rich-editor tests for spellcheck projection on code-styled image descriptions within lists, blockquotes, and multiline continuations. * Support Markdown image alt-text semantics in source mapping and spelling projection * Add `imageDescriptionText` to `BusyMarkMappedInlineParse` to extract alt-text semantics during inline parsing. * Update `MarkdownSpellingProjector` validation checks to compare against `imageDescriptionText` rather than concatenated inline plain text. * Add test cases for image alt-text extraction and spelling projection involving inline code and hard line breaks. * Preserve Markdown source syntax during rich spelling corrections and harden dictionary catalog publication * Preserve original Markdown syntax, HTML entities, and code spans during rich text spelling corrections by applying replacement plans directly to document source. * Map image alternative text inlines between Markdown source and WYSIWYG editor spelling projections. * Add raw HTML text annotations and code-span validation to prevent invalid replacements inside Markdown code spans. * Acquire publication locks and verify directory state identities during dictionary installation and removal to prevent stale deletion races. * Implement single-flight catalog refreshing in `SpellingSessionController` and trigger re-indexing when native dictionary loads fail. * Ensure single-step undo history recording when applying prepared spelling corrections in the WYSIWYG editor. * Fix spellchecking projections and corrections for nested images and math blocks * Apply spelling replacement plans directly to math editable field text when blocks contain math rather than attempting inline-leaf edits. * Preserve authored math field source for non-dirty blocks containing images during inline text serializations. * Enhance image description tracking and bounds validation across spelling projections to support nested images and math blocks. * Improve mapped image destination matching to account for multiline continuation prefix encoding differences. * Refactor rich-to-source atom projection mapping to handle logical atoms spanning multiple rich segments. * Add tests verifying nested image spellcheck policy, math-adjacent image correction, and undo/redo state restoration.
* Offload Writerside model loading to background workers and validate input provenance * Introduce `WritersideExecution` to offload Writerside module and project parsing, indexing, and resolution to background worker isolates. * Add `InputObserver` and `WritersideInputSnapshot` to record filesystem reads, directory listings, and file types to verify model freshness against disk state. * Refactor `WorkspaceController` to queue document preparations, reconcile file monitor events, and prevent stale background jobs from publishing obsolete workspace states. * Enhance `WorkspaceFileMonitor` event classification to ignore internal topic staging and quarantine paths during file moves and deletions. * Update `WritersideTopicRemovalService` and topic creation workflows to verify input snapshots and disk consistency before committing file modifications. * Add unit and responsiveness tests covering isolate execution, input snapshot validation, and workspace state reconciliation. * Harden Writerside async state reconciliation * Add unit tests for Writerside input snapshot consistency * Add unit tests in `writerside_input_snapshot_test.dart` to verify `WritersideInputRecorder` observation behavior. * Test partial, complete, and repeated directory scanning scenarios for snapshot state consistency. * Validate handling of directory listing failures, recovery, rescans, and entry modifications.
* Fix WYSIWYG multi-block selection * Complete editor selection lifecycle * Add comprehensive widget tests for WYSIWYG editor session restoration and selection lifecycle * Add test cases for session recreation and reuse across paragraphs, lists, and tables with reverse selections and external history. * Verify ordinary composition matching, immediate Unicode input acceptance, and focus handoff supersession. * Validate scrolled viewport retention and session offset clamping during state restoration.
* Prioritize native GTK style properties (`accent_bg_color` and `theme_selected_bg_color`) over D-Bus portal properties for Linux system accents. * Implement `GtkAccentObserver` and a `com.busymark.app/gtk_accent` platform channel to observe and stream GTK theme invalidations to Dart. * Introduce `LinuxAccentCoordinator` to manage `LinuxAccentSource` subscriptions and enforce priority fallback from GTK to Gnome/Freedesktop portals. * Refactor `LinuxPortalAppearance` to implement `LinuxAccentSource` with a testable `LinuxPortalAccentIO` D-Bus boundary. * Add native C++ probing tool (`test_gtk_accent.sh` and `gtk_accent_probe.cc`) and Dart test suites to validate accent resolution and platform channels.
* Introduce interactive native dialog support in `NativeWritersideDialogService` (`showCreateTopic`, `showRenameTopic`, `showTocText`, `showExistingTopicPicker`) using session-based method channel callbacks. * Implement GTK interactive form components in `writerside_dialog_host.cc` to handle user input, surface validation errors, and manage modal lifetime. * Extract shared file name and title validation logic into `WritersideTopicCreationForm` for consistency across native GTK and Flutter fallback interfaces. * Coordinate application focus and Linux header bar state during native modal interactions via `showBusyMarkNativeDialog`. * Upgrade Flutter fallback dialogs (TOC operations, local history, settings, spelling, find usages) to use modern components like `BusyMarkDialogShell`, `BusyMarkDialogButton`, and `BusyMarkGroupedTextEntry`. * Update smoke, source audit, and interaction tests to validate GTK dialog method channel integration, fallback UI components, and shared validation behavior.
* Replace native GTK dialogs for interactive Writerside operations (New Topic, Rename, TOC Group, Topic Picker) with `BusyMarkModalEditorScaffold` and standard Flutter modal dialogs. * Remove `showBusyMarkNativeDialog`, `NativeWritersideDialogService` interactive methods, and `WritersideTopicCreationForm` as their logic is now fully handled in Flutter. * Remove C++ `InteractiveDialog` session management, GTK widget creation, and asynchronous callbacks from `linux/runner/writerside_dialog_host.cc`. * Add `set_dialog_direction` to the Linux runner to ensure surviving native dialogs (Edit Title, Duplicate Topic) recursively apply the application text direction to internal GTK widgets. * Update widget tests to remove native host mock channels and verify the new Flutter-based modal interactions. * Add `native_writerside_dialog_host_test.cc` to explicitly test GTK text direction application on simulated desktops.
* Update `BusyInlineStyleRange` and clipboard operations to serialize and retain inline attributes. * Introduce `busyMarkBareUrlAttribute` to distinguish structural autolinks and serialize them as plain text instead of delimited Markdown links. * Modify block split and text replacement logic to automatically recognize and refresh URLs during Enter and paste operations in eligible text blocks. * Implement URL recognition to preserve surrounding inline formatting while avoiding unintended parsing of other Markdown syntaxes. * Add comprehensive tests for bare URL destination updating, clipboard paste completion, explicit link retention, and exact text offset tracking.
* Implement bare URL reconstruction across block join operations (e.g., Backspace) to reconnect divided link components without disrupting existing semantics. * Retain complete URL destinations when applying interior inline formatting by saving them with explicit Markdown labels and entity references to prevent delimiter parsing issues. * Update `BusyMarkMarkdownSerializer` to properly track literal prefix lengths and entity offsets for partially formatted links and surrounding punctuation. * Refactor inline style merging to keep links intact across interior formatting boundaries instead of fragmenting them based on style priority. * Add comprehensive tests verifying URL rejoining, clipboard paste persistence, and round-trip serialization of formatted URL suffixes.
…TK integration bridges (#40) * Replace native GTK headerbar implementation with a Flutter-owned Linux window host, header layout (`BusyMarkLinuxHeaderLayout`), and canonical page frame supporting custom control clusters and native titlebar gestures. * Introduce native C++ bridges for GTK window preferences, active icon theme loading, dark theme preference, and animation setting notifications. * Standardize Workspace, Welcome, and Settings screens on `LinuxPageFrame` with retained crossfade view transitions. * Add localizations for window minimize, maximize, and restore controls across all supported languages. * Enhance Markdown serializer and parser to correctly handle bare URLs with trailing character-reference suffixes and formatting boundaries.
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.
No description provided.