- [PR](https://codeberg.org/forgejo/forgejo/pulls/7924): <!--number 7924 --><!--line 0 --><!--description cmVtb3ZlIEFQSSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRoYXQgdXNlcyB0aGUgVVJMIHF1ZXJ5-->remove API authentication methods that uses the URL query. They are disabled by default and this only has an impact if `[security].DISABLE_QUERY_AUTH_TOKEN=false` is explicitly set. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#removing-deprecated-api-authentication-methods).<!--description-->
- Security features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7829): <!--number 7829 --><!--line 0 --><!--description cmVsYXggZW1haWwgcmVxdWlyZW1lbnRz-->relax email requirements. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#relaxing-the-requirements-on-email-addresses).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6897): <!--number 6897 --><!--line 0 --><!--description ZmVhdChzZWMpOiBBZGQgU1NIIHNpZ25pbmcgc3VwcG9ydCBmb3IgaW5zdGFuY2Vz-->add SSH signing support for instances. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#instance-signing-with-ssh).<!--description-->
- Breaking features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8035): <!--number 8035 --><!--line 0 --><!--description VGhlIGBmb3JnZWpvIGRvY3NgIGNvbW1hbmQgaXMgZGVwcmVjYXRlZCBhbmQgQ0xJIGVycm9ycyBhcmUgbm93IGRpc3BsYXllZCBvbiBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXQuIFRoZXNlIGJyZWFraW5nIGNoYW5nZXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgcGFja2FnZSB1c2VkIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdhcyBbdXBncmFkZWQgZnJvbSB2MiB0byB2M10oaHR0cHM6Ly9jbGkudXJmYXZlLm9yZy9taWdyYXRlLXYyLXRvLXYzLykuIEEgW3NlcGFyYXRlIHByb2plY3Qgd2FzIGluaXRpYXRlZF0oaHR0cHM6Ly9naXRodWIuY29tL3VyZmF2ZS9jbGktZG9jcykgdG8gcmUtaW1wbGVtZW50IHRoZSBgZG9jc2AgY29tbWFuZCwgYnV0IGl0IGlzIG5vdCB5ZXQgcHJvZHVjdGlvbiByZWFkeS4=-->The `forgejo docs` command is deprecated and CLI errors are now displayed on stderr instead of stdout. These breaking changes happened because the package used to parse the command line arguments was [upgraded from v2 to v3](https://cli.urfave.org/migrate-v2-to-v3/). A [separate project was initiated](https://github.com/urfave/cli-docs) to re-implement the `docs` command, but it is not yet production ready.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8139): <!--number 8139 --><!--line 0 --><!--description QVBJOiBlbmZvcmNlIHNoYSByZXF1aXJlbWVudCBvbiBgUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHNg-->fail if `sha` is not provided to the `POST /repos/{owner}/{repo}/contents` API endpoint. Although it was documented to be required, it was not enforced and clients that do not set the `sha` will no longer succeed.<!--description-->
- User Interface features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8185): <!--number 8185 --><!--line 0 --><!--description ZmVhdCh1aSk6IGZlZGl2ZXJzZSBoYW5kbGUgbWFya3VwIHZpYSByZWRpcmVjdCBzZXJ2ZXI=-->transform fediverse handles (ex. @forgejo@floss.social and !forgejo@programming.dev) into links to https://fedirect.toolforge.org. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#redirecting-fediverse-handles).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8121): <!--number 8121 --><!--line 0 --><!--description YWRkIHVzZXIgdmlzaWJpbGl0eSBkZXNjcmlwdGlvbiBpbiBzZXR0aW5ncyBwYWdl-->add user visibility description in the settings page.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8111): <!--number 8111 --><!--line 0 --><!--description YWRkIG1vZGVsIHZpZXdlciBmb3IgYC5nbGJgIChHTFRGKSBtb2RlbCBpbiBmaWxlIHZpZXc=-->add model viewer for `.glb` (GLTF) model in file view. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#gltf-viewer).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7906): <!--number 7906 --><!--line 0 --><!--description ZmVhdCh1aSk6IHJlZGVzaWduIHVzZXIgcHJvZmlsZSBhY3Rpb25zIGxheW91dA==-->the user profile has been redesigned. The most notable change is that actions have been moved to a dropdown and several new actions were added.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7531): <!--number 7531 --><!--line 0 --><!--description ZmVhdCh1aSk6IGltcHJvdmUgZGVzYyBpbiBQYWNrYWdlcyBzZXR0aW5ncw==-->improve the description in the packages settings.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7516): <!--number 7516 --><!--line 0 --><!--description aW5saW5lIHB1YmxpYyBzc2gga2V5IGluIHZlcmlmaWNhdGlvbiBjb21tYW5k-->inline public ssh key in verification command.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7481): <!--number 7481 --><!--line 0 --><!--description ZmVhdCh1aSk6IHVzZSBzd2l0Y2ggZWxlbWVudCBmb3IgbWFya2Rvd24gZWRpdG9yIG1vZGVz-->use switch element for markdown editor modes.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7385): <!--number 7385 --><!--line 0 --><!--description VXNlIGBnaXQgc3dpdGNoIC1jYCBpbnN0ZWFkIG9mIGBnaXQgY2hlY2tvdXQgLWJg-->improve performances by using `git switch -c` instead of `git checkout -b`.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7377): <!--number 7377 --><!--line 0 --><!--description ZmVhdCh1aS9taWdyYXRpb25zKTogY2xhcmlmeSBkZXNpcmVkIGF1dG9jb21wbGV0aW9uIHR5cGUgZm9yIGNsb25lX2FkZHI=-->clarify the desired autocompletion type for the clone address in migrations.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7373): <!--number 7373 --><!--line 0 --><!--description TWlncmF0aW9ucyBVSTogSW1wcm92ZSBDbGFyaXR5IGZvciBNaWdyYXRpb24gRGVzY3JpcHRpb24gVGV4dGFyZWE=-->improve the clarity of the migration description textarea.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7361): <!--number 7361 --><!--line 0 --><!--description ZmVhdCh1aSk6IEF1dG9tYXRpY2FsbHkgcmVmcmVzaCB3b3JrZmxvd3MgaW4gdGhlICJBY3Rpb25zIiBsaXN0-->automatically refresh workflows in the "Actions" list. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#automatically-refreshing-workflows).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7155): <!--number 7155 --><!--line 0 --><!--description ZmVhdCh1aSk6IGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSB0byByZXZpZXcgaW5kaXZpZHVhbCBjb21taXRzIGluIGEgcHVsbCByZXF1ZXN0-->improve the user experience to review individual commits in a pull request. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#improved-ux-for-per-commit-reviews).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7128): <!--number 7128 --><!--line 0 --><!--description VXNlIGF2YWlsYWJsZSBzY3JlZW4gd2lkdGggZm9yIEFjdGlvbnMgbG9ncw==-->use the available screen width when displaying Forgejo Actions logs.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6933): <!--number 6933 --><!--line 0 --><!--description U2hvdyBpZiBjb21taXQgaXMgdmVyaWZpZWQgaW4gYWN0aXZpdHkgZmVlZCBvZiBhbiB1c2VyIG9yIGFuIG9yZ2FuaXphdGlvbiBmb3IgbmV3IGFjdGl2aXR5-->show if a commit is verified in the activity feed of a user or an organization.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6813): <!--number 6813 --><!--line 0 --><!--description UmVpbXBsZW1lbnRlZCBlZGl0b3IgVGFiIGtleSBoYW5kbGluZyB3aXRoIGFjY2Vzc2liaWxpdHkgc2FmZWd1YXJkcy4gQmFsYW5jZSBoYXZpbmcgdGhlIGVkaXRvciB3b3JrIGFzIGV4cGVjdGVkIGJ5IGRldmVsb3BlcnMgKHdpdGggVGFiIGtleSBhZmZlY3RpbmcgaW5kZW50YXRpb24pIHdoaWxlIGFsc28gbm90IGltcGVkaW5nIGtleWJvYXJkIG5hdmlnYXRpb24u-->reimplemented editor Tab key handling with accessibility safeguards. Balance having the editor work as expected by developers (with Tab key affecting indentation) while also not impeding keyboard navigation. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#tabs-indentations-in-the-comment-editor)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8417) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8514)): <!--number 8514 --><!--line 0 --><!--description Zml4KHVpKTogbXVsdGlwbGUgQ29tYm9NYXJrZG93bkVkaXRvcnMgb24gb25lIHBhZ2UgaW50ZXJmZXJl-->multiple ComboMarkdownEditors on one page interfere with each other.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7749) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8362)): <!--number 8362 --><!--line 0 --><!--description Zml4KHVpKTogQWRkIHBhc3RlZCBpbWFnZXMgdG8gZHJvcHpvbmU=-->pasting images into the comment editor will now show that image in the ‘dropzone’.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8296) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8317)): <!--number 8317 --><!--line 0 --><!--description Zml4OiBhZGQgbWlzc2luZyB0cnVzdCBzdGF0dXMgdG8gcHVsbCByZXZpZXcgY29tbWl0cw==-->add missing trust status to pull review commits.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7492): <!--number 7492 --><!--line 0 --><!--description Zml4KHVpKTogZW5zdXJlIGNvbnNpc3RlbnQgc3dpdGNoIHBvc2l0aW9uIGluIG1hcmtkb3duIGVkaXRvcg==-->ensure consistent switch position in the markdown editor.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7420): <!--number 7420 --><!--line 0 --><!--description Zml4KHVpKTogZGlzcGxheSB1c2VyLWZyaWVuZGx5IG1lc3NhZ2UgZm9yIHJhbmdlIGVycm9y-->display user-friendly message for range error.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7402): <!--number 7402 --><!--line 0 --><!--description Zml4KHVpKTogbWFrZSBsaW1pdHMgY2xlYXJlciBpbiBjcmVhdGUgcmVwbyBmb3Jt-->make limits clearer in the create repository form.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7307): <!--number 7307 --><!--line 0 --><!--description RG9uJ3QgcHV0IHRyYWlsaW5nIHNsYXNoIGluIGF1dG9nZW5lcmF0ZWQgbmFtZSBkdXJpbmcgaW1wb3J0-->don't put trailing slash in autogenerated name in the migration form.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7245): <!--number 7245 --><!--line 0 --><!--description YWxsb3cgdXNlciB3aXRoIGFjdGlvbnMgd3JpdGUgcGVybWlzc2lvbiB0byBydW4gYSB3b3JrZmxvdyBmcm9tIHRoZSB3ZWIgVUk=-->allow user with actions write permission to run a workflow from the web UI.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6799): <!--number 6799 --><!--line 0 --><!--description Zml4KHVpKTogZW5zdXJlIHNhbWUgd2lkdGggb2YgdXNlcmNhcmRzIGluIGdyaWQ=-->ensure usercards in grid have the same width.<!--description-->
- Localization
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8238) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8294)): <!--number 8294 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8178): <!--number 8178 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8077): <!--number 8077 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7969): <!--number 7969 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7895): <!--number 7895 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7819): <!--number 7819 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7742): <!--number 7742 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7637): <!--number 7637 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7572): <!--number 7572 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7507): <!--number 7507 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7438): <!--number 7438 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7363): <!--number 7363 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7275): <!--number 7275 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
- Features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8179): <!--number 8179 --><!--line 0 --><!--description QVBJOiBuZXcgYEdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzYCBlbmRwb2ludCB0byByZXRyaWV2ZSBtdWx0aXBsZSBibG9icyBhdCBvbmNl-->new `GET /repos/{owner}/{repo}/git/blobs` API endpoint to retrieve multiple blobs at once.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8177): <!--number 8177 --><!--line 0 --><!--description YWx3YXlzIHB1Ymxpc2ggdGhlIGxpbmsgdG8gdGhlIGNvbW1pdCBzdGF0dXM=-->always publish the link to the commit status.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8143): <!--number 8143 --><!--line 0 --><!--description aW1wcm92ZSBnZW5lcmF0aW9uIG9mIGJ1bmRsZWQgYXNzZXRz-->improve the performances of the generation of bundled assets.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8115): <!--number 8115 --><!--line 0 --><!--description ZW5hYmxlIGBtbGtlbTc2OHgyNTUxOS1zaGEyNTZgIGJ5IGRlZmF1bHQgZm9yIGJ1aWx0aW4gc3No-->enable `mlkem768x25519-sha256` by default for builtin ssh.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7988): <!--number 7988 --><!--line 0 --><!--description dXBkYXRlIGFtYmlnaW91cyBjaGFyYWN0ZXJz-->update the list of ambigious characters.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7986): <!--number 7986 --><!--line 0 --><!--description bWFrZSBGb3JnZWpvIEFjdGlvbnMgc2VydmVyIGxvZ3MgbGVzcyBub2lzeQ==-->make Forgejo Actions server logs less noisy.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7968): <!--number 7968 --><!--line 0 --><!--description QWxsb3cgc2VhcmNoaW5nIGlzc3VlcyBieSBudW1iZXIsIHByaW9yaXRpemUgdGl0bGUgbWF0Y2hlcyB3aGVuIHNvcnRlZCBieSByZWxldmFuY2U=-->allow searching issues by number, prioritize title matches when sorted by relevance.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7953): <!--number 7953 --><!--line 0 --><!--description cmVwbGFjZSBnby1ycG11dGlscyBsaWJyYXJ5IHdpdGggb3VyIG93bg==-->replace go-rpmutils library with our own. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#forgejo-build-time-optimization).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7902): <!--number 7902 --><!--line 0 --><!--description Y29uZmlndXJhYmxlIGRlZmF1bHQgdW5pdHMgZm9yIG1pcnJvcnM=-->configurable default units for mirrors.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7896): <!--number 7896 --><!--line 0 --><!--description ZW5oOiBhbGxvdyBwZXIgcmVwbyBpc3N1ZSByZWluZGV4aW5nIGZvciBhZG1pbnM=-->a repository administrator has control over reindexing the issues.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7727): <!--number 7727 --><!--line 0 --><!--description aW1wcm92ZWQgcGVyZm9ybWFuY2VzIHdoZW4gY2hlY2tpbmcgZm9yIGNvbmZsaWN0cyBvbiBwdWxsIHJlcXVlc3Rz-->improved performances when checking for conflicts on pull requests. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#faster-conflict-checking).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7716): <!--number 7716 --><!--line 0 --><!--description YWxsb3cgYWNjZXNzIHRvIGAvYXBpL3YxL3BhY2thZ2VzL3t1c2VybmFtZX1gIHdpdGhvdXQgdG9rZW4=-->allow access to publicly available `/api/v1/packages/{username}` without a token.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7699): <!--number 7699 --><!--line 0 --><!--description aW1wbGVtZW50IGBHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc2AgYW5kIGBHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfWA=-->implement the `GET /repos/{owner}/{repo}/actions/runs` and `GET /repos/{owner}/{repo}/actions/runs/{run_id}` API endpoints.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7527): <!--number 7527 --><!--line 0 --><!--description dXNlIGdpdC1yZXBsYXkgZm9yIHJlYmFzaW5n-->use git-replay for rebasing for better performances.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7509): <!--number 7509 --><!--line 0 --><!--description c2VuZCBtYWlsIG9uIGZhaWxlZCBvciByZWNvdmVyZWQgRm9yZ2VqbyBBY3Rpb25zIHJ1bg==-->send mail on failed or recovered Forgejo Actions run. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#forgejo-actions-email-notifications-on-failure).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7418): <!--number 7418 --><!--line 0 --><!--description YWRkIGBsYXN0X2NvbW1pdF93aGVuYCB0byBjb250ZW50cyByZXNwb25zZQ==-->add `last_commit_when` to API contents responses.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7387): <!--number 7387 --><!--line 0 --><!--description aW5jbHVkZSBhIGRlZmF1bHQgcm9ib3RzLnR4dCB0byByZWR1Y2UgdGhlIGltcGFjdCBvZiBjcmF3bGVycw==-->include a default robots.txt to reduce the impact of crawlers. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#default-robotstxt).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7212): <!--number 7212 --><!--line 0 --><!--description dXNlIFhPUk0gRW5naW5lR3JvdXAgaW5zdGVhZCBvZiBzaW5nbGUgRW5naW5lIGNvbm5lY3Rpb24=-->use XORM EngineGroup instead of single Engine connection. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#xorm-enginegroup-connections-for-optimized-database-query-routing-and-load-balancing).<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/2364): <!--number 2364 --><!--line 0 --><!--description c3luYyBmb3Jrcw==-->sync forks. [Read more in the v12.0 companion blog post](https://forgejo.org/2025-07-release-v12-0/#keeping-forks-in-sync).<!--description-->
- Bug fixes
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8511) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8516)): <!--number 8516 --><!--line 0 --><!--description Zml4OiBQUiBub3QgYmxvY2tlZCBieSByZXZpZXcgcmVxdWVzdCBmb3IgYSB3aGl0ZWxpc3RlZCB0ZWFt-->pull requests were not blocked by review request for a whitelisted team.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8475) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8480)): <!--number 8480 --><!--line 0 --><!--description c2V2ZXJhbCBmaXhlcyBvZiBBTFQgUGFja2FnZSByZWdpc3RyeQ==-->several fixes of the ALT RPM package registry.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8391) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8459)): <!--number 8459 --><!--line 0 --><!--description QXV0aCBIZWFkZXI6IEFsbG93IGxvd2VyY2FzZSBhcyB3ZWxsIGFzIHVwcGVyY2FzZSB0b2tlbg==-->allow lowercase as well as uppercase token keyword in the auth header.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8450) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8454)): <!--number 8454 --><!--line 0 --><!--description Zml4OiBjb3JyZWN0bHkgbWFyayByZXZpZXdzIGFzIHN0YWxlIGZvciBBR2l0IFBScw==-->correctly mark reviews as stale for AGit pull requests.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8367) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8386)): <!--number 8386 --><!--line 0 --><!--description Zml4OiB1c2VyIGFjdGl2YXRpb24gd2l0aCB1cHBlcmNhc2UgZW1haWwgYWRkcmVzcw==-->user activation failed when an email address contained uppercase letters.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8330) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8349)): <!--number 8349 --><!--line 0 --><!--description Zml4OiBsb2FkIE9sZE1pbGVzdG9uZSBiYXNlZCBvbiBPbGRNaWxlc3RvbmVJRCwgbm90IE1pbGVzdG9uZUlE-->fix: load OldMilestone based on OldMilestoneID, not MilestoneID<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8037): <!--number 8037 --><!--line 0 --><!--description b21pdCBDb250ZW50LUxlbmd0aCBvbiAzMDcgcmVkaXJlY3RzIHdoZW4gc2VydmluZyBkaXJlY3QgbWFuaWZlc3QgZm9yIGNvbnRhaW5lcnM=-->omit Content-Length on 307 redirects when serving direct manifest for containers.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8034): <!--number 8034 --><!--line 0 --><!--description Y2FtZWwgYW5kIHBhc2NhbCBjYXNlIHRyYW5zZm9ybWVy-->fix a bug causing the PASCAL-modifier to return camel-case.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8028): <!--number 8028 --><!--line 0 --><!--description QWRkcyBjb2RlIHRvIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgaXNzdWVyIGluIG9hdXRoIGNsYWltcw==-->remove the trailing slash from the issuer in OAuth claims.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8025): <!--number 8025 --><!--line 0 --><!--description cmV0dXJuIHRoZSBjb3JyZWN0IGFnaXQgdHlwZSBpbiBzc2hfaW5mbw==-->return the correct AGit type in ssh_info.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7932): <!--number 7932 --><!--line 0 --><!--description W2dpdGVhXSBGaXggdXJsIHZhbGlkYXRpb24gaW4gd2ViaG9vayBhZGQvZWRpdCBBUEk=-->fix url validation in the webhook add/edit API.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7930): <!--number 7930 --><!--line 0 --><!--description QWRkIGVycm9yIHJlcG9ydGluZyB0byBQUnMgd2l0aCBpbnZhbGlkIHdvcmtmbG93cw==-->add error reporting to pull requests with invalid Forgejo Actions workflow files.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7644): <!--number 7644 --><!--line 0 --><!--description YWxsb3cgaW5zdGFuY2UgQVBJIFVSTHMgaW4gcmVsZWFzZSBhc3NldHM=-->allow instance API URLs in release assets.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7454): <!--number 7454 --><!--line 0 --><!--description Q2FuY2VsIGEgcmV2aWV3-->fix a border case where it was not possible to cancel a pull request review.<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8524) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8526)): <!--number 8526 --><!--line 0 --><!--description Y2hvcmU6IGZhaWxlZCBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBhcmUgbm90IGVycm9ycyBhbmQgYXJlIGRpc3BsYXllZCBhdCB0aGUgbG9nIGluZm8gbGV2ZWw=-->chore: failed authentication attempts are not errors and are displayed at the log info level<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8301) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8518)): <!--number 8518 --><!--line 0 --><!--description Y2hvcmU6IHVzZSBldmVudHVhbGx5IGZvciBteXNxbCBjb2xsYXRpb24gdGVzdA==-->chore: use eventually for mysql collation test<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8492) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8498)): <!--number 8498 --><!--line 0 --><!--description Zml4KGNvZGUtc2VhcmNoKTogSGlnaGxpZ2h0U2VhcmNoUmVzdWx0Q29kZSBzaG91bGQgY291bnQgdGhlIG51bWJlciBvZiBieXRlcyBhbmQgbm90IHRoZSBudW1iZXIgb2YgcnVuZXM=-->fix(code-search): HighlightSearchResultCode should count the number of bytes and not the number of runes<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8464) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8474)): <!--number 8474 --><!--line 0 --><!--description Zml4OiB1c2UgcGFyZW50IGNvbnRleHQgZm9yIG5ldyB0cmFuc2FjdGlvbnM=-->fix: use parent context for new transactions<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8460) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8466)): <!--number 8466 --><!--line 0 --><!--description Y2hvcmU6IGRpc2FibGUgbWlzbWF0Y2hlZCByb290IFVSTCBlMmUgdGVzdCBmb3Igc2FmYXJp-->chore: disable mismatched root URL e2e test for safari<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8461) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8463)): <!--number 8463 --><!--line 0 --><!--description Y2hvcmU6IGRvIG5vdCBuYXZpZ2F0ZSB0byBzYW1lIFVSTCBpbiBFMkUgdGVzdA==-->chore: do not navigate to same URL in E2E test<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8258) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8439)): <!--number 8439 --><!--line 0 --><!--description Zml4OiBjb3JydXB0ZWQgd2lraSB1bml0IGRlZmF1bHQgcGVybWlzc2lvbiAoIzgyMzQgZm9sbG93LXVwKQ==-->fix: corrupted wiki unit default permission (#8234 follow-up)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8366) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8404)): <!--number 8404 --><!--line 0 --><!--description Zml4OiBjYW5jZWxsZWQgb3Igc2tpcHBlZCBydW5zIGFyZSBub3QgZmFpbHVyZXMgZm9yIG5vdGlmaWNhdGlvbnM=-->fix: cancelled or skipped runs are not failures for notifications<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8326) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8331)): <!--number 8331 --><!--line 0 --><!--description Zml4OiBtYWtlIEFQSSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZWhlYWR9IHdvcmsgd2l0aCBmb3Jrcw==-->fix: make API /repos/{owner}/{repo}/compare/{basehead} work with forks<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8320) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8321)): <!--number 8321 --><!--line 0 --><!--description Y2hvcmU6IHNvcnQgYmxvY2tlZCB1c2VycyBsaXN0IGZvciBkZXRlcm1pc3RpYyByZXN1bHRz-->chore: sort blocked users list for determistic results<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8304) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8318)): <!--number 8318 --><!--line 0 --><!--description Zml4OiBwYXNzIGRvZXIncyBJRCBmb3IgQ1JVRCBpbnN0YW5jZSBzaWduaW5n-->fix: pass doer's ID for CRUD instance signing<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8002) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8290)): <!--number 8290 --><!--line 0 --><!--description Zml4KHVpKTogcmVsZWFzZTogbmFtZSBpcyBvdmVycmlkZGVuIHdpdGggdGFnIG5hbWUgb24gZWRpdA==-->fix(ui): release: name is overridden with tag name on edit<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8271) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8277)): <!--number 8277 --><!--line 0 --><!--description Q0kgZGVidWc6IHRlc3RTbGVlcDogc2hvdyBhY3R1YWwgdGltZXMgb24gZmFpbHVyZXM=-->CI debug: testSleep: show actual times on failures<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8252): <!--number 8252 --><!--line 0 --><!--description YWRkIGFuIGluZGV4IHRvIHRoZSBBY3Rpb25SdW4uc3RvcHBlZCBjb2x1bW4=-->add an index to the ActionRun.stopped column<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8245): <!--number 8245 --><!--line 0 --><!--description RG93bmdyYWRlIHBsYXl3cmlnaHQgdGVtcG9yYXJpbHkgYW5kIGFsbG93IHJ1bm5pbmcgYWxsIGUyZSB0ZXN0cw==-->Downgrade playwright temporarily and allow running all e2e tests<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8243): <!--number 8243 --><!--line 0 --><!--description Z2l0L2Jsb2IgdXNlIE5ld1RydW5jYXRlZFJlYWRlciBmb3IgcHJvZmlsZSBhbmQgY29kZW93bmVycw==-->git/blob use NewTruncatedReader for profile and codeowners<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8188): <!--number 8188 --><!--line 0 --><!--description bWFrZSB0ZXN0IHN1aXRlIHJ1biBvbiBvbGRlciBnaXQgdmVyc2lvbg==-->make test suite run on older git version<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8168): <!--number 8168 --><!--line 0 --><!--description ZG8gbm90IG1peCB1cmZhdmUgdjIgd2l0aCB1cmZhdmUgdjM=-->do not mix urfave v2 with urfave v3<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8166): <!--number 8166 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBza2lwIHRlc3RzIGlmIFRFU1Rfe01JTklPX0VORFBPSU5ULEVMQVNUSUNTRUFSQ0hfVVJMfSBpcyBub3Qgc2V0-->chore(ci): skip tests if TEST_{MINIO_ENDPOINT,ELASTICSEARCH_URL} is not set<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8050): <!--number 8050 --><!--line 0 --><!--description Y2hvcmUocmVub3ZhdGUpOiBidW1wIHRvIHY0MC40MC4wIGFuZCBkaXNhYmxlIHY3-->chore(renovate): bump to v40.40.0 and disable v7<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8049): <!--number 8049 --><!--line 0 --><!--description Q0xJIGlzIGZvcmdlam8gbm90IEZvcmdlam8=-->CLI is forgejo not Forgejo<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8044): <!--number 8044 --><!--line 0 --><!--description YWRkIG1pc3NpbmcgYm90dG9tIG1hcmdpbiBmb3IgdmVyaWZpY2F0aW9uLWJ1dHRvbiBpbiByZWxlYXNlIHZpZXc=-->add missing bottom margin for verification-button in release view<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8041): <!--number 8041 --><!--line 0 --><!--description W2dpdGVhXSBBbHdheXMgdXNlIGFuIGVtcHR5IGxpbmUgdG8gc2VwYXJhdGUgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0cmFpbGVy-->[gitea] Always use an empty line to separate the commit message and trailer<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7950): <!--number 7950 --><!--line 0 --><!--description Zml4KHVpKTogcmVsYXRpdmUgdGltZSBlbGVtZW50cyB3ZXJlIHJlc2V0IG9uIGh0bXggc3dhcA==-->fix(ui): relative time elements were reset on htmx swap<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7822): <!--number 7822 --><!--line 0 --><!--description Y2hvcmUodWkpOiBjbGVhbiB1cCBoYXNoYm94IENTUywgc21hbGwgZGVzaWduIGNoYW5nZXM=-->chore(ui): clean up hashbox CSS, small design changes<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7817): <!--number 7817 --><!--line 0 --><!--description cmVwbGFjZSDDnyB3aXRoIHNzIGluIG5vcm1hbGl6ZVVzZXJOYW1l-->replace ß with ss in normalizeUserName<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7731): <!--number 7731 --><!--line 0 --><!--description Y2hvcmU6IGZpeCB0ZXN0IHRvIGF2b2lkIGRhdGEgcmFjZQ==-->chore: fix test to avoid data race<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7728): <!--number 7728 --><!--line 0 --><!--description cmVmYWN0b3IgJiBlbmhhbmNlIEFQIGVsZW1lbnRzIHVzZWQ=-->refactor & enhance AP elements used<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7720): <!--number 7720 --><!--line 0 --><!--description Y2hvcmUocmVsZWFzZSk6IG5leHQtZGlnZXN0IG1vdmVkIHRvIGludmlzaWJsZS5mb3JnZWpvLm9yZw==-->chore(release): next-digest moved to invisible.forgejo.org<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7707): <!--number 7707 --><!--line 0 --><!--description ZG8gbm90IHNldCBHT1BST1hZPWRpcmVjdCBpbiBEb2NrZXJmaWxlKg==-->do not set GOPROXY=direct in Dockerfile*<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7580): <!--number 7580 --><!--line 0 --><!--description ZmVhdCh1aSk6IGVubGFyZ2UgbWV0YWRhdGEgbGluZSBnYXBzIGluIGlzc3VlIGxpc3QgYW5kIHJlZmFjdG9y-->feat(ui): enlarge metadata line gaps in issue list and refactor<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7577): <!--number 7577 --><!--line 0 --><!--description ZmVhdCh1aSk6IG1ha2UgZm9yayByZWxhdGVkIGJhbm5lcnMgbW9yZSBjb25zaXN0ZW50-->feat(ui): make fork related banners more consistent<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7575): <!--number 7575 --><!--line 0 --><!--description Zml4KHVpKTogdXNlIGNvcnJlY3QgYnJhbmNoIG5hbWUgaW4gYnJhbmNoIHRhZyBzZWxlY3Rvcg==-->fix(ui): use correct branch name in branch tag selector<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7571): <!--number 7571 --><!--line 0 --><!--description Zml4KHVpKTogc2hvdyBjb21taXQgaWNvbiBpbiBicmFuY2ggZHJvcGRvd24gYnV0dG9uIHdoZW4gdmlld2luZyBhIGNvbW1pdA==-->fix(ui): show commit icon in branch dropdown button when viewing a commit<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7565): <!--number 7565 --><!--line 0 --><!--description Z3JhbW1hciBpbiBhIHJlbGVhc2UgQVBJIGVycm9yIG1lc3NhZ2U=-->grammar in a release API error message<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7470): <!--number 7470 --><!--line 0 --><!--description Zml4KHVpKTogb25seSBydW4gYXV0aF9uYW1lIGNvZGUgb24gbmV3IGFuZCBlZGl0IHBhZ2U=-->fix(ui): only run auth_name code on new and edit page<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7462): <!--number 7462 --><!--line 0 --><!--description Y2hvcmUoaTE4bik6IGFkZCBhIG1ldGEgbGluZSB0byB0aGUgYmFzZSBqc29uIHRyYW5zbGF0aW9u-->chore(i18n): add a meta line to the base json translation<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7356): <!--number 7356 --><!--line 0 --><!--description Zml4KHVpKTogaW1wcm92ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgaWNvbnMgd2l0aCB0ZXh0IGluIHRoZSBvdmVyZmxvdyBtZW51ICgjNzMxNCk=-->fix(ui): improve vertical alignment of icons with text in the overflow menu (#7314)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7344): <!--number 7344 --><!--line 0 --><!--description Zml4KHVpKTogRG8gbm90IGNoZWNrIGZvciBgdmVydGljYWwtYWxpZ25g-->fix(ui): Do not check for `vertical-align`<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7314): <!--number 7314 --><!--line 0 --><!--description Zml4KHVpKTogaW1wcm92ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgaWNvbnMgd2l0aCB0ZXh0IGluIHRoZSBvdmVyZmxvdyBtZW51-->fix(ui): improve vertical alignment of icons with text in the overflow menu<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7278): <!--number 7278 --><!--line 0 --><!--description ZmVhdChidWlsZCk6IGxpbnQtbG9jYWxlLXVzYWdlIHNob3VsZCBkZXRlY3QgbW9yZSBUciBmdW5jdGlvbnM=-->feat(build): lint-locale-usage should detect more Tr functions<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7271): <!--number 7271 --><!--line 0 --><!--description ZmVhdCh1aSk6IGltcHJvdmUgYnV0dG9uIGdhcCBjb25zaXN0ZW5jeSwgbWFrZSBpdCB2YXJpYWJsZSwgbGFyZ2VyIG9uIHRvdWNoc2NyZWVucw==-->feat(ui): improve button gap consistency, make it variable, larger on touchscreens<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7261): <!--number 7261 --><!--line 0 --><!--description cmVkaXJlY3QgdG8gc3VibW9kdWxlIGluc3RlYWQgb2YgdGhyb3dpbmcgNTAwIGVycm9yIHdoZW4gdmlld2luZyBzdWJtb2R1bGUgZW50cnk=-->redirect to submodule instead of throwing 500 error when viewing submodule entry<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7203): <!--number 7203 --><!--line 0 --><!--description YWRkIHBvcnQgYW5kIHNjaGVtYSB0byBmZWRlcmF0aW9uIGhvc3Q=-->add port and schema to federation host<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7092): <!--number 7092 --><!--line 0 --><!--description ZmVhdChyZXBvLGxvY2FsZSk6IG1lcmdlIFBSL2lzc3VlcyBjYXNlcyBmb3Igc29tZSByZXBvL2lzc3VlIHN0cmluZ3M=-->feat(repo,locale): merge PR/issues cases for some repo/issue strings<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7035): <!--number 7035 --><!--line 0 --><!--description ZW5hYmxlIEhUVFAgc2lnbmF0dXJlcyBvbiBhbGwgQWN0aXZpdHlQdWIgZW5kcG9pbnRz-->enable HTTP signatures on all ActivityPub endpoints<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6154): <!--number 6154 --><!--line 0 --><!--description UmVwbGFjZSB0aGUgJ3JlbGF0aXZlLXRpbWUnIGVsZW1lbnQgc2NyaXB0aW5nIHdpdGggY3VzdG9tLCB0cmFuc2xhdGFibGUgcmV3cml0ZQ==-->Replace the 'relative-time' element scripting with custom, translatable rewrite<!--description-->
- Already announced in the release notes of an older stable release
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8234): <!--number 8234 --><!--line 0 --><!--description Y29sbGFib3JhdG9yIGNhbiBlZGl0IHdpa2kgd2l0aCB3cml0ZSBhY2Nlc3M=-->collaborator can edit wiki with write access<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8189): <!--number 8189 --><!--line 0 --><!--description ZG8gbm90IGlnbm9yZSBhdXRvbWVyZ2Ugd2hpbGUgYSBQUiBpcyBjaGVja2luZyBmb3IgY29uZmxpY3Rz-->do not ignore automerge while a PR is checking for conflicts<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8170): <!--number 8170 --><!--line 0 --><!--description ZXJyb25lb3VzIGxpc3QgY29udGludWF0aW9uIG9uIENtZCtFbnRlciAoIzgxNTMp-->erroneous list continuation on Cmd+Enter (#8153)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8155): <!--number 8155 --><!--line 0 --><!--description ZG8gbm90IGZhaWwgd2hlbiByZWxlYXNlIG9yIHdpa2kgaXMgc2V0IGluIGAvcmVwb3MvbWlncmF0ZWAgQVBJ-->do not fail when release or wiki is set in `/repos/migrate` API<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7752): <!--number 7752 --><!--line 0 --><!--description Zml4KHNlYyk6IG9ubHkgZGVncmFkZSBwZXJtaXNzaW9uIGNoZWNrIGZvciBnaXQgcHVzaA==-->fix(sec): only degrade permission check for git push<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7650): <!--number 7650 --><!--line 0 --><!--description ZGlzcGxheSB0aGUgbGlzdCBvZiB0YXNrcyBpbiB0aGUgcnVubmVyIGVkaXQgcGFnZQ==-->display the list of tasks in the runner edit page<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7594): <!--number 7594 --><!--line 0 --><!--description Zml4KGkxOG4pOiBwcmV2ZW50IGluY29ycmVjdCBsb2dnaW5nIG9uIHN0cmluZ3MgbWlzc2luZyBpbiBKU09OIGxvY2FsZXM=-->fix(i18n): prevent incorrect logging on strings missing in JSON locales<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7584): <!--number 7584 --><!--line 0 --><!--description Zml4KHVpL3ByKTogdXNlIGV5ZSBpY29uIGZvciByZXZpZXdz-->fix(ui/pr): use eye icon for reviews<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7581): <!--number 7581 --><!--line 0 --><!--description Zml4KHVpKTogdXNlIGdhcCBpbiBzd2l0Y2ggaXRlbXM=-->fix(ui): use gap in switch items<!--description-->