Added
-
Git authentication via the browser for Gitea hosts (#3385). A
KLANGKWS_FEATURE_OAUTH_PROVIDERSentry with
flow: authorization_code_pkceruns the OAuth authorization-code
flow with PKCE (S256) for hosts like Gitea that implement no device
flow: the firstgit cloneopens an authorization popup, approval
happens on the Gitea page, and the tab session refreshes the token
headlessly afterwards. The operator registers a public OAuth
application in Gitea's user settings pointing at the klangk origin;
see the new Gitea docs chapter. GitHub and GitLab device
flows are unchanged. -
PyPI project links (#3369). The
klangkwheel now carries
project.urls— Homepage, Documentation, Repository, Issues, and
Changelog — so the PyPI project and release pages show the sidebar
links. Changelog points at the docs-rendered changelog page.
Changed
dart formatpre-commit hook verifies instead of rewriting
(#3376). The hook now runsdart format --output=none --set-exit-if-changedviascripts/dart-format-verify.shand fails
on unformatted files instead of silently rewriting them mid-commit —
rewrite mode flipped short→tall style in fresh worktrees (where no
.dart_toolexists to resolve the language version) and wedged prek's
stash rollback during cherry-picks. Files whose package has no
.dart_toolyet are skipped with a notice; rundart formatyourself
before committing. The frontend CI workflow now checks formatting
afterpub get(src/frontendlib+testand every feature package
with tests), and the five files that were off-canonical at the pinned
language version were reformatted.
Fixed
- SSO login completes under an every-visit login banner
(#3371). Withlogin_banner_every_visiton, the browser's
return from the identity provider carried a one-time login code
that the banner gate discarded by redirecting to the consent page
first, so single sign-on could never finish (the code expires in 60
seconds and the redirect replaces the URL). The OIDC callback page
now redeems the code before the banner is shown, and the user is
sent to the consent page on the next navigation as usual. A failed
code exchange shows the error with a “Go to Login” button instead
of stranding the browser on the callback page.