From 7bcda396fd3a52a62fd961b721527235ecf8328b Mon Sep 17 00:00:00 2001 From: Denis Parfionovich Date: Mon, 18 May 2026 14:33:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(install):=20backup=5Ffile=20mv=E2=86=92cp?= =?UTF-8?q?=20-a,=20install=20--activate-hooks=20=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B5=20=D0=BD=D0=B5=20=D0=BF=D0=B0=D0=B4=D0=B0=D0=B5?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- install/lib-backup.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/install/lib-backup.sh b/install/lib-backup.sh index 530cf10..2cc379e 100644 --- a/install/lib-backup.sh +++ b/install/lib-backup.sh @@ -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" }