Task->done is now a string, boolean false is stored as integer 0 and loaded as string "0". On the client side that's interpreted as truthy in JavaScript. Fix: cast "0" to (bool) before encoding to JSON.