Skip to content

Commit 4b4c523

Browse files
author
Laurent Guitton
committed
chore: bump version to 3.4.0
1 parent 22424ec commit 4b4c523

17 files changed

Lines changed: 97 additions & 47 deletions

File tree

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [3.4.0] - 2026-07-08
11+
12+
### Added
13+
14+
- **`token_level_merge` conflict pattern** — decomposes a conflicted hunk line by line, then token by token, and proposes a merge when both sides changed disjoint tokens on the same line (e.g. two branches editing different utility classes on one HTML/JSX line). Never auto-applied regardless of confidence: it surfaces a proposal in a new `TokenMergePanel` that the user confirms explicitly, applied through the same `resolveHunkCustom` path as a manual edit. Priority 65 — evaluated before every opt-in deterministic recoverer.
15+
- **2-way conflict base recovery** — most repos use git's default `merge.conflictstyle` (no `|||||||` base section), which left every diff3-only pattern (`one_side_change`, `non_overlapping`, `token_level_merge`, …) inert. The desktop now reconstructs the base from the git index (`reconstructConflict`) and re-resolves, upgrading real-world 2-way conflicts to diff3. Guarded against overwriting manual edits made outside the conflict markers, with a discreet banner when recovery fired. Concurrency-capped at 4 subprocesses.
16+
- **`ResolutionPreviewPanel` + "Resolve auto" confirmation** — pre-computed hunk resolutions are shown for review before applying; the global "Resolve auto" button now opens a per-hunk summary modal instead of applying blind, and applies the engine's real merged lines (not a raw ours+theirs concatenation).
17+
- **"Recoverable-before-model" metric**`summarizeTiers()` derives a funnel over the existing per-type counts (trivial / advanced-deterministic / model / unresolved) and reports how much of the residual is still recoverable deterministically before the LLM is invoked. Surfaced in the CLI resolve summary, the MergeEditor header, the MCP `tierSummary` field, and as a cumulative local aggregate in Settings → Git (localStorage only, no network). Backed by a corpus regression guard and a committed golden-funnel snapshot that fails CI on any silent drift.
18+
19+
### Changed
20+
21+
- **`value_only_change` extended to diff3 with ordered-value resolution** — the pattern now runs with a base (both-sides value bumps), and when the differing tokens are comparable semver or ISO timestamps the higher/later value wins deterministically instead of blindly taking the policy side. Value tokens are tokenized quote-aware so multi-word quoted values (e.g. `'2026-07-06 11:42:00'`) aren't split on their inner whitespace.
22+
- **Deterministic recoverers run before the LLM** — enabling `llmFallback` now forces `refactoringAware` on, so a rename-on-both-sides hunk is never sent to the model when a deterministic answer exists.
23+
24+
### Fixed
25+
26+
- **Data-loss: imports resolver deleted unparsable import-like blocks** — a block accepted as "imports" but containing an unparsable line (e.g. `import a` with no `from`) could return an empty merged block reported as success, silently deleting the hunk. It now falls back to the textual engine.
27+
- **Data-loss: `insertion_at_boundary` dropped insertions duplicating a base line** — insertions were filtered with a `Set`, so an inserted line equal to any base line was lost. Now uses multiset counting.
28+
- **`whitespace_only` false positive inside string literals** — whitespace inside a quoted string is data, not formatting; the pattern no longer auto-resolves when only a string literal differs.
29+
- **Rename detection matched inside strings and comments**`detectRefactorings` masked neither string literals nor `//`·`/* */` comments, so a value or comment-wording change could pass as a "bijective rename". Both are now masked in a single scan.
30+
- **git log pagination, caching, and prefetching** — per-file lazy loading and cache correctness fixes in the desktop commit graph (#113).
31+
1032
## [3.3.0] - 2026-07-06
1133

1234
### Added
@@ -1181,6 +1203,7 @@ Design-system foundations — the app header and every overlay now ride on a sha
11811203
- 28 tests covering all patterns + real-world scenarios (package.json, Laravel routes, Vue SFC, CSS, .env files)
11821204

11831205
[Unreleased]: https://github.com/devlint/GitWand/compare/v3.2.0...HEAD
1206+
[3.4.0]: https://github.com/devlint/GitWand/compare/v3.3.0...v3.4.0
11841207
[3.3.0]: https://github.com/devlint/GitWand/compare/v3.2.0...v3.3.0
11851208
[3.2.0]: https://github.com/devlint/GitWand/compare/v3.1.0...v3.2.0
11861209
[3.1.0]: https://github.com/devlint/GitWand/compare/v3.0.0...v3.1.0

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<p align="center">
2222
<img alt="License" src="https://img.shields.io/badge/license-MIT-8B5CF6">
2323
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-100%25-3178C6">
24-
<img alt="Version" src="https://img.shields.io/badge/version-3.3.0-22c55e">
24+
<img alt="Version" src="https://img.shields.io/badge/version-3.4.0-22c55e">
2525
</p>
2626

2727
---

0 commit comments

Comments
 (0)