The invite added in the previous commit was a default one, which Discord
expires after seven days. It is now in the README, CONTRIBUTING, the Code of
Conduct and `[project.urls]`, and the last of those ships in release metadata
where a dead link cannot be corrected after publish - so it has to be a
permanent invite, not a convenient one.
All six occurrences move together; a half-updated set is worse than the old
link, since the stale copies would be the ones a reader hits first.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Discord is added as a fourth community channel, with the boundary stated
rather than left to guesswork: it is for live chat and setup help, while
anything that should still be findable in six months belongs in Issues or
Discussions. A Discord answer helps one person; an issue helps everyone who
hits the same thing, and the repository already routes public traffic that
way.
It lands in the four places a reader actually looks - the README header, the
badge row, the Contact section, and CONTRIBUTING's Community list - plus
`[project.urls]`, which is the one that matters most in practice: most users
arrive from PyPI, whose sidebar previously showed only Homepage, Repository
and Issues. That entry is metadata and takes effect on the next publish.
Both a Code of Conduct that does not name the server and a security policy
that does not exclude it are gaps a public chat channel creates, so the Code
of Conduct now states it applies there, and SECURITY.md says explicitly not to
report vulnerabilities in a public channel.
The single maintainer address becomes two with distinct roles, because one
address doing both jobs cannot be handed over: team@trysoup.dev is the project
address and survives a change of maintainer, while makazanalpamys@gmail.com
stays as the personal fallback. Both are listed everywhere a contact appears -
README, SECURITY.md, CODE_OF_CONDUCT.md - and pyproject's author email, which
PyPI renders as the package contact, moves to the project address.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Code of Conduct pointed at an address that is no longer read, and it was
the only contact route in the repository, so a report sent there went nowhere.
SECURITY.md gains it as a fallback rather than a replacement: private GitHub
Security Advisories stay the preferred channel, but the list had a single
entry and no path for a reporter without a GitHub account.
pyproject gains an `email` on the author entry, which is what PyPI renders as
the package contact - it had a name and no way to reach anyone. Metadata only;
it takes effect on the next publish and changes nothing at runtime.