From 1fa2bc8efea82a16168e2bb31597e6bfa9fb58dc Mon Sep 17 00:00:00 2001 From: Corey Oordt Date: Sun, 29 Mar 2026 06:39:12 -0500 Subject: [PATCH 1/3] Replace `reduce` with `copy.deepcopy` in `merge_into`. --- project_forge/context_builder/data_merge.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/project_forge/context_builder/data_merge.py b/project_forge/context_builder/data_merge.py index 8c6afcb5..29c63203 100644 --- a/project_forge/context_builder/data_merge.py +++ b/project_forge/context_builder/data_merge.py @@ -3,7 +3,6 @@ import copy import logging from collections import OrderedDict -from functools import reduce from itertools import chain from typing import Any, Iterable, Literal, MutableMapping, TypeVar, overload @@ -104,7 +103,7 @@ def merge_into(d1: dict, d2: dict) -> dict: match left_val, right_val: case (dict(), dict()): - return reduce(merge_into, (left_val, right_val), {}) # type: ignore[return-value] + return merge_into(copy.deepcopy(left_val), right_val) # type: ignore[return-value] case _: return right_val From 904b253804a1870072369a2890a6f3ab5c0a25de Mon Sep 17 00:00:00 2001 From: Corey Oordt Date: Sun, 29 Mar 2026 06:39:28 -0500 Subject: [PATCH 2/3] Add `nested-overwrite` to valid merge methods in `composition.py` --- project_forge/models/composition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_forge/models/composition.py b/project_forge/models/composition.py index 839f4975..088513ac 100644 --- a/project_forge/models/composition.py +++ b/project_forge/models/composition.py @@ -22,7 +22,7 @@ class Composition(BaseModel): default_factory=dict, description=( "Merge the values of one or more keys in a specific way. This is useful for `yaml` or `json` values. " - "Valid merge methods are `update` and `comprehensive`." + "Valid merge methods are `update`, `nested-overwrite`, and `comprehensive`." ), ) extra_context: dict = Field( From bfa7d906233791ef2c9cbbb1a3b1b4dddf5e227b Mon Sep 17 00:00:00 2001 From: Corey Oordt Date: Sun, 29 Mar 2026 06:39:42 -0500 Subject: [PATCH 3/3] Refactor template dictionary sorting for readability and performance --- project_forge/rendering/templates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_forge/rendering/templates.py b/project_forge/rendering/templates.py index a2a8a59c..32e12ba8 100644 --- a/project_forge/rendering/templates.py +++ b/project_forge/rendering/templates.py @@ -101,7 +101,7 @@ def catalog_templates(template_path: Path, process_mode_func: ProcessModeFn) -> dir_path = root / dir_ process_mode = process_mode_func(dir_path) templates[str(dir_path.relative_to(root_dir).as_posix())] = TemplateFile(dir_path, process_mode) - return {key: templates[key] for key in sorted(templates)} + return dict(sorted(templates.items())) class InheritanceMap(ChainMap[str, TemplateFile]):