Files
Dynamic-Link-Manager/.specstory/history/2026-03-10_17-25-10Z-dynamic-link-manager-version-and-changelog-update.md
T
2026-03-25 13:50:43 -06:00

24 KiB

2026-03-10 17:25:10Z

User

Update the version and changelog for the Dynamic-Link-Manager addon:

  1. Update blender_manifest.toml: Change version from "0.1.2" to "0.2.0"

  2. Update CHANGELOG.md: Add a new entry at the top for version 0.2.0 with today's date (2026-03-10) and a concise summary of the changes from the last 11 commits:

The commits were:

  • Purge orig actions and cleanup rep actions
  • make rm original work as intended
  • rm run migration
  • add remove original button
  • make tweak tools collapsible
  • separate functions into situational fixes
  • FKrot bake finally working
  • tweak FKRot baking and removal
  • fix error print on migfkrot
  • add FKRotBake, armature parent functionality in RetargRelatives
  • migfkrot working for 1 frame

Summarize these concisely into a few bullet points covering:

  • New "Remove Original" operator with collection deletion and action management
  • UI improvements (collapsible Tweak Tools, Situational section)
  • FK rotation migration improvements (baking, single-frame copy, error fixes)
  • Removal of "Run Migration" button
  • Armature parent replication in RetargRelatives

Add the new entry at the TOP of the changelog table (before 0.1.2).

Use Python to make both edits.


Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process The user wants me to update version and changelog for a Blender addon. Let me first read the existing files to understand their structure, then use Python to make the edits.

Let me start by reading the files.

Agent (accounts/fireworks/models/kimi-k2p5)

I'll first read the existing files to understand their structure, then use Python to make the edits.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: cat "t:\Dynamic-Link-Manager\blender_manifest.toml"
cat "t:\Dynamic-Link-Manager\blender_manifest.toml"
schema_version = "1.0.0"

id = "dynamiclinkmanager"
name = "Dynamic Link Manager"
tagline = "Character migrator and linked library tools"
version = "0.1.2"
type = "add-on"

# Optional: Semantic Versioning
maintainer = "Nathan Lindsay <nathanlindsay9@gmail.com>"
license = ["GPL-3.0-or-later"]
blender_version_min = "4.5.0"

website = "http://10.1.10.3:30008/Nathan/Dynamic-Link-Manager"

tags = ["3D View"]

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: cat "t:\Dynamic-Link-Manager\CHANGELOG.md" 2>nul || echo "File not found"
cat "t:\Dynamic-Link-Manager\CHANGELOG.md" 2>nul || echo "File not found"
# Changelog

## [0.1.2] - 2026-02-19

### Added
- MigFKRot operator: copy FK arm and finger rotations from original to replacement using pose matrix copy.

### Changed
- MigNLA: duplicate actions when copying to repchar so editing on repchar doesn't affect origchar.
- MigFKRot: expanded bone name pattern matching for various rig styles (Rigify and alternatives).
- MigBBody shapekeys: also duplicate shape key actions for independence.

### Fixed
- MigFKRot: add debug logging to show which bones are found and copied.


## [0.1.1] - 2026-02-19

### Fixed
- MigBBody shapekeys: action slot not applying; now copy action and slot props (last_slot_identifier, action_slot, blend/extrapolation/influence) from original base body.
- RetargRelations: skip objects in Original Character's hierarchy (linked collection); only retarget relations outside orig's hierarchy.
- MigBoneConst: copy all constraint properties and targets (RNA POINTER/COLLECTION with origrep retarget), not just type/name/mute/influence.
- AnimLayers: detect/mirror via RNA (obj.als.turn_on) so "Animation Layer attributes migrated" reports correctly.
- MigCustProps: recursive id-property copy for nested groups; debug logging for armature/bone keys.


## [0.1.0] - 2026-02-19

### Added
- Gitea release workflow and runner docker-compose.
- Tweak tools subsection: add/remove/bake constraints for arms, legs, and both; track name and post-clean options.
- MigNLA: when no NLA, copy active action and action slot (incl. last_slot_identifier, blend/extrapolation/influence); debug logging for slot migration.
- NLAMig: AnimLayers support (mirror `als.turn_on`), strip timing and properties; active-action-only path when no NLA tracks.
- Operator icons (CopyAttr, MigNLA, CustProps, BoneConst, RetargRelatives, MigBBodyShapeKeys, pickers, tweak ops).
- BaseBody shapekeys step: prefer original base body's shape-key action slot; library override + editable; copy shape key values.

### Changed
- Operator labels refactored to canonical short names (CopyAttr, MigNLA, MigCustProps, etc.) with `bl_description` on all UI operators.
- Migrate BaseBody shapekeys redefined: find base body in hierarchy, override mesh/key data when linked, then apply shape-key action.
- Button labels truncated (e.g. "NLA", "BaseBody ShapeKeys").

### Fixed
- BaseBody shapekeys: lib override creation and value copy; correct original-base-body lookup and slot assignment.

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process Now I have both files. Let me use Python to make the edits:

  1. Update blender_manifest.toml: Change version from "0.1.2" to "0.2.0"
  2. Update CHANGELOG.md: Add new entry at the top for version 0.2.0

Let me write a Python script to do both.

Agent (accounts/fireworks/models/kimi-k2p5)

Now I'll use Python to make both edits.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: python << 'EOF' import re

1. Update blender_manifest.toml

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f: content = f.read()

Replace version

content = re.sub(r'version = "0.1.2"', 'version = "0.2.0"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f: f.write(content)

print("Updated blender_manifest.toml to version 0.2.0")

2. Update CHANGELOG.md - add new entry at the top

new_entry = '''# Changelog

[0.2.0] - 2026-03-10

Added

  • New "Remove Original" operator with collection deletion and action management (purge/cleanup).
  • FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

Changed

  • UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
  • Removed "Run Migration" button (functionality merged into Remove Original workflow).

Fixed

  • MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f: old_content = f.read()

Remove the old "# Changelog" header and prepend new entry

old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f: f.write(new_entry + old_content)

print("Updated CHANGELOG.md with version 0.2.0 entry") EOF

python << 'EOF'
import re

# 1. Update blender_manifest.toml
with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f:
    content = f.read()

# Replace version
content = re.sub(r'version = "0\.1\.2"', 'version = "0.2.0"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f:
    f.write(content)

print("Updated blender_manifest.toml to version 0.2.0")

# 2. Update CHANGELOG.md - add new entry at the top
new_entry = '''# Changelog

## [0.2.0] - 2026-03-10

### Added
- New "Remove Original" operator with collection deletion and action management (purge/cleanup).
- FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

### Changed
- UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
- Removed "Run Migration" button (functionality merged into Remove Original workflow).

### Fixed
- MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f:
    old_content = f.read()

# Remove the old "# Changelog" header and prepend new entry
old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f:
    f.write(new_entry + old_content)

print("Updated CHANGELOG.md with version 0.2.0 entry")
EOF
ParserError: C:\Users\Nathan\AppData\Local\Temp\ps-script-1b7f388b-ec14-4847-9b9a-6e71fd61d854.ps1:113
Line |
 113 |  python &lt;&lt; 'EOF'
     |          ~
     | Missing file specification after redirection operator.

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process PowerShell doesn't support heredocs like bash. Let me write the Python script to a file first, then execute it.

Agent (accounts/fireworks/models/kimi-k2p5)

Let me write the Python script to a file first, then execute it.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: python -c " import re

1. Update blender_manifest.toml

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f: content = f.read()

Replace version

content = re.sub(r'version = "0.1.2"', 'version = "0.2.0"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f: f.write(content)

print('Updated blender_manifest.toml to version 0.2.0')

2. Update CHANGELOG.md - add new entry at the top

new_entry = '''# Changelog

[0.2.0] - 2026-03-10

Added

  • New "Remove Original" operator with collection deletion and action management (purge/cleanup).
  • FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

Changed

  • UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
  • Removed "Run Migration" button (functionality merged into Remove Original workflow).

Fixed

  • MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f: old_content = f.read()

Remove the old '# Changelog' header and prepend new entry

old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f: f.write(new_entry + old_content)

print('Updated CHANGELOG.md with version 0.2.0 entry') "

python -c "
import re

# 1. Update blender_manifest.toml
with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f:
    content = f.read()

# Replace version
content = re.sub(r'version = \"0\.1\.2\"', 'version = \"0.2.0\"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f:
    f.write(content)

print('Updated blender_manifest.toml to version 0.2.0')

# 2. Update CHANGELOG.md - add new entry at the top
new_entry = '''# Changelog

## [0.2.0] - 2026-03-10

### Added
- New \"Remove Original\" operator with collection deletion and action management (purge/cleanup).
- FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

### Changed
- UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
- Removed \"Run Migration\" button (functionality merged into Remove Original workflow).

### Fixed
- MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f:
    old_content = f.read()

# Remove the old '# Changelog' header and prepend new entry
old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f:
    f.write(new_entry + old_content)

print('Updated CHANGELOG.md with version 0.2.0 entry')
"
  File "&lt;string&gt;", line 9
    content = re.sub(r'version = \
                     ^
SyntaxError: unterminated string literal (detected at line 9)

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process The inline Python is getting messed up with escaping. Let me write the script to a file and then run it.

Agent (accounts/fireworks/models/kimi-k2p5)

Let me write the script to a file and then execute it.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: Set-Content -Path 'update_version.py' -Value @' import re

1. Update blender_manifest.toml

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f: content = f.read()

Replace version

content = re.sub(r'version = "0.1.2"', 'version = "0.2.0"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f: f.write(content)

print('Updated blender_manifest.toml to version 0.2.0')

2. Update CHANGELOG.md - add new entry at the top

new_entry = '''# Changelog

[0.2.0] - 2026-03-10

Added

  • New "Remove Original" operator with collection deletion and action management (purge/cleanup).
  • FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

Changed

  • UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
  • Removed "Run Migration" button (functionality merged into Remove Original workflow).

Fixed

  • MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f: old_content = f.read()

Remove the old '# Changelog' header and prepend new entry

old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f: f.write(new_entry + old_content)

print('Updated CHANGELOG.md with version 0.2.0 entry') '@

Set-Content -Path 'update_version.py' -Value @'
import re

# 1. Update blender_manifest.toml
with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'r') as f:
    content = f.read()

# Replace version
content = re.sub(r'version = "0\.1\.2"', 'version = "0.2.0"', content)

with open(r't:\Dynamic-Link-Manager\blender_manifest.toml', 'w') as f:
    f.write(content)

print('Updated blender_manifest.toml to version 0.2.0')

# 2. Update CHANGELOG.md - add new entry at the top
new_entry = '''# Changelog

## [0.2.0] - 2026-03-10

### Added
- New "Remove Original" operator with collection deletion and action management (purge/cleanup).
- FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

### Changed
- UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
- Removed "Run Migration" button (functionality merged into Remove Original workflow).

### Fixed
- MigFKRot: fixed error printing and improved bone matching reliability.

'''

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'r') as f:
    old_content = f.read()

# Remove the old '# Changelog' header and prepend new entry
old_content = old_content.replace('# Changelog\n\n', '', 1)

with open(r't:\Dynamic-Link-Manager\CHANGELOG.md', 'w') as f:
    f.write(new_entry + old_content)

print('Updated CHANGELOG.md with version 0.2.0 entry')
'@

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process Good, the script was created. Now let me run it.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: python update_version.py
python update_version.py
Updated blender_manifest.toml to version 0.2.0
Updated CHANGELOG.md with version 0.2.0 entry

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process Both files have been updated. Let me verify the changes by reading both files.

Agent (accounts/fireworks/models/kimi-k2p5)

Let me verify the changes by reading both files.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: cat "t:\Dynamic-Link-Manager\blender_manifest.toml"
cat "t:\Dynamic-Link-Manager\blender_manifest.toml"
schema_version = "1.0.0"

id = "dynamiclinkmanager"
name = "Dynamic Link Manager"
tagline = "Character migrator and linked library tools"
version = "0.2.0"
type = "add-on"

# Optional: Semantic Versioning
maintainer = "Nathan Lindsay &lt;nathanlindsay9@gmail.com&gt;"
license = ["GPL-3.0-or-later"]
blender_version_min = "4.5.0"

website = "http://10.1.10.3:30008/Nathan/Dynamic-Link-Manager"

tags = ["3D View"]

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: cat "t:\Dynamic-Link-Manager\CHANGELOG.md"
cat "t:\Dynamic-Link-Manager\CHANGELOG.md"
# Changelog

## [0.2.0] - 2026-03-10

### Added
- New "Remove Original" operator with collection deletion and action management (purge/cleanup).
- FK rotation migration improvements: baking support, single-frame copy, armature parent replication in RetargRelatives.

### Changed
- UI improvements: Tweak Tools section is now collapsible; reorganized into Situational Fixes section.
- Removed "Run Migration" button (functionality merged into Remove Original workflow).

### Fixed
- MigFKRot: fixed error printing and improved bone matching reliability.

## [0.1.2] - 2026-02-19

### Added
- MigFKRot operator: copy FK arm and finger rotations from original to replacement using pose matrix copy.

### Changed
- MigNLA: duplicate actions when copying to repchar so editing on repchar doesn't affect origchar.
- MigFKRot: expanded bone name pattern matching for various rig styles (Rigify and alternatives).
- MigBBody shapekeys: also duplicate shape key actions for independence.

### Fixed
- MigFKRot: add debug logging to show which bones are found and copied.


## [0.1.1] - 2026-02-19

### Fixed
- MigBBody shapekeys: action slot not applying; now copy action and slot props (last_slot_identifier, action_slot, blend/extrapolation/influence) from original base body.
- RetargRelations: skip objects in Original Character's hierarchy (linked collection); only retarget relations outside orig's hierarchy.
- MigBoneConst: copy all constraint properties and targets (RNA POINTER/COLLECTION with origrep retarget), not just type/name/mute/influence.
- AnimLayers: detect/mirror via RNA (obj.als.turn_on) so "Animation Layer attributes migrated" reports correctly.
- MigCustProps: recursive id-property copy for nested groups; debug logging for armature/bone keys.


## [0.1.0] - 2026-02-19

### Added
- Gitea release workflow and runner docker-compose.
- Tweak tools subsection: add/remove/bake constraints for arms, legs, and both; track name and post-clean options.
- MigNLA: when no NLA, copy active action and action slot (incl. last_slot_identifier, blend/extrapolation/influence); debug logging for slot migration.
- NLAMig: AnimLayers support (mirror &#96;als.turn_on&#96;), strip timing and properties; active-action-only path when no NLA tracks.
- Operator icons (CopyAttr, MigNLA, CustProps, BoneConst, RetargRelatives, MigBBodyShapeKeys, pickers, tweak ops).
- BaseBody shapekeys step: prefer original base body's shape-key action slot; library override + editable; copy shape key values.

### Changed
- Operator labels refactored to canonical short names (CopyAttr, MigNLA, MigCustProps, etc.) with &#96;bl_description&#96; on all UI operators.
- Migrate BaseBody shapekeys redefined: find base body in hierarchy, override mesh/key data when linked, then apply shape-key action.
- Button labels truncated (e.g. "NLA", "BaseBody ShapeKeys").

### Fixed
- BaseBody shapekeys: lib override creation and value copy; correct original-base-body lookup and slot assignment.

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process Both files have been updated correctly:

  1. blender_manifest.toml - version changed from "0.1.2" to "0.2.0"
  2. CHANGELOG.md - new entry for 0.2.0 added at the top with:
    • Date: 2026-03-10
    • Added section: Remove Original operator, FK rotation improvements
    • Changed section: UI improvements, removed Run Migration button
    • Fixed section: MigFKRot error printing

Now let me clean up the temporary Python script.

Agent (accounts/fireworks/models/kimi-k2p5)

Let me clean up the temporary script.

Agent (accounts/fireworks/models/kimi-k2p5)

Tool use: **run_terminal_command_v2** • Run command: Remove-Item update_version.py
Remove-Item update_version.py

Tool use: **run_terminal_command_v2**

Agent (accounts/fireworks/models/kimi-k2p5)

Thought Process All done. Both files have been updated successfully.

Agent (accounts/fireworks/models/kimi-k2p5)

Both files have been updated successfully:

blender_manifest.toml - Version updated to 0.2.0

CHANGELOG.md - New entry added at the top for version 0.2.0 (2026-03-10) with:

  • Added: Remove Original operator, FK rotation migration improvements (baking, single-frame copy, armature parent replication)
  • Changed: UI improvements (collapsible Tweak Tools, Situational section), removed Run Migration button
  • Fixed: MigFKRot error printing and bone matching reliability