DESIGN.md revision 6: owner decisions (2026-10-13) 23-30 and a new section 13, "Access tokens". Authentik tokens, managed through this qbit, are QQQ's personal access token solution. TOKENS is on by default with writes enabled, with an opt-out.
Decision 30 is the owner-approved (coordinator-approved) mechanism revision. In Authentik 2026.8.3, TokenViewSet.perform_create always assigns a non-superuser's new token to the caller, so add_token cannot mint tokens for anyone else. Tokens for people are therefore created as that person, through RFC 8693 token exchange via a qqq-<appKey>-token-broker provider that has a deny policy for protected users. Service accounts use service_account, set_key and PATCH; every PATCH sends intent, user and expires, and a race guard re-reads the token afterwards.
Guardrails (a)-(f), optional per-token scopes (the authentik_token_scope table, a signed qqq_token claim and core QCredentialScope, qqq#1153), the one-time key (core OneTimeSecret, qqq#1162 plus a process-output PR), reminders, last used, admin views and the delivery phases.
## Summary
- DESIGN.md revision 6: owner decisions (2026-10-13) 23-30 and a new section 13, "Access tokens". Authentik tokens, managed through this qbit, are QQQ's personal access token solution. TOKENS is on by default with writes enabled, with an opt-out.
- Decision 30 is the owner-approved (coordinator-approved) mechanism revision. In Authentik 2026.8.3, `TokenViewSet.perform_create` always assigns a non-superuser's new token to the caller, so `add_token` cannot mint tokens for anyone else. Tokens for people are therefore created *as that person*, through RFC 8693 token exchange via a `qqq-<appKey>-token-broker` provider that has a deny policy for protected users. Service accounts use `service_account`, `set_key` and `PATCH`; every `PATCH` sends `intent`, `user` and `expires`, and a race guard re-reads the token afterwards.
- Guardrails (a)-(f), optional per-token scopes (the `authentik_token_scope` table, a signed `qqq_token` claim and core `QCredentialScope`, qqq#1153), the one-time key (core `OneTimeSecret`, qqq#1162 plus a process-output PR), reminders, last used, admin views and the delivery phases.
- New `docs/ACCESS-TOKENS.md`, "Using access tokens".
## Test plan
- [x] Docs only; links checked.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
TokenViewSet.perform_createalways assigns a non-superuser's new token to the caller, soadd_tokencannot mint tokens for anyone else. Tokens for people are therefore created as that person, through RFC 8693 token exchange via aqqq-<appKey>-token-brokerprovider that has a deny policy for protected users. Service accounts useservice_account,set_keyandPATCH; everyPATCHsendsintent,userandexpires, and a race guard re-reads the token afterwards.authentik_token_scopetable, a signedqqq_tokenclaim and coreQCredentialScope, qqq#1153), the one-time key (coreOneTimeSecret, qqq#1162 plus a process-output PR), reminders, last used, admin views and the delivery phases.docs/ACCESS-TOKENS.md, "Using access tokens".Test plan
🤖 Generated with Claude Code