Use an issue's hash to check if its cache needs update
Use a specific template tag to cache issues templates
Move hash stuff needed for template caching from core to front
Add a method to the Issue model to regenerate its cached template
Add a task to update issues templates when things are updated

The task is core.tasks.issue.UpdateIssueCacheTemplate
A task of this kind os created via a post_save signal when an issue is
created/updated, or for each related issues when a
user/milestone/label_type/label is created/updated.
Add comments_count to compute issues hash
Save txt AND html versions of body (issues and comments)

=> txt is needed to edit, html to display
Always save fetched_at and github_status when an object is fetched
Correct user hash to ignore subdomains variations in avatar_url
Save the issues hashes when regenerating their template
Use the issue saved hash for template cache
Add south and first migration

Problem with custom user: http://south.aeracode.org/ticket/1179

 ./manage.py syncdb
 ./manage.py migrate
 ./manage.py convert_to_south core
 ./manage.py migrate core 0001 --fake
Use Etag/If-None-Match when fetching lists

Reason: github doesn't return the Last-Modified-At for lists
How: we save the Etag of the first page of each list/variation
Caveat: They... FUCKED UP their Etag header by swwapping the subdomain of the gravatars in response with users, so the Etag changes ramdomly...
I contacted them.

PS: i also simplified management of 200/304, retries...