diff --git a/.specstory/history/2026-03-13_20-29-12Z-retargeting-focus-object-issue.md b/.specstory/history/2026-03-13_20-29-12Z-retargeting-focus-object-issue.md
index 9843cc7..89feaf0 100644
--- a/.specstory/history/2026-03-13_20-29-12Z-retargeting-focus-object-issue.md
+++ b/.specstory/history/2026-03-13_20-29-12Z-retargeting-focus-object-issue.md
@@ -5735,3 +5735,157 @@ def _collection_contains_object_recursive(coll, ob):
```
Try **Remove Original** again in your ARP setup; if orig/rep shared a collection, you should get object-only removal of the original instead of nuking both.
+
+---
+
+_**User**_
+
+looks great. concisely summarize the changes in the past 5 commits in the changelog for 0.4.0
+
+---
+
+_**Agent (composer-2-fast)**_
+
+
+
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+Tool use: **run_terminal_command_v2** • Run command: cd /d T:\Dynamic-Link-Manager && git log -5 --oneline
+
+```bash
+cd /d T:\Dynamic-Link-Manager && git log -5 --oneline
+```
+
+```
+Set-Location: C:\Users\Nathan\AppData\Local\Temp\ps-script-6062a9f7-5291-4a78-839d-e28c2d1c47ba.ps1:7
+Line |
+ 7 | cd /d T:\Dynamic-Link-Manager && git log -5 --oneline
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ | A positional parameter cannot be found that accepts argument 'T:\Dynamic-Link-Manager'.
+
+```
+
+
+
+
+Tool use: **run_terminal_command_v2**
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+
+Tool use: **glob_file_search** • Searched codebase "" • **1** result in **1** directory
+
+Directory: **T:/Dynamic-Link-Manager** (1 file)
+
+| File |
+|------|
+| `../../CHANGELOG.md` |
+
+
+
+
+
+Tool use: **glob_file_search**
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+Tool use: **run_terminal_command_v2** • Run command: Set-Location T:\Dynamic-Link-Manager; git log -5 --format="%h %s%n%b---"
+
+```bash
+Set-Location T:\Dynamic-Link-Manager; git log -5 --format="%h %s%n%b---"
+```
+
+```
+b2b0798 fix rmorig ARP
+---
+b59695f add manual meshes to migbbody shapekeys
+---
+7c1969d MigNLA: now makes repchar active before activating animlayers to avoid requirement for manual activation
+---
+3c08392 begin implementing ARP functionality
+---
+c2b1829 bump 0.4.0
+---
+
+```
+
+
+
+
+Tool use: **run_terminal_command_v2**
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+Tool use: **read_file_v2** • Read file: T:/Dynamic-Link-Manager/CHANGELOG.md
+
+
+
+
+
+Tool use: **read_file_v2**
+
+
+
+_**Agent (composer-2-fast)**_
+
+Thought Process
+**Updating release notes**
+
+I'm adding a new release notes section for 0.4.0 summarizing the key changes.
+
+_**Agent (composer-2-fast)**_
+
+
+Adding a `[0.4.0]` section summarizing those five commits, placed after the title and before `[0.3.0]`.
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+
+Tool use: **edit_file_v2** • Edit file: T:/Dynamic-Link-Manager/CHANGELOG.md
+
+
+
+
+
+
+Tool use: **edit_file_v2**
+
+
+
+_**Agent (composer-2-fast)**_
+
+
+Here’s what was added to `CHANGELOG.md` for **0.4.0** (mapped from the last five commits: bump → ARP → MigNLA activation → MigBBody manual meshes → Remove Original / ARP):
+
+| Commit | In changelog as |
+|----------|------------------|
+| `bump 0.4.0` | Release line + date |
+| `begin implementing ARP functionality` | **Added:** CharMig rig-family (ARP vs Rigify) and ARP-related migrator behavior |
+| `MigNLA: … repchar active before … animlayers` | **Changed:** MigNLA activates replacement before Animation Layers |
+| `add manual meshes to migbbody shapekeys` | **Added:** manual meshes for MigBBody shapekeys |
+| `fix rmorig ARP` | **Fixed:** Remove Original never drops a collection that still contains the replacement; Blender 5 parent checks |
+
+If any of the ARP or manual-mesh wording should match your UI labels exactly, say what you use in-panel and we can tweak the lines.
diff --git a/.specstory/statistics.json b/.specstory/statistics.json
index 255153c..537f8cd 100644
--- a/.specstory/statistics.json
+++ b/.specstory/statistics.json
@@ -226,13 +226,13 @@
"last_updated": "2026-03-25T20:22:34Z"
},
"f09112e7-3ddb-4e4e-b91a-418e38b881bf": {
- "user_message_count": 22,
- "agent_message_count": 347,
+ "user_message_count": 23,
+ "agent_message_count": 357,
"start_timestamp": "2026-03-13T14:29:12-06:00",
"end_timestamp": "2026-03-13T14:29:12-06:00",
- "markdown_size_bytes": 301678,
+ "markdown_size_bytes": 306017,
"provider": "cursoride",
- "last_updated": "2026-03-25T20:52:25Z"
+ "last_updated": "2026-03-25T21:04:24Z"
},
"f1bb25c5-e5d4-4aad-88a3-f562ab877040": {
"user_message_count": 1,
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3c8eb7..d835d75 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## [0.4.0] - 2026-03-25
+
+### Added
+- CharMig: ARP (Auto-Rig Pro) support alongside Rigify (rig-family selector and related migrator behavior).
+- MigBBody shapekeys: include manually specified meshes in migration, not only auto-detected base body.
+
+### Changed
+- MigNLA: activate the replacement character before turning on Animation Layers, so AnimLayers apply without manually selecting rep first.
+
+### Fixed
+- Remove Original: when resolving which collection to delete, never remove a collection whose subtree still contains the replacement armature (avoids deleting both orig and rep when they share hierarchy); Blender 5 collection parent checks use collection names.
+
## [0.3.0] - 2026-03-13
### Added