Adds install_sea_release() to uclaude_updater.py — dispatches by release type from releases/v<VER>/, supporting both legacy cli.js and new SEA layout. Production-hardened (after 2 rounds of dual-critic FIX): - Pre-verify source sha256 BEFORE touching install_root (fail-fast) - Atomic copy via _atomic_copy_with_fsync: write to .new, fsync, rename, then fsync parent dir (POSIX durability) - .new cleanup on any exception (no orphan files) - fcntl.flock on <install_root>/.uclaude-update.lock (concurrent run safe) - Backup existing → .bak.<TIMESTAMP> before overwrite - Post-install sha256 verify; rollback from backup on mismatch - Atomic symlink update (tmp_link + os.replace) cmd_update dispatches: - detect_release_type → "sea" / "cli_js" / None - "sea" → install_sea_release with /usr/lib/node_modules root + /usr/bin/claude symlink - "cli_js" → existing legacy install_cli_js (preserved) - None → fail with clear error Updated: - claude/uclaude_updater.py — +138 lines (install_sea_release + helpers) - claude/releases/index.json — latest=2.1.119, +v2.1.119 entry (sea_binary) Tests: 11/11 GREEN (claude/tests/test_sea_install.py — new file) Dual critic: gpt-5.4 + GLM 5.1 both APPROVE (round 3 final) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
8.8 KiB
8.8 KiB