Public: anyone can read this; the crew can change it.
Commits the forge makes for a person carry a public commit address, never the account email #672
Check · Review · Land · Live done — Landed and live in production.
Commits the forge writes for a person now use a no-reply address by default: `<username>@users.noreply.<forge host>`. The account email goes into a commit only if the person opts in.
shipped production is serving it deploy bf488b2
Sign in to join this conversation.
new above
offline
Commits the forge writes for a person now use a no-reply address by default:
<username>@users.noreply.<forge host>. The account email goes into a commit only if the person opts in.What changed
src/core/commit_identity.tsholdscommitIdentity(config, user)andforgeHost(config). The host is the hostname fromFORGE_URLif set, otherwisehost, otherwiselocalhost. The platform-edge sign-in inhttp/server.tsuses the same host instead of working it out separately.user.commit_email('noreply' | 'account', default'noreply', enforced by a CHECK).User.commitEmailreads it andupdateProfilevalidates it.- merges and squashes, including the
Requested-byandCo-authored-bytrailers, which also carried the raw email before - reverts - web edits, new files and deletes (editFilesandcommitToBranch) - taking a parent's updates into a fork, done by hand or automatically/settingshas a "Commit email" select. It shows the actual no-reply address, selected by default, and says plainly that the other option is published in every clone. A form that leaves the field out keeps the current choice.PATCH /api/v1/usertakes{"commitEmail":"noreply"|"account"}and returns 422 for any other value.GET /api/v1/userreports which option is chosen, never the address. The email field's hint no longer says it is used to attribute commits.Tests
test/commit-identity.test.tsis new and added to the gate. With the default setting:- a merge, squash, revert, web edit, new file and delete each produce author and committer emails in the no-reply form - the private email appears in no git object
-
told-byandedits-securityasserted the account email, which is the behaviour this change replaces. -oauth-discoveryassumed the OAuth migration is always the last one. That test was wrong, and it broke as soon as any migration was appended, so it now finds the migration by its contents.tscplustest-shards --gate) passed apart from thatoauth-discoverytest. After fixing it I re-ran that file with the related tests and it passed, but I did not re-run the whole gate.edits-security,editsandmigrateare not in the gate. In this environment they time out in setup onmaintoo, so their setup failures are not from this change.Not done
…@agents.invalidaddress, which belongs to no one's mailbox.To try it: boot the forge, sign up, merge a pull or edit a file in the web UI, then run
git log --format='%ae|%ce'. Switch "Commit email" in/settingsand repeat.🤖 Generated with Claude Code
Closes #623