Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning,
and yes, platform and engine support are part of the public API.
Please file a bug if you notice a violation of semantic versioning.
Unreleased
Added
Changed
Deprecated
Removed
Fixed
Security
1.0.0 - 2026-02-19
- TAG: v1.0.0
- COVERAGE: 91.92% – 921/1002 lines in 14 files
- BRANCH COVERAGE: 73.00% – 311/426 branches in 14 files
- 97.39% documented
Added
- AGENTS.md
-
Psych::Merge::DiffMapper- Maps unified git diffs to YAML AST key paths- Inherits from
Ast::Merge::DiffMapperBase -
#map_hunk_to_paths- Maps diff hunks to YAML key paths (e.g.,["AllCops", "Exclude"]) -
#create_analysis- CreatesFileAnalysisfor YAML content - Tracks nested paths via indentation and MappingEntry location data
- Groups consecutive changed lines by their containing YAML node
- Inherits from
-
Psych::Merge::PartialTemplateMerger- Merges partial YAML templates into specific key paths- Navigate to specific key paths (e.g.,
["AllCops", "Exclude"]) in destination - Merge template content at that location while preserving rest of document
-
key_path:- Array of keys/indices to navigate to target location -
add_missing:- Whether to add template items not in destination (default:true) -
remove_missing:- Whether to remove destination items not in template (default:false) -
when_missing:- Behavior when key path not found (:skipor:add, default::skip) -
recursive:- Whether to recursively merge nested structures (default:true) - Returns
Resultobject withcontent,has_key_path,changed,stats,message
- Navigate to specific key paths (e.g.,
-
Psych::Merge::SmartMerger- New options for advanced merge control:-
recursive: true | false | Integer- Control recursive merging of nested structures-
true(default): Merge nested mappings/sequences recursively instead of replacing wholesale -
false: Replace entire matched nodes (original behavior) -
Integer > 0: Maximum recursion depth
-
-
remove_template_missing_nodes: false- Whentrue, removes destination nodes not present in template
-
-
Psych::Merge::ConflictResolver- Recursive merge implementation:-
#emit_recursive_merge- Recursively merge matched nodes -
#emit_recursive_mapping_merge- Merge nested mapping entries -
#emit_recursive_sequence_merge- Merge sequences with union semantics -
#can_merge_recursively?- Check if two nodes can be recursively merged - Handles both
MappingEntryand rawNodeWrappernodes
-
-
node_typingparameter for per-node-type merge preferences- Enables
preference: { default: :destination, special_type: :template }pattern - Works with custom merge_types assigned via node_typing lambdas
- Enables
-
regionsandregion_placeholderparameters for nested content merging - Initial release
Changed
- appraisal2 v3.0.6
- kettle-test v1.0.10
- stone_checksums v1.0.3
- ast-merge v4.0.6
- tree_haver v5.0.5
- tree_stump v0.2.0
- fork no longer required, updates all applied upstream
- Updated documentation on hostile takeover of RubyGems
- https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo
-
SmartMerger: Added
**optionsfor forward compatibility- Accepts additional options that may be added to base class in future
- Passes all options through to
SmartMergerBase
-
ConflictResolver: Added
**optionsfor forward compatibility- Now passes
match_refinerto base class instead of storing locally
- Now passes
-
MergeResult: Added
**optionsfor forward compatibility - Updated documentation on hostile takeover of RubyGems
- https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo
Fixed
- ConflictResolver now applies Hash-based per-node-type preferences via
node_typing.