diff --git a/ACTIONS.md b/ACTIONS.md
index 4688c20..85a147c 100644
--- a/ACTIONS.md
+++ b/ACTIONS.md
@@ -65,3 +65,21 @@ ACTIONS:
- no_unverified_claims
outputs:
- final_user_report
+ meta:sync-parent:
+ intent: sync_dependency_moduleshortdesc_from_parent_meta
+ inputs:
+ - parent_meta_path
+ - Mods/DnD 5.5e AIO Russian/meta.lsx
+ plan:
+ - read_parent_moduleinfo_fields
+ - validate_required_fields_folder_md5_name_publishhandle_uuid_version64
+ - update_target_dependencies_moduleshortdesc_fields
+ - validate_xml_structure
+ - report_changed_fields
+ checks:
+ - xml_valid
+ - required_parent_fields_present
+ - only_dependencies_moduleshortdesc_changed
+ outputs:
+ - Mods/DnD 5.5e AIO Russian/meta.lsx
+
diff --git a/AGENTS.md b/AGENTS.md
index a962d8a..f351e13 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -11,6 +11,8 @@
2. merging to `main` immediately and deleting the `fix/*`/`feat/*` branch.
- If push fails: retry up to 2 more times with 3s pause.
- Never auto-commit/auto-push without explicit user approval.
+- Approval prompts for pending actions: short direct question in imperative form, no soft/opening phrases.
+- If multiple actions or combinations are possible: provide a numbered options list so user can reply with a number.
### Cleanup (General)
- Do not leave temporary/debug artifacts in repo.
diff --git a/Mods/DnD 5.5e AIO Russian/meta.lsx b/Mods/DnD 5.5e AIO Russian/meta.lsx
index 6c5e2ac..fb085e7 100644
--- a/Mods/DnD 5.5e AIO Russian/meta.lsx
+++ b/Mods/DnD 5.5e AIO Russian/meta.lsx
@@ -21,7 +21,7 @@
-
+
@@ -32,7 +32,7 @@
-
+
diff --git a/scripts/sync-parent-meta.ps1 b/scripts/sync-parent-meta.ps1
new file mode 100644
index 0000000..92b4f7b
--- /dev/null
+++ b/scripts/sync-parent-meta.ps1
@@ -0,0 +1,87 @@
+param(
+ [Parameter(Mandatory = $true)]
+ [string]$ParentMetaPath,
+ [string]$TargetMetaPath = "Mods/DnD 5.5e AIO Russian/meta.lsx"
+)
+
+$ErrorActionPreference = "Stop"
+
+$resolvedParentMetaPath = [System.IO.Path]::GetFullPath($ParentMetaPath)
+$resolvedTargetMetaPath = [System.IO.Path]::GetFullPath($TargetMetaPath)
+
+if (-not (Test-Path -LiteralPath $resolvedParentMetaPath)) {
+ throw "Parent meta.lsx was not found: '$resolvedParentMetaPath'."
+}
+
+if (-not (Test-Path -LiteralPath $resolvedTargetMetaPath)) {
+ throw "Target meta.lsx was not found: '$resolvedTargetMetaPath'."
+}
+
+$parentRaw = Get-Content -LiteralPath $resolvedParentMetaPath -Raw
+$targetRaw = Get-Content -LiteralPath $resolvedTargetMetaPath -Raw
+
+[xml]$parentXml = $parentRaw
+[xml]$targetXml = $targetRaw
+
+$parentModuleInfo = $parentXml.SelectSingleNode('/save/region/node/children/node[@id="ModuleInfo"]')
+if ($null -eq $parentModuleInfo) {
+ throw "ModuleInfo node was not found in parent meta: '$resolvedParentMetaPath'."
+}
+
+$requiredFields = @("Folder", "MD5", "Name", "PublishHandle", "UUID", "Version64")
+$sourceValues = @{}
+
+foreach ($field in $requiredFields) {
+ $node = $parentModuleInfo.SelectSingleNode("attribute[@id='$field']")
+ if ($null -eq $node) {
+ throw "Required parent ModuleInfo attribute '$field' is missing in '$resolvedParentMetaPath'."
+ }
+
+ $value = $node.GetAttribute("value")
+ if ([string]::IsNullOrWhiteSpace($value)) {
+ throw "Required parent ModuleInfo attribute '$field' has empty value in '$resolvedParentMetaPath'."
+ }
+
+ $sourceValues[$field] = $value
+}
+
+$targetDependencyNode = $targetXml.SelectSingleNode('/save/region/node/children/node[@id="Dependencies"]/children/node[@id="ModuleShortDesc"]')
+if ($null -eq $targetDependencyNode) {
+ throw "Dependencies/ModuleShortDesc node was not found in target meta: '$resolvedTargetMetaPath'."
+}
+
+$changedFields = @()
+foreach ($field in $requiredFields) {
+ $targetAttr = $targetDependencyNode.SelectSingleNode("attribute[@id='$field']")
+ if ($null -eq $targetAttr) {
+ throw "Target Dependencies/ModuleShortDesc attribute '$field' is missing in '$resolvedTargetMetaPath'."
+ }
+
+ $currentValue = $targetAttr.GetAttribute("value")
+ $newValue = [string]$sourceValues[$field]
+ if ($currentValue -ne $newValue) {
+ $targetAttr.SetAttribute("value", $newValue)
+ $changedFields += $field
+ }
+}
+
+if ($changedFields.Count -eq 0) {
+ Write-Host "[sync-parent-meta.ps1] No changes needed. Target dependency data is already up to date."
+} else {
+ $utf8Bom = New-Object System.Text.UTF8Encoding($true)
+ $settings = New-Object System.Xml.XmlWriterSettings
+ $settings.Encoding = $utf8Bom
+ $settings.Indent = $true
+ $settings.IndentChars = " "
+ $settings.NewLineChars = "`n"
+ $settings.NewLineHandling = [System.Xml.NewLineHandling]::Replace
+
+ $writer = [System.Xml.XmlWriter]::Create($resolvedTargetMetaPath, $settings)
+ try {
+ $targetXml.WriteTo($writer)
+ } finally {
+ $writer.Dispose()
+ }
+
+ Write-Host ("[sync-parent-meta.ps1] Updated fields: " + ($changedFields -join ", "))
+}