fix(template-engine): resolve TemplateEngine-015,016 — cascade-rename nested derived templates, correct composed-script ParentPath
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
| Last reviewed | 2026-05-17 |
|
||||
| Reviewer | claude-agent |
|
||||
| Commit reviewed | `39d737e` |
|
||||
| Open findings | 2 |
|
||||
| Open findings | 0 |
|
||||
|
||||
## Summary
|
||||
|
||||
@@ -674,7 +674,7 @@ verifies all three constraint categories are surfaced together.
|
||||
|--|--|
|
||||
| Severity | Medium |
|
||||
| Category | Correctness & logic bugs |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
| Location | `src/ScadaLink.TemplateEngine/TemplateService.cs:680` |
|
||||
|
||||
**Description**
|
||||
@@ -719,7 +719,14 @@ two-level cascade rename.
|
||||
|
||||
**Resolution**
|
||||
|
||||
_Unresolved._
|
||||
Resolved 2026-05-17 (commit `pending`): `RenameCompositionAsync` now recurses
|
||||
into `derived.Compositions` via a new `CollectCascadeRenamesAsync` helper
|
||||
(mirroring `CascadeDeleteDerivedAsync`), re-deriving each cascaded inner derived
|
||||
template's name from its renamed parent and slot instance name, and runs the
|
||||
same-name collision pre-check across every name in the cascade before any row
|
||||
mutates. Regression tests:
|
||||
`RenameComposition_CascadesRenameToNestedDerivedTemplates`,
|
||||
`RenameComposition_NestedCascadeNameCollision_Fails`.
|
||||
|
||||
### TemplateEngine-016 — Composed-script `ScriptScope.ParentPath` is always empty, breaking `Parent.X` resolution for nested modules
|
||||
|
||||
@@ -727,7 +734,7 @@ _Unresolved._
|
||||
|--|--|
|
||||
| Severity | Medium |
|
||||
| Category | Correctness & logic bugs |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
| Location | `src/ScadaLink.TemplateEngine/Flattening/FlatteningService.cs:750` |
|
||||
|
||||
**Description**
|
||||
@@ -765,4 +772,11 @@ two-level composed script.
|
||||
|
||||
**Resolution**
|
||||
|
||||
_Unresolved._
|
||||
Resolved 2026-05-17 (commit `pending`): threaded a `parentPath` parameter
|
||||
through `ResolveComposedScriptsRecursive` — the top-level caller passes `""`
|
||||
(a depth-1 composition's parent is the root template) and each nested call
|
||||
passes the enclosing module's `prefix` — and the `ScriptScope` now sets
|
||||
`ParentPath` to that value instead of a hard-coded `""`, so a depth-2 script's
|
||||
`SelfPath = "Outer.Inner"` pairs with `ParentPath = "Outer"` and `Parent.X`
|
||||
resolves against the real parent module. Regression test:
|
||||
`Flatten_NestedComposedScript_ScopeCarriesCorrectParentPath`.
|
||||
|
||||
Reference in New Issue
Block a user