fix(install): replace all managed files atomically
Write config.toml, settings.json, the manifest, and every other managed file to a temporary sibling and rename it over the target, so an interrupted run cannot leave a partly written file. Previously only SKILL.md was replaced this way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3285055d80
commit
d4143ae2ac
4 files changed
+30
-26
No files matched your search
@@ -111,7 +111,7 @@ try {
|
||||
$installedSkill = Join-Path $testHome '.agents/skills/example/SKILL.md'
|
||||
if ((Get-Content -LiteralPath $installedSkill -Raw) -ne 'updated managed skill') { throw 'Managed skill update did not replace the file.' }
|
||||
if ((Get-Content -LiteralPath (Join-Path $skillBackupRoot 'skill-update/example/SKILL.md') -Raw) -ne 'managed skill') { throw 'New skill backup must be outside the skill tree.' }
|
||||
if (@(Get-ChildItem -LiteralPath (Split-Path $installedSkill -Parent) -Filter '.ai-config-skill-*' -File).Count) { throw 'Managed skill update left a temporary file.' }
|
||||
if (@(Get-ChildItem -LiteralPath (Split-Path $installedSkill -Parent) -Filter '.ai-config-write-*' -File).Count) { throw 'Managed skill update left a temporary file.' }
|
||||
Remove-Item -LiteralPath (Join-Path $package 'skills/example/SKILL.md') -Force
|
||||
$null = Sync-ManagedDestination -Source $targets[0].Source -Destination $targets[0].Destination -Stamp 'skill-remove'
|
||||
if (Test-Path -LiteralPath $installedSkill) { throw 'Deselected managed skill must be removed.' }
|
||||
|
||||
@@ -128,7 +128,7 @@ for target_pair in "${targets[@]}"; do
|
||||
done
|
||||
[ "$(cat "$test_home/.agents/skills/example/SKILL.md")" = 'updated managed skill' ] || { printf 'Managed skill update did not replace the file.\n' >&2; exit 1; }
|
||||
[ "$(cat "$test_home/.agents/.ai-config-skill-backups/skill-update/example/SKILL.md")" = 'managed skill' ] || { printf 'New skill backup must be outside the skill tree.\n' >&2; exit 1; }
|
||||
[ -z "$(find "$test_home/.agents/skills/example" -maxdepth 1 -name '.ai-config-skill.*' -print -quit)" ] || { printf 'Managed skill update left a temporary file.\n' >&2; exit 1; }
|
||||
[ -z "$(find "$test_home/.agents/skills/example" -maxdepth 1 -name '.ai-config-write.*' -print -quit)" ] || { printf 'Managed skill update left a temporary file.\n' >&2; exit 1; }
|
||||
rm -f -- "$package/skills/example/SKILL.md"
|
||||
sync_managed_destination "${targets[0]%%|*}" "${targets[0]#*|}" skill-remove "" "" "" false > /dev/null
|
||||
[ ! -f "$test_home/.agents/skills/example/SKILL.md" ] && [ "$(cat "$test_home/.agents/.ai-config-skill-backups/skill-remove/example/SKILL.md")" = 'updated managed skill' ] || { printf 'Deselected skill must be removed and backed up outside the skill tree.\n' >&2; exit 1; }
|
||||
|
||||
Reference in new issue
Block a user