register opaque per-login session identifiers in a durable SQLite allow-list
require active registry membership on every authenticated request
revoke the current session before clearing cookies on logout
fail closed with sanitized 503 responses on registry read/write failures
preserve independent sessions and prune expired entries without storing raw identifiers
document persistent state and forced re-login migration
TDD evidence
RED: captured cookie replay remained 200 after logout; registry read/write/revoke failures escaped as unhandled exceptions
GREEN: focused session suite: 17 passed
Full suite: 471 passed in 15.80s
Closes #268
## Delivered
- register opaque per-login session identifiers in a durable SQLite allow-list
- require active registry membership on every authenticated request
- revoke the current session before clearing cookies on logout
- fail closed with sanitized 503 responses on registry read/write failures
- preserve independent sessions and prune expired entries without storing raw identifiers
- document persistent state and forced re-login migration
## TDD evidence
- RED: captured cookie replay remained `200` after logout; registry read/write/revoke failures escaped as unhandled exceptions
- GREEN: focused session suite: `17 passed`
- Full suite: `471 passed in 15.80s`
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #268
Delivered
TDD evidence
200after logout; registry read/write/revoke failures escaped as unhandled exceptions17 passed471 passed in 15.80s