Files
unlimitedcoding/claude/releases/index.json
delta-cloud-208e 3d4b371e17 feat(updater): SEA install support for Claude Code 2.1.114+ (TDD + dual-critic APPROVE)
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>
2026-04-24 11:54:17 +00:00

295 lines
5.5 KiB
JSON
Executable File

{
"latest": "2.1.119",
"releases": [
{
"version": "2.1.119",
"date": "2026-04-24",
"patches": 9,
"status": "stable",
"install_type": "sea_binary"
},
{
"version": "2.1.112",
"date": "2026-04-17",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.111",
"date": "2026-04-16",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.110",
"date": "2026-04-16",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.109",
"date": "2026-04-15",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.108",
"date": "2026-04-15",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.107",
"date": "2026-04-14",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.105",
"date": "2026-04-14",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.104",
"date": "2026-04-13",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.101",
"date": "2026-04-12",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.100",
"date": "2026-04-10",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.98",
"date": "2026-04-10",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.97",
"date": "2026-04-09",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.96",
"date": "2026-04-08",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.94",
"date": "2026-04-08",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.92",
"date": "2026-04-07",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.91",
"date": "2026-04-04",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.90",
"date": "2026-04-02",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.89",
"date": "2026-04-01",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.87",
"date": "2026-04-01",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.88",
"date": "2026-03-31",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.86",
"date": "2026-03-29",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.85",
"date": "2026-03-27",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.84",
"date": "2026-03-26",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.83",
"date": "2026-03-26",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.81",
"date": "2026-03-25",
"patches": 28,
"status": "stable"
},
{
"version": "2.1.80",
"date": "2026-03-20",
"patches": 28,
"status": "partial"
},
{
"version": "2.1.79",
"date": "2026-03-19",
"patches": 28,
"status": "stable"
},
{
"version": "2.1.78",
"date": "2026-03-18",
"patches": 28,
"status": "stable"
},
{
"version": "2.1.77",
"date": "2026-03-17",
"patches": 28,
"status": "stable"
},
{
"version": "2.1.76",
"date": "2026-03-14",
"patches": 26,
"status": "stable"
},
{
"version": "2.1.75",
"date": "2026-03-13",
"patches": 25,
"status": "partial"
},
{
"version": "2.1.74",
"date": "2026-03-13",
"patches": 25,
"status": "partial"
},
{
"version": "2.1.73",
"date": "2026-03-12",
"patches": 25,
"status": "stable"
},
{
"version": "2.1.72",
"date": "2026-03-11",
"patches": 25,
"status": "stable"
},
{
"version": "2.1.71",
"date": "2026-03-07",
"patches": 25,
"status": "stable"
},
{
"version": "2.1.70",
"date": "2026-03-06",
"patches": 25,
"status": "stable"
},
{
"version": "2.1.69",
"date": "2026-03-06",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.68",
"date": "2026-03-05",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.66",
"date": "2026-03-04",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.63",
"date": "2026-03-01",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.62",
"date": "2026-02-27",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.61",
"date": "2026-02-27",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.59",
"date": "2026-02-26",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.53",
"date": "2026-02-26",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.52",
"date": "2026-02-24",
"patches": 20,
"status": "stable"
},
{
"version": "2.1.47",
"date": "2026-02-21",
"patches": 15,
"status": "stable"
},
{
"version": "2.1.50",
"date": "2026-02-21",
"patches": 15,
"status": "stable"
}
]
}