Files
james.maesandGPT-6 2e356b8117
QRun-IO/ci-policy: ci / fork-guard (pull_request) Skipped
QRun-IO/ci-policy: native / fork-deny (pull_request) Skipped
QRun-IO/ci-policy: native / dotnet-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / Scoped workflow [workflow f1d46718955078331817c6206b822a94bc7d769f] (pull_request) Successful in 9s
QRun-IO/ci-policy: ci / head-profile (pull_request) Skipped
QRun-IO/ci-policy: native / native-result (pull_request) Successful in 9s
QRun-IO/ci-policy: ci / repository-policy (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (pull_request) Skipped
QRun-IO/ci-policy: ci / node-8 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-9 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-10 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-13 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-14 (pull_request) Skipped
QRun-IO/ci-policy: ci / android-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / original-business (pull_request) Skipped
QRun-IO/ci-policy: ci / original-mcp (pull_request) Skipped
QRun-IO/ci-policy: ci / original-voyage (pull_request) Skipped
QRun-IO/ci-policy: ci / original-cli (pull_request) Skipped
QRun-IO/ci-policy: ci / not-enrolled (pull_request) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (pull_request) Skipped
Shared Java Maven CI with Docker / secrets (push) Successful in 38s
QRun-IO/ci-policy: Shared Java Maven CI with Docker / secrets (pull_request) Successful in 38s
qbit release candidate / cut-rc (pull_request) Failing after 18s
Release candidate / release-rc (pull_request) Failing after 18s
qbit release candidate / tag-and-release (pull_request) Skipped
QRun-IO/ci-policy: Shared Java Maven CI with Docker / verify (pull_request) Failing after 15m39s
QRun-IO/ci-policy: Shared Java Maven CI with Docker / gate (pull_request) Failing after 24s
QRun-IO/ci-policy: ci / java-docker-3 (pull_request) Failing after 1h14m34s
QRun-IO/ci-policy: ci / ci-result (pull_request) Failing after 10s
Shared Java Maven CI with Docker / verify (push) Failing after 17m19s
Shared Java Maven CI with Docker / gate (push) Failing after 24s
qrun-release / release (push) Failing after 1h16m30s
qrun-release / postpublish (push) Skipped
feat(authentik): checkpoint application access and identity synchronization RC
Add user and group QQQ application-role access editing, bounded catalogs,
webhook inbox and SQL mirrors, refreshed session permissions, and deferred
invitation assignments. Include the isolated local review host, browser
acceptance scripts, documentation and the token-widget column mapping fix.

User approved this RC checkpoint. Full 1.0 gates remain documented, including
the schema-drift matcher and PostgreSQL integration errors from the full gate.
Companion UI: QRun-IO/qqq-frontend-next#205.

Co-Authored-By: GPT-6 <noreply@openai.com>
2026-11-05 05:29:54 -06:00

7.5 KiB

Status

The Authentik qbit's progress through DESIGN.md section 11, with links. Updated with each PR.

Local review update — 2026-11-04

  • Refreshed from Gitea develop (fe6f716) on review/local-latest.
  • Updated the QQQ BOM to 4.1.0-RC.21 and added a local Next UI 1.0.0-RC.37 host.
  • mvnw.cmd verify -DskipITs: 321 tests passed, zero failures/errors/skips; JaCoCo coverage gate passed.
  • Real browser check: Identity dashboard, users, user details, Edit User Review and Result all worked against disposable Authentik 2026.8.3; a synthetic user's display name was successfully changed through the qbit.
  • A clean full contract gate is still required: the separate test stack hit first-boot blueprint errors. Manual reapplication is diagnostic assistance, not evidence of an unattended green bootstrap.
  • This is review-ready, not a 1.0 release sign-off. OAuth, personal token exchange, two-operator approval and production rollout still need acceptance in a fully configured host. Earlier owner checklist items below have not been revalidated against production during this session.

Start/stop instructions and review limitations: LOCAL-REVIEW.md.

v1 = phases 0-3 (the full user lifecycle and group/permission management)

Phase State
0. Foundations and migration agent items done; owner items open (checklist items 6-8, 10, then 12)
1. Read-only plus the permissions model done, except the mirror tables, reconcile and the access-matrix widget (see "Not built yet")
2. Memberships and permission editing done, except the webhook route, ESB trigger, inbox and session re-evaluation marking
3. Full user lifecycle done, except the optional snapshot export
4. RBAC role management post-v1, not started
5. Policies and full CRUD (DESIGN.md section 12) 5a policy model (#14), 5b policy editor (#15), 5c user and group CRUD additions; the Next UI widget is a separate qqq-frontend-next PR

Built in this line (0.1)

Area What
People Create, invite, edit (username, name, email, path, other attributes), deactivate, reactivate, delete (feature DELETE), password reset email, reset MFA, revoke app passwords, revoke sessions, cancel invitations
Groups Create, edit (parents, other attributes), delete (feature DELETE), add and remove members (bulk), edit permissions and app access, edit the group policy (feature POLICIES)
Safety Subset rule on live groups, protected accounts and superuser groups, no self-edits, last-admin protection, reasons, typed confirmations, bulk caps, stale checks, two-person approval for authentik.*
Audit authentik_admin_action (before the call), Authentik custom_qqq_admin_action events, approval requests
Screens Home dashboard, main tables in the nav, child lists on parents, every action as a table or record action
Tests Unit tests on an in-memory Authentik (rules, processes, app, home), contract tests on Authentik 2026.8.3

Not built yet (and why)

Item Note
Authentik webhook, ESB trigger, inbox, session re-evaluation marking Needs the notification transport in cluster-gitops (inert today); reads are live (30 s cache) so screens are correct without it
Mirror tables and reconcile For Web Users joins and widget counts; the home reads live
Access matrix widget, group tree widget Needs Next UI custom widgets (separate frontend PRs)
Snapshot export Optional in the spec
RBAC role management Phase 4
Alerts producer integration Optional until the Alerts qbit SPI (QRun-IO/qqq#1090) lands
Quick Search for users and groups They are API-backed (read-through), so they are searched with the table's own search box, which Authentik evaluates live
Invitations add groups Groups for invited people are added after they sign up (needs the webhook)

Phase 0: foundations (agent items done; owner items open)

# Item State Where
1 Repo, DESIGN.md, CI, README, CLAUDE.md done this repo (develop); public
2 Config, producer, AuthentikActionUtil, pinned schema + drift test done phase 0 PR
3 Testcontainers harness, fixture recorder, contract tests (b), (c), (d), (h) done src/test/java/.../contract
4 Open points (i)-(iv) resolved done DESIGN.md section 0.2
5 cluster-gitops PR (bootstrap, removals, sign-in policy, webhook, lint) draft KofTwentyTwo/cluster-gitops#72
6 Staging rehearsal owner docs/PHASE0-OWNER-CHECKLIST.md, docs/cluster-gitops-phase0/rehearse-phase0.sh
7 Production apply owner checklist
8 Service-account token, Infisical, webhook secret owner checklist
9 Website-Backend wiring (ExternalSecret + env, qbit behind a disabled flag) draft KofTwentyTwo/cluster-gitops#73, Website-Backend#94
10 Seed attributes, break-glass password owner checklist
11 Read-only on staging after 6-10 flip AUTHENTIK_QBIT_ENABLED
12 Turn on the full lifecycle (role permissions, brand recovery flow, tables, flags) after 11 checklist item 12

Contract and unit tests (Authentik 2026.8.3)

CI=true ./mvnw verify. The numbers are filled in at the end of each PR; see the PR description.

The diagnostic full run was stopped during BlueprintReapplyIT after the assisted bootstrap (5 tests) and schema drift (1 test) passed. It is incomplete and is not a passing contract gate. The review JVM remains running independently.

Application access editor — 2026-11-04

Implemented QQQ application roles (tagged Authentik groups), checkbox named-permission/sign-in access editing, server-searched assignment selectors, direct user grants isolated in single-member groups, and inherited grant provenance. Generic group operations cannot repurpose direct-user access groups. All writes retain the live guard, audit, stale-state and approval paths.

Validation: 330 offline backend tests passed with the JaCoCo gate; 46 frontend access/process widget tests passed; typecheck and changed-file lint passed. Real-Authentik smoke testing caught and fixed the default picker OR-filter incompatibility and reopening after the last direct grant is removed. This is review-ready development work, not a 1.0 release acceptance claim: the complete contract suite and fresh OAuth sign-in acceptance remain outstanding.

Review instructions and scoped start/stop commands: docs/LOCAL-REVIEW.md. The new UI source is in C:/Users/james/.cache/qqq-authentik-access-ui; it is not in the published frontend JAR yet. No changes have been committed or published.

Final live result: target/access-smoke.log passes role creation, group inheritance, searchable selections, membership add/remove, direct grant save/revoke/reopen/restore and inherited access retention. The frontend proxy and group permission/sign-in checkbox payload were verified, and the review UI returns HTTP 200. review.sam is seeded with both direct and inherited application grants for manual review.

Catalog scaling verification (2026-11-04)

Direct grants now use guarded 25-resource catalog pages with application/type/search filters and page-scoped bulk editing. Complete direct selections remain independent of page requests; unknown and off-page grants are retained. Generated 1,000-table functional coverage passes. Backend verify: 331 tests and coverage gate; frontend: 47 tests, typecheck and lint. Live frontend proxy serves the new catalog. This is not a production concurrency benchmark or 1.0 release acceptance.