What's New
Commit patch export
- New backend and command
export_commit_patch_fileto export patches built from one or more commits - Export supports selecting multiple commits and writes an aggregated patch (oldest → newest)
- Root (initial) commits are handled correctly and produce new-file hunks
- Exports include full index object IDs (
--full-index) and binary diffs for accurate round-trip application - CLI and gix backends return the same patch output
Commit message recovery
- New API
get_commit_message_recoveryand TypeScript typeCommitMessageRecovery - Reads the repository
COMMIT_EDITMSGfile and returns a cleaned message and timestamp when a draft exists - UI now offers a “Restore previous message” action when no draft is present and a recoverable edit message exists
- Commit box will clear saved drafts after a successful commit and preserve them after failures
SSH signing / allowed signers support
- New SSH allowed-signers status API
get_ssh_allowed_signer_statusand operationadd_ssh_signing_key_to_allowed_signers - CLI and gix backends inspect
user.signingkey,user.email, andgpg.ssh.allowedSignersFileto determine:- whether setup is needed
- whether the allowed signers file is configured / exists
- whether the signing key is present and trusted
- New types
SshAllowedSignerStatusandSshAllowedSignerReason - UI repair flows:
- Log/signature popover can show instructions and add the configured SSH signing key to the allowed signers file
- Identity panel surfaces allowed-signers state and lets users add the configured signing key
- Tests for status, adding keys, and edge cases (inline key, private key paired pub file, missing email, configured-but-missing-file)
Patch import: safer 3-way apply and conflict handling
- Import now supports three-way apply via
ImportPatchRequest.three_way - Three-way apply is used as a retry path when normal
git apply --binaryfails - Three-way apply blocks when tracked files are dirty and will return a clear error code when blocked
- Conflict results from 3-way apply are returned as an operation result (so the UI can route to conflict resolution)
- Tests covering three-way conflicts, blocked conditions, and partial/no-blob patches
File tree, unversioned items and staging improvements
- New unversioned “items” representation with file vs directory kinds (shows directories like
assets/) - Untracked directory rows can be selected and staged as a unit
- File tree compaction and default expand/collapse heuristics for large sections:
- Avoid expanding huge folders by default; allow manual expansion
- Selecting a compacted folder selects its descendants
- Large root-level lists are virtualized to keep UI responsive and allow scrolling to later rows
- Folder rows show "new" badge for directories introduced by the patch/untracked content
- Better handling of submodules in status and unversioned item filtering
Staging and operation feedback
- Introduced delayed operation feedback:
- Inline small banner after 500ms for quick operations
- Popup status overlay after 2500ms for long-running operations
- Staging operations (stage/unstage/all) are tracked with an operation lock so bulk actions are disabled while busy
- Visual inline feedback for staging operations in both staging view and centre panel
- Staging UI: selection, bulk actions, and virtualized lists handle large selections and files with spaces robustly
Commit box and draft UX
- Commit message drafts are saved per-repository while typing and restored on revisit
- Merge messages and amend interplay handled correctly (merge messages not overwritten by drafts)
- Offer to restore
COMMIT_EDITMSGcontent when no local draft exists (and it's different from the latest commit message) - Commit API updated to allow async result (commit handler can return false to indicate failure and keep draft)
- Clear drafts only on confirmed successful commit
Log and refs UI improvements
- Commit ref chips layout refined:
- Prominent ref line for selected/checkout commits, inline meta refs for others
- Priority ordering of refs (HEAD, local branches, upstream, remotes, tags)
- Overflow handling with descriptive “N more refs” tooltips
- Signature popover:
- Copy actions for signer and fingerprint
- Repair flow button for SSH signing (adds configured key to allowed signers if available)
- Explanatory text for SSH allowed-signers status
- Context menu additions: export commit patch(s) from a single commit or a multi-selection
API, TypeScript and wiring
- New API endpoints and TypeScript functions:
exportCommitPatchFile/exportCommitPatchFileTS bindinggetCommitMessageRecoveryTS bindinggetSshAllowedSignerStatusandaddSshSigningKeyToAllowedSignersTS bindingsopenMicrosoftStoreUpdatePagereplaces older request method for MS Store flow
- Backend: many repo command functions made async / moved to background threads to avoid blocking the Tauri main thread (e.g.,
commit_changes,stage_files,unstage_*,stage_all) - New internal CLI handler helpers for:
- resolving SSH signing keys (supports inline key:: prefix, file, or key.pub suffix)
- default and resolved allowed signers paths
- robust commit-hash validation and building commit-based patches
- safer three-way patch apply with status inspection
- full-index patch generation for single-commit export
Configuration & migration
- Removed or ignored legacy
enableUpdateWithMSStoreFlowmanual config keys during migration; config persists but the old key is ignored in the new config shape - New settings types and defaults updated to reflect store flow changes
Microsoft Store / update flow
- Microsoft Store update flow simplified:
- New action opens the Microsoft Store update page (
open_microsoft_store_update_page) instead of attempting a direct in-process Store install - Local test harness simplified to three modes (available / mandatory / none)
- Update dialog copy and state reflect “Store opened” and the new open-flow states
- New action opens the Microsoft Store update page (
Tests and quality
- Large suite updates and new tests:
- CLI and gix handler behaviour (export/import/ssh allowed signers, commit recovery)
- Staging view virtualization, large-list behaviour, compact folder selection, inline feedback timing
- Commit box draft saving, recovery, and commit-clear behaviour
- Identity panel allowed-signers repair flow and prompts
- Log view: ref layout, signature repair flow, export commit patches
Fixes
- Patch export now includes full-index object IDs for accurate patches suitable for three-way application
- Fixed multiple UI race conditions and long-running work on the UI thread by moving heavy operations to background threads
- Fixed unversioned paths handling to show directory entries and avoid losing folder selections
- Improved detection and filtering of submodule entries from unversioned lists and repo status
- Fixed staging selection and bulk operations to disable during active staging operations
- Fixed commit draft lifecycle and ensured drafts are preserved after failed commits and cleared on success
- Fixed signature popover copying and improved repair UX for SSH signing keys
- Fixed Microsoft Store update flow to avoid unsupported in-process flows and present the Store page cleanly
- Fixed a number of edge-case patch import and three-way-apply failure modes with clearer error codes
- Various test fixes and added coverage for new features and regression scenarios
Full Changelog: https://github.com/cst8t/gitmun/compare/v0.8.1...v0.9.0