8c0eaf98 — Peter Sanchez 5 days ago master 0.50.5
go.mod: core-go version bump
listssrht-lmtp: late reject on validation errors

This was initially changed, but these error messages are not good enough
for what postfix offers. We'll need a more robust solution.

This reverts commit 7e400a266500f45051a4674daa8540991356ef45.
.builds/alpine.yml: drop -t from SSH
dashboard.html: remove unnecessary if statement
listssrht-lmtp: early reject on validation error

send_error_for can cause an infinite loop on badly configured mail
default_query: write ops are now supported
Remove obsolete webhooks
API: Use pq.Error instead of strings.Contains
webhooks: remove legacy subscription events

No one is using these in production, which gives us a good excuse to get
rid of it early.
API: Rig up (some) legacy webhooks

Still need to rig up patchset and subscription events, but this lays
down the essential riggings and delivers list:create, list:update, and

This uncovered a flaw in core-go's legacy webhooks code which was
addressed by core-go:468752564125e79b5efdfff091d8886dc23e373a and
required the included databse migration. Deleting a list would cascade
to delete any subscriptions associated with that list, which would
prevent list:delete events from being delivered. This sets the list_id
column to null instead of deleting the subscription row, and tweaks the
ordering of tasks in webhook processing to ensure we have a valid list
of subscriptions prior to committing the transaction which deletes the
associated list.
API: Implement mutation { mailingListUnsubscribe }
API: Implement mutation { mailingListSubscribe }
API: Implement mutation { createTool, updateTool }
API: Implement mutation { updatePatchset }
API: Remove mutation { removeEmail }

This requires a fair bit of work to uphold the database constraints and
needs to be rethought. Deferring it until after we ship v1 of the
writable GQL API.
API: Refactor ACL cursor

The ACLs enumerated from a MailingList will always be MailingListACLs
API: Rig up mutation { deleteACL }
API: Rig up mutation { updateMailingListACL }
API: Rig up mutation { updateSenderACL }

Very similar to the previous mutation.
API: Rig up mutation { updateUserACL }