Yesterday my phone downloaded the OTA update and stored it in /cache with a long file name full of hexadecimal. I made a CWM backup and then attempted to let the OTA installer run. Unfortunately it complained about the unsigned zip file and when I decided to back out to inspect it further, the OTA updater now believed that it had completed. Hacking logs in /cache/recovery didn't help.
I did an adb pull of the downloaded file so I could inspect it and put it in a better place for updating from CWM's recovery interface (/sdcard). It failed on checking signatures of the bloatware apps I had removed previously (but also backed up with TitaniumBackup). I restored the apps and renamed the .apks in /system/app to match what updater-script expected to find. Then the update failed on these items:
assert(getprop("ro.product.device") == "goghspr" ||
getprop("ro.build.product") == "goghspr");
assert(getprop("ro.secure")=="1");
I removed those lines as I knew it was the right device and because CWM wasn't providing the desired result on "ro.secure". At this point I noticed that updater-script also wanted to replace the recovery image, so I removed these lines, to avoid losing CWM:
delete("/system/recovery-from-boot.p",
"/system/etc/install-recovery.sh");
ui_print("Unpacking new recovery...");
package_extract_dir("recovery", "/system");
set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");
The update ran successfully. I think that CWM complained that root access had been lost, but I missed the prompt when I brushed against the camera button and clicked "no" instead of "yes" to fix permissions. This is the offending line in updater-script:
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
I booted CWM (power+volume up), started adb shell, and fixed the setuid permission on /system/xbin/su.
I took this as a good time to downgrade Superuser.apk and /system/xbin/su to a version that works promptly - LBE Privacy Guard had been timing out on starting its active protection service because Superuser was taking too long to respond.
Now JB is running successfully. Did another Titanium backup, another CWM backup and copied the files safely elsewhere. Now to remove bloat again. . . .