Documentation
Everlock 0.7.0
The 0.7.0 release tightens who may do what. Access now derives solely from
explicit grants, git repositories can hand out a contributor role that opens
pull requests without touching branches, and vault instances are
administered from the admin console like every other backend. Inbound mail
gained DMARC verification, and pushes to large repositories no longer die at
the SSH rekey. Binaries are on the download page; container
images are published under the 0.7 tag family
(cr.everlock.sh/everlock:0.7-qwen3, cr.everlock.sh/everlock:0.7-smolvlm).
Highlights
- Vault accounts are administered from the CLI.
/vault accounts list <instance>shows an instance's accounts with the everlock user each was provisioned for, and/vault accounts delete <instance> <email>removes an account together with the data it owns — personal ciphers and their attachments, folders, sends, and organization memberships. The listing'sorgs on deletecolumn states per account what happens to its organizations, so the outcome is visible before the delete./vault createnow grants its callerOwneronhttp/vault/<name>, matching how calendar, image, and git instances hand ownership to their creator. - A contributor role for git.
writeron*/git/<repo>:pullsallows pushingrefs/pull/*— opening, updating, and closing pull requests — with no access torefs/heads/*orrefs/tags/*. Paired with a containerreader, that is the standard contributor: may propose changes, may not touch branches. Receive-pack authorizes every ref update in a push individually, so allowed updates apply while denied ones answerng <ref> access denied. Existing repowriter/ownergrants cover:pullsalready. - Inbound DMARC verification. Received mail is checked against the
sender's published DMARC policy, combining SPF and DKIM outcomes with
From-domain alignment. The verdict lands in the message sidecar, in the
Authentication-Resultsheader as admarc=clause, and inrules.tomlas admarc_resultcondition, so filtering policy can act on aligned authentication. Every verified DKIM signature is now reported as its own clause with signing domain and selector, so a downstream consumer can check alignment from the trace header alone. - Every admin listing renders as a table.
/users list,/users grants,/groups list,/server info,/server settings list,/jobs list,/dns info, and/git pr listuse the shared table primitive — content-sized columns that stay aligned when a value outgrows its column. Structured outlets receive these results as table items.
Breaking
- Access derives solely from explicit grants. The access check used to
accept any actor whose login equaled the namespace segment of the
requested path, so a user named after an image instance, site, registry,
or calendar was its
Ownerby name collision alone. That rule is gone: every path is closed until a grant opens it. Deployments that relied on it need explicit grants after upgrading — mailboxes via/users grant <login> */mail/<domain>:<mailbox> owner, git repositories named after their user via/users grant <login> */git/<repo> owner. - Admin CLI verbs are unified on
create/delete./users add,/groups add, and/users ssh-keys addare now/users create,/groups create, and/users ssh-keys create;/users passwdis/users password. Scripts driving the console need the new spelling, and the projections rename with them (MCPusers_add→users_create,users_passwd→users_password; HTTPPOST /api/users/passwd→POST /api/users/password). The AI assistant's tools follow the same convention:add_userandadd_grouparecreate_userandcreate_group.grant/revokeandassign/unassignkeep their domain verbs. /git prcommands authorize per repository. They move off the system-admin tier:listneeds reporeader,open/closea:pullswriter, andmergea repowriter, because a merge writes the target branch.
Fixes
- Clones larger than a gigabyte finish. SSH renegotiates session keys
after about a gigabyte of transfer, and only key-exchange messages may
cross the wire while that runs. Queued pack data used to go out mid
exchange, which OpenSSH treats as a protocol error, so
git cloneof a large repository died withearly EOF. Queued data now waits for the exchange to finish — about one round trip — and goes out under the new keys. - Deleting a ref by push actually deletes it.
git push origin :<ref>, and any push whose new value is the zero OID, reported success but wrote a ref file of forty zeros; the corrupt ref then broke the repository's ref listing andgc. Deletes now remove the ref, in the push,/git pr close, and merge paths alike. /git pr listreports an empty repository as empty instead of rendering a table with no rows once every pull request has been merged or closed.
Upgrading
Self-updating servers pick 0.7.0 up on their daily check. For a manual
upgrade, download the new binary (or pull the new image tag) and restart —
stores, mail, and all versioned content carry over untouched. Check
/users grants before or right after the upgrade: access that came from a
name collision rather than a grant needs a grant now, and mailboxes are the
common case. The full list of changes is in the
changelog.