You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: my original draft of this issue said "closes #2." That was wrong — #2 was already resolved on 2026-05-03 by removing the dead --batch flag rather than wiring it up. This issue re-adds the flag with real CRUD semantics, as called out in #15.
MergeCommand today (KtsuTools/Commands/MergeCommand.cs) takes only <directory> and <filename> positional args. BlastMerge supported saving named batches of merge inputs and re-running them; this issue ports that functionality.
Surface
A "batch" is a saved bundle of merge inputs — at minimum the directory + filename pattern, optionally the diff style flag from sub-task B (#37) once that lands. Subcommand shape:
ktsu merge batch save <name> <directory> <filename> [--diff-style <style>]
ktsu merge batch list
ktsu merge batch show <name>
ktsu merge batch delete <name>
ktsu merge --batch <name> # runs a saved batch
The existing positional form ktsu merge <directory> <filename> keeps working. --batch <name> re-introduces the option and is mutually exclusive with the positional args.
Storage
Use the existing settings infrastructure at KtsuTools.Core/Services/Settings/. ISettingsService.LoadOrCreate<T>() is generic over AppData<T>. Add a new MergeBatchSettings : AppData<MergeBatchSettings> with a Dictionary<string, MergeBatchEntry>. Don't roll a new persistence layer.
Tests
Round-trip: save → list → show → delete.
--batch <unknown> → exit non-zero with a clear message.
Mutual-exclusion error when both --batch and positional args are passed.
Sub-task A of #15.
MergeCommandtoday (KtsuTools/Commands/MergeCommand.cs) takes only<directory>and<filename>positional args. BlastMerge supported saving named batches of merge inputs and re-running them; this issue ports that functionality.Surface
A "batch" is a saved bundle of merge inputs — at minimum the directory + filename pattern, optionally the diff style flag from sub-task B (#37) once that lands. Subcommand shape:
The existing positional form
ktsu merge <directory> <filename>keeps working.--batch <name>re-introduces the option and is mutually exclusive with the positional args.Storage
Use the existing settings infrastructure at
KtsuTools.Core/Services/Settings/.ISettingsService.LoadOrCreate<T>()is generic overAppData<T>. Add a newMergeBatchSettings : AppData<MergeBatchSettings>with aDictionary<string, MergeBatchEntry>. Don't roll a new persistence layer.Tests
--batch <unknown>→ exit non-zero with a clear message.--batchand positional args are passed.--diff-stylevalue survives a load (only meaningful once ktsu merge: add --diff-style flag (git unified vs side-by-side) #37 is in; until then accept the field but ignore on dispatch).Out of scope