I know of two new bug fields that change behind-the-scenes automatically, bug_heat and task_age. task_age is going away, so let's ignore that. I'd like to fix bug_heat and then see if there's a separate problem to do with named operations. Here's a paste of a message I posted to launchpad-dev about solving the bug_heat problem. I'm still working on this. 1. If a field is important enough to include in the representation, it's important enough to include in the ETag. As Robert points out, omitting a read-only field from the ETag will stop clients from knowing when the value changes. 2. I like Bjorn's idea of a two-part ETag, where both parts are checked for GET requests/caching, but only one part is checked for PATCH/PUT requests. But, I don't think this would comply with the HTTP standard. There are two types of ETags, "strong" and "weak". A strong ETag changes whenever "the entity (the entity-body or any entity-headers) changes in any way". A weak ETag changes "only on semantically significant changes, and not when insignificant aspects of the entity change". These quotes are from section 13.3.3. Consider a two-part ETag, where one part describes the state of the read-only fields and the other part describes the state of the read-write fields. Taken together, the whole thing is a strong ETag. Look at only the second part and you have a weak ETag. But (13.3.3 again) "The only function that the HTTP/1.1 protocol defines on [ETags] is comparison." There's no looking at the second half of an ETag. The whole thing has to match. OK, so let's define another function on ETags, another "weak comparison function" which only looks at the second half of the ETag. That goes beyond HTTP/1.1 but it doesn't contradict the standard. Now: We would like to validate GET requests using the strong comparison function (looking at the strong ETag), so that even minor changes will invalidate the cache and the client will always have the most up-to-date information. We would like to validate PATCH requests by using the weak comparison function, so that irrelevant changes to the resource don't affect the success of the PATCH. But, the HTTP standard says we have to do the opposite. Section 14.26 says "The weak comparison function can only be used with GET or HEAD requests." The IETF draft that defines PATCH says, "Clients wishing to apply a patch document to a known entity can first acquire the strong ETag of the resource to be modified, and use that Etag in the If-Match header on the PATCH request to verify that the resource is still unchanged." As I read the standards, if bug_heat has changed and I try to PATCH an unrelated field, the correct behavior is that my PATCH should fail. I don't think this makes sense for us given the way we implement PATCH, but it does make sense in general. I don't think anything bad will happen if we implement the two-part ETag. The whole ETag string is in fact a strong ETag, so anything that treats it as a strong ETag will still work. We'll just have some server-side magic that secretly implements a weak comparison function to make PATCH requests work. And if anyone actually tries to PATCH bug_heat they'll still get an error. I'd like to hear other peoples' readings of the standards, especially Robert's.