fix(install): backup_file mv→cp -a, install --activate-hooks больше не падает

gx10 fail при первой установке (фото юзера 2026-05-18):
  jq: error: Could not open file /home/keisei/.claude/settings.json
  [error] jq-merge produced invalid output; ... unchanged
  [error] install failed at line 126; rolled back

Root cause:
  backup_file() (install/lib-backup.sh:56) делал `mv target backup`,
  затем activate_hooks() → _jq_merge_hooks() пыталась читать оригинал
  target'а через jq — но оригинал уже унесён mv'ом, открыть нечего.
  jq fail → rollback всей установки.

Fix: cp -a вместо mv (как уже сделано в backup_path() для директорий).
Атомарный безопасный бэкап; оригинал остаётся для jq, потом
_jq_merge_hooks атомарно переписывает его mv tmp → target.
This commit is contained in:
Denis Parfionovich 2026-05-18 14:33:22 +08:00
parent c4e43f3637
commit 7bcda396fd

View file

@ -57,7 +57,10 @@ backup_file() {
local target="$1"
[ -f "$target" ] || return 0
local backup="${target}.bak-$(date +%s)"
mv "$target" "$backup"
# cp -a, НЕ mv — _jq_merge_hooks ниже читает оригинал target'а после
# backup_file. С mv оригинал исчезает → jq не может open file →
# «invalid output» → rollback (gx10 fail 2026-05-18).
cp -a "$target" "$backup"
BACKUP_PAIRS+=("$target|$backup")
say "backed up existing $target to $backup"
}