История коммитов

.
test(community): leave a grant that ran out out of the administration
.
test(forum): offer a member whose role ran out as a curator again
.
test(admin): leave a grant that ran out out of the staff of the list and of the cleanup
.
test(admin): close the panel to a role whose grant ran out
.
test(auth): let the fake role repository honour the end date of a grant
The fake kept a grant forever, so a broken filter could not fail the tests built on it. It now reads the end date as EloquentRoleRepository does, and the permissions and the level of an account are checked to drop a role whose grant ran out.
.
test(auth): cover the end date of a role grant in the role repository
Every way of reading the grants leaves out one that ran out, and the moment of the end is already past it.
.
feat(admin): make the roles of an account a tab of its pages
The roles are a table of switches with the level and the date a grant runs out; a role above the visitor's own is locked, a grant that ran out is marked. The tab is offered to whoever manages the roles. The edit and the roles are tabs now, so the head of the account drops their buttons.
.
feat(admin): rebuild the form of a role and switch its permissions group by group
The form is two cards, the role and its permissions, saved from the head of the page as well as from its foot. A built-in role shows its name and level as facts. The permissions are switches in a grid; role-permissions.js ticks a whole group from its heading and keeps the counters of the groups and of the role in step.
.
test(admin): cover who may open, change and delete a role
.
test(admin): register the translator for the role list use case
A built-in role is named through the gettext helpers, so the test failed whenever it ran before anything had registered them.