Archives advisory-keys-name-their-family (#186, second of two changes)
and syncs its deltas: a new database-locks spec (every advisory key is
built from its family and an id; a lock helper takes a transaction; the
families and the lock order are written once), whose Purpose this
commit writes; deployment-docs gains the requirement that the
production guide states an upgrade stops the old release first;
go-static-analysis gains the lock-site rule; entitlements and
entitlement-set-management state the rendezvous by its family. Five
requirements added, three modified, no scenario dropped. 91 specs
valid.
What the work behind both #186 changes taught beyond them:
- docs/testing.md: how dbtest.Counted names a statement; a guarantee
that needs READ COMMITTED is also tested on a repeatable-read
connection; a lint rule's break adds code, not a comment; Abort for a
call that may answer without waiting, and a "leaves a weaker lock
free" test also checks the lock is held; how forbidigo matches
sql.DB.Begin and the calls it cannot see.
- docs/go-conventions.md: a third READ COMMITTED case, a locking read
that waited failing with 40001 at REPEATABLE READ.
- docs/database-management.md: what migrate down rolls back (#242) and
how to roll back a core migration by hand; CREATE OR REPLACE resets
SECURITY DEFINER, search_path and volatility; sqlc moves a section
comment onto the next query.
- design.md: the upgrade rule's two rejected alternatives.