Add page on database roles (ASA-#164)
Lazily kinit in groups/diffs.py (ASA-#149)
Remove inactive groups from asa-official (ASA-#161)
Linkify emails on group display page (ASA-#157)
List the GSC funding board list of groups
Show why the stderr="" assert for MailmanList fails
Membership update: reformat and proofread

Reformat the membership update page to be easier to read (ASA-#177) and fix
some grammatical issues (ASA-#178).
Membership update: move deadlines into the DB

Move the "Deadlines and Enforcement" section of the membership update form from
the template into the database, so people who aren't DB maintainers can update
the deadlines for future cycles. Fixes ASA-#176.
forms:0013: note that MySQL ignores the default...

Fortunately, we don't really care...
Make giant list of groups taller (ASA-#184)
Use request.build_absolute_uri

It turns out there's a built-in function to build a full URI that doesn't
involve assembling it by hand.
Add links to the submitted membership updates page

While the page with information about which membership updates have been
submitted was linked on the front page, some people were still not finding it.
This adds a link on the update page and in the email that gets sent to
officers. Fixes ASA-#183.
Remove disclaimer about submission numbers

Since 4260e2c075a85117ba6fadae1b41fc3a3505c4c5, we've included people only once
and only if they're actually a student. While we still don't check that people
didn't just select all the groups, that isn't a real risk. Thus, remove the
disclaimer saying that the membership submission numbers might be wrong and
suggesting that people email asa-db@.
Membership: miscellaneous improvements to issues

* Describe what, exactly, causes the various issue names mean (well, more
  exactly than "50%" supplies...)
* Provide a version of /membership/admin/issues.csv that includes account
  numbers, for ease-of-fining
Include link to resources.txt for Exec members
constitution-req.html is not a valid constitution

In groups/gather-constitutions.py and the related
https://asa.mit.edu/groups/constitutions/, this stops treating constitutions
containing /asa/start/constitution-req.html as valid constitutions. This makes
it easier to see how many and which groups really have a constitution, and
which don't. Fixes ASA-#170.
Describe changes made by load_people (ASA-#192)

groups/load_people.py outputs a summary of the changes it made --- the numbers
of people processed, the usernames imported, etc.. However, it doesn't describe
what *specific* changes occurred --- what fields were updated, what account
class new users are in, etc.. This adds that data. In particular, showing the
account classes of freshly created and destroyed users will probably help to
notice any weird bursts of activity.
Set a password of UNUSABLE_PASSWORD

* Changes ScriptsRemoteUserBackend's configure_user method to set the default
  password to UNUSABLE_PASSWORD instead of ScriptsSSLAuth. UNUSABLE_PASSWORD
  displays in the admin as "Password: None", instead of an ugly error message.
  This should fix "Unknown password hashing algorithm" errors for users
  correctly created in the future. (ASA-#132)

* Adds a migration to change current users with passwords of "" or
  "ScriptsSSLAuth" to a password of UNUSABLE_PASSWORD ("!"). This will fix
  ASA-#132 and the symptoms of ASA-#133 for already-existent users.
Use API function instead of UNUSABLE_PASSWORD

Yay abstractions, or something.
Rename list update email template (ASA-#179)

groups/diffs/asa-official-update.txt is a stupid name for something used with
finboard-groups-only and gsc-fb-, so rename it.