## 2026.10.17 ### Highlights - Field limits the rate of every route, with smaller limits for sign-in, email, PDFs and integrations. (#151) - The MCP OAuth router has its own rate limit, and job detail keys are checked where they are set. (#153) - Email HTML is cleaned by a real HTML parser. (#152) - Passwords are stored as salted scrypt hashes, and older SHA-256 hashes are upgraded at sign-in. (#148) - Release jobs build from the release tag, and stop if the tag moved. (#149) ### Changes ### Fixes - Field rate-limits every route, with smaller budgets for sign-in, email, PDFs and integrations. (#151) - Email HTML is sanitised by a real HTML parser, and the escaping, regex and input alerts are closed. (#152) - Release jobs build from the release tag, and stop if it moved. (#149) - Passwords are stored as salted scrypt, and older SHA-256 hashes are upgraded. (#148) - The MCP OAuth router carries its own rate limit, and job detail keys are checked where they are assigned. (#153) ### Complete contribution record This audited record covers the complete 83dde53e3acc9f93578996ea358c7df8be7b71f7..aa1b50de13cc23bbd97464f7545841f484e9b07a history: 16 in-range PRs + 0 retained seed-only PRs = 16 unique PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact. #### Pull requests - **PR #98** - **PR #101** - **PR #104** - **PR #105** - **PR #131** - **PR #142** - **PR #143** - **PR #151** Related #135. - **PR #152** - **PR #149** - **PR #148** - **PR #144** - **PR #153** - **PR #150** - **PR #157** - **PR #154**