5.0 KiB
P7-10 Users
Implemented CONDITIONAL GO; final hygiene and publication pending. This bounded change preserves /admin/users and the existing authenticated administrator API contract. The shell retains the route h1; the owner uses the shared h2 header, h3 create section and existing desktop DataGrid/mobile cards.
Publication: 7ecc0d6605, normal push/direct verification 13:10:07 UTC. Working/untracked/static checks passed, but final staged diff --check found an extra terminal blank line in the new native fixture. The root incorrectly continued the commit/push after that nonzero result. The immediate follow-up removes that blank line and reruns staged/full-phase whitespace; it does not alter application code, assertions or test outcomes. As-run source hashes in the original results remain historical byte identities.
Findings and changes
The previous list catch converted every error to an empty list. Creation serialized a ProblemDetails object as [object Object], and pending actions had no synchronous admission or disposal guard. A successful create could clear newer form values or start another private list read after unmount. Five new ordinary regressions failed against the prior owner while all four original cases passed.
The page now uses existing useViewResource/ViewStateNotice for distinct loading, unavailable/denied and actual empty states. Retry only reloads the list. A native create form retains the exact email/password/Admin payload. All mutations share synchronous admission and current-session/lifetime checks, current-language feedback and a named pending focus target. Creation clears only submitted fields that have not changed; a committed create followed by failed refresh offers read recovery without replay. Accepted deletion HTTP202 is labelled queued, not completed. Server last-admin/self-demotion/exact-email/delete availability remain authoritative.
Shared section/surface/density tokens replace owner-specific decorative surfaces. Mobile identities wrap. Desktop two-dimensional grid scrolling is intentional, named and keyboard reachable, with root overflow still checked. Final visual review exposed clipped wrapped action buttons; a strengthened browser assertion failed ordinarily before adding content-sized DataGrid rows. It now verifies every row action fits vertically and a horizontally scrolled action receives visible keyboard focus. Sorting, pagination and row identity remain unchanged.
Evidence
- Frontend 18/18 cases in five suites PASS: ten Users cases, including six additions, plus eight shared confirmation/dialog cases. Original self-demotion warning, other-admin warning, last-admin disable and exact-email confirmation remain ordinary passing cases. Queued-deletion feedback is tested with a mocked202, not an actual deletion.
- Existing backend 25/25 PASS, zero skipped, covering Users controllers, API administrator authorization and session-context middleware with the unchanged Release binary.
- Final native 3/3 PASS, zero skips/flaky/retries, 13:07:56–13:08:20 UTC, export
f6H1YeLZWstdE-yoN5W8B. Real isolated HTTP verifies administrator creation/role readback, revoked target sessions, non-admin403, last-admin409, deletion-disabled503 with retained account, GET-only503 recovery and keyboard creation. No reset email or actual account deletion runs. - English/Bokmål light/dark samples at320,390,768,1024,1440,1920; seven all-enabled axe scans, zero violations,28 incomplete nodes. These are finite paired samples, not the full Cartesian product.
- App/browser TypeScript, lint and production build PASS. The intermediate compiler-memoization lint failure and its correction remain retained. Portable results record command/result hashes and explicitly post-run source identities.
Both final320px Bokmål dark and1440px English light PNGs were actually inspected after the row correction. The other five images are retained automated evidence. Earlier candidate images and clipped-row RED remain historical evidence. Incompletes include invisible badges/overlapping backgrounds, the inherited roleless shell version badge and MUI DataGrid sort-tooltip wrapper. These are retained accessibility qualifications for the shared-owner integration; no axe rule or application assertion is disabled. Human screen-reader, physical touch/software keyboard, actual zoom and production output checks remain pending.
Preservation and remaining work
PRES-A01/E09 and affected shared interaction contracts gain bounded proof without changing the 57-group disposition or33routes. No backend authorization, tenant data, lifecycle flag, CV renderer/PDF/revision or AI safeguard changes. Current admin actions lack a separate recent-auth guard; this change does not claim otherwise. Actual SMTP/reset delivery, accepted deletion completion, provider/model/system operations and production remain unverified. Audit and System follow as separate commits. Phase 8 remains outside scope.