# Changelog

All notable user-facing changes to Gitty are documented in this file.

The project uses calendar-style versions in the form `YYYY.M.PATCH`.

## [2026.8.5] - 2026-08-17

### Added

- Integrated Git LFS management now detects the available extension and the
  repository setup, shows tracked patterns and checkout objects, and provides
  actions for local activation, tracking and untracking patterns, downloading
  objects, and pruning the local cache. Desktop installers bundle Git LFS,
  while Arch packages declare it as a dependency.
- The Changes panel now offers a List/Tree switch. Tree view groups staged and
  unstaged files into independently collapsible folders while retaining all
  existing file actions.
- Files and folders in the Changes panel now have context-menu actions for
  staging or unstaging their scope and for creating a stash containing only
  the selected file or folder. New and untracked items can also be added to
  the repository `.gitignore` from Changes or the File Explorer as an exact
  file, a complete folder, or an extension-wide pattern. Folder rules are only
  offered for folder selections. Tracked files and folders can be removed from
  the Git index without deleting their working-tree contents.
- Gitty can open a repository directly at startup through the `--repo PATH` or
  `--repo=PATH` command-line argument.
- The executable can clone and immediately open a repository with
  `clone REMOTE TARGET`, `--clone REMOTE TARGET`, or `--clone=REMOTE TARGET`.
  Relative targets use the caller's working directory, and requests are also
  forwarded to an already-running Gitty instance.

### Changed

- Successful clones and pulls now detect repositories that use LFS and
  download the required LFS objects automatically with the same remote and
  credentials. Fresh clones also activate LFS locally before they are opened.
- Activating LFS or adding a tracking pattern now ensures that a root
  `.gitattributes` file is not hidden by Git ignore rules. When necessary,
  Gitty adds the scoped `!/.gitattributes` exception to `.gitignore`.
- The standard Tauri development launcher now removes an injected non-routing
  `127.0.0.1:9` proxy and blocking SSH placeholder from the debug child
  process, while preserving real user and company proxy settings.
- Git LFS pushes rejected with HTTP 413 are retried once with a command-scoped
  HTTP/1.1 override, which works around Azure DevOps' large HTTP/2 upload
  behavior without changing repository or global Git settings. LFS and other
  generic push failures no longer trigger the unrelated Pull/Push retry flow.
- Unstaged and staged changes use an equal-width side-by-side layout with
  independent scrolling, directional stage/unstage actions, and a responsive
  vertical fallback. The List/Tree switch is centered above both areas.
- File and folder context menus now separate the selected name from its parent
  path, show the affected file count, and present stage, unstage, and stash
  actions with clearer icons and descriptions.
- Controls and surfaces use a more consistent square visual language while
  circular status markers, avatars, and branch shapes remain recognizable.
- The built-in German and English help now includes Git LFS setup, tracking,
  troubleshooting, and everyday workflow guidance.

## [2026.8.4] - 2026-08-15

### Added

- Branch folders now have a context-menu action for deleting all contained
  local or remote branches at once. The top-level remote folder such as
  `origin` is protected, while its nested folders remain manageable. The
  currently checked-out branch is kept,
  and individual failures are reported after the remaining branches have been
  processed.

### Changed

- The Compare selector is fully localized in German and uses the same visual
  language as the external-tool selectors for its fields, groups, typography,
  and dialog surfaces.
- Repository-tab close buttons are square and have clearer spacing, hover
  behavior, and keyboard-focus feedback.

## [2026.8.3] - 2026-08-13

### Added

- Configurable external tools for editors, diff viewers, merge tools,
  terminals, and file managers, including automatic cross-platform discovery
  and presets for VS Code, JetBrains IDEs, Beyond Compare, and other common
  applications.
- Repository and file actions for opening content in the configured external
  application. Supported tools open in a separate window.
- A choice between Gitty's internal diff/merge views and the configured
  external applications.
- Git Notes support for attaching editable notes to commits without rewriting
  commit history, including fetch and push synchronization.
- A command palette for quickly opening repository actions, files, and commits.
- Complete branch-to-branch comparisons for local and remote branches. The
  comparison dialog shows every changed file and its side-by-side diff.
- Safe remote branch renaming from the branch context menu.

### Changed

- Redesigned the settings window with tool categories, detected applications,
  preset dropdowns, and clearer explanations of where each tool is used.
- Redesigned the history graph's branch presentation with compact labels,
  hover details, cleaner flag connectors, and branch visibility controls.
- Reduced the minimum width of the commit history panel so the workspace can
  be resized more freely.
- Local-only branches are now identified consistently in the toolbar,
  repository summary, status bar, and commit graph. Their first push is labeled
  Publish and configures the remote tracking branch automatically.
- Git operations now run asynchronously to keep the application responsive
  during slower repository commands.

### Fixed

- Closing supported external tools no longer reports their documented
  comparison result codes as application errors.
- External tools that otherwise reuse an existing process are explicitly
  opened in a new window where supported.
- Remote branch renaming uses an atomic push with lease checks, preventing an
  existing destination branch or a newly changed remote branch from being
  overwritten.

## [2026.8.2] - 2026-08-10

### Changed

- History graph colors remain stable across parent lanes, making longer and
  branching histories easier to follow.
- Release artifacts are published to the matching Gitea release automatically
  without creating duplicate assets.
- Application shutdown now completes telemetry cleanup more reliably.

## [2026.8.1] - 2026-08-04

### Added

- Paginated commit history that loads older commits on demand instead of
  limiting the visible repository history to the initial page.
- A dedicated file-history dialog opened from the explorer context menu.
- Windows and Ubuntu release publishing plus improved AUR packaging workflows.

### Changed

- File history moved out of the permanent workspace panel into a focused,
  larger dialog.
- Dialogs close more consistently with the Escape key.
- Arch Linux installation documentation now uses the `gitty-desktop` AUR
  package.

### Fixed

- AUR SSH setup, package installation timeouts, and clone/push retries are more
  robust in the release workflow.

## [2026.07.22] - 2026-07-22

### Added

- AI-assisted commit splitting for staged changes:
  - analyze the staged diff and propose an ordered set of logical commits;
  - generate an editable Conventional Commit message for every group;
  - move files between proposed commits before applying the plan;
  - create all accepted commits sequentially with **Commit all**.
- Support for commit-splitting suggestions through OpenAI, Anthropic, and
  custom OpenAI-compatible endpoints.

### Changed

- The commit-splitting dialog now explains why a plan cannot be applied and
  clearly marks AI-generated commit messages as editable.
- Safety checks prevent applying a stale plan after the staged files change
  and reject files that contain both staged and unstaged changes.

### Fixed

- **Commit all** now passes a plain state snapshot to the commit workflow
  instead of failing silently when cloning a reactive UI proxy.
- Closing the active repository tab no longer allows an in-flight status or
  fetch response to reopen and reactivate the closed repository.

## [2026.07.21] - 2026-07-21

### Added

- Full Git worktree management:
  - create a worktree from an existing branch;
  - create a new branch and worktree together;
  - create a detached worktree at a commit;
  - open a worktree as a repository tab;
  - move, lock, unlock, repair, remove, and prune worktrees.
- A dedicated **Worktrees** entry below **Tags** in the branch panel.
- An **Open in new worktree** action in the local branch context menu.
- Line-level patch selection with Shift-click range selection.
- Stage, unstage, and discard actions for selected lines while retaining the
  existing whole-file and whole-hunk workflows.
- Arch Linux package automation that builds from `PKGBUILD`, publishes the
  `.pkg.tar.zst` artifact, and updates the Pacman repository database on the
  CDN.
- Detailed German and English help for worktrees, line-level staging, Pacman
  installation, and release changes.

### Changed

- Branch deletion now uses a clearer confirmation dialog with more explicit
  branch and upstream information.
- Dialog backdrops blur the application instead of covering it with a nearly
  black background.
- Remote operations and authentication errors provide more actionable
  feedback.
- Build diagnostics and resource handling for the Arch package pipeline are
  more robust.

### Infrastructure

- Added centralized error notifications.
- Added structured, privacy-conscious telemetry.
- Stabilized the Arch Linux container build and `makepkg` workflow.

## [2026.7.20] - 2026-07-13

### Added

- AI-assisted review of staged changes before committing.
- Optional automatic repository refresh.
- Comprehensive German Git documentation in the built-in help.
- Initial `PKGBUILD` and automated package version synchronization.

### Changed

- Redesigned the repository action toolbar and workspace status presentation.
- Improved repository tabs, diff styling, spacing, and panel structure.
- Improved file-history state handling.

[2026.07.22]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.22
[2026.07.21]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.21
[2026.7.20]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.7.20
[2026.8.5]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.5
[2026.8.4]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.4
[2026.8.3]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.3
[2026.8.2]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.2
[2026.8.1]: https://git.cbsk-tech.de/Christoph/GitLite/releases/tag/2026.8.1
