test(admin): qualify compact user actions
@@ -7,7 +7,7 @@ Owner addendum received 9 November 2026. Source `E:/Storage/Projects/Active/temp
|
||||
| Admin information isolation | The original redaction patch passed 62 tests on the security branch. [A3 integration](ADMIN_AUDIT_ISOLATION_VALIDATION.md) matched the exact source/test patch and passed 57 selected tests. The runs overlap and remain separate evidence. | Integrated security, remaining delivery paths, broader minimisation and deployment checks remain separate. |
|
||||
| Discover Jobs | [Search-first layout](visual-correction/DISCOVERY_SEARCH_FIRST.md) moves the query above filters and qualifies the existing NAV request, keyboard submit and source disclosure. | Expose new filters, map and multilingual suggestions only with qualified data and the existing GJ architecture. Mobile filter drawer and focused detail remain open. |
|
||||
| Applications | [Title-first rows and explicit bulk mode](visual-correction/APPLICATION_SELECTION_REVIEW.md) qualified at 36 configurations. | Secondary action consolidation and final native/visual review remain open. |
|
||||
| Admin Users and Audit | [Aligned rows](visual-correction/ADMIN_USER_ALIGNMENT_REVIEW.md), [read-only 2FA status](visual-correction/ADMIN_USER_2FA_REVIEW.md) and [recent audit filtering and details](visual-correction/AUDIT_FILTERS_REVIEW.md) passed their own 36-configuration checks. Compact user actions and additional structured filters remain open. | 2FA recovery and private support access require explicit owner approval of their technical and privacy designs. |
|
||||
| Admin Users and Audit | [Compact user actions](visual-correction/ADMIN_USER_ACTIONS_REVIEW.md) preserve alignment and read-only 2FA. [Recent audit filtering and details](visual-correction/AUDIT_FILTERS_REVIEW.md) passed its own 36-configuration checks. Additional audit filters remain open. | 2FA recovery and private support access require explicit owner approval of their technical and privacy designs. |
|
||||
| Job Correspondence | Continue inbox layout, mailbox-status presentation and existing explicit consent flow. | Provider verification, restricted scopes, multiple-account persistence and retention decisions retain their gates. Signing in grants no mailbox access. |
|
||||
| System Status | [Status refresh evidence](visual-correction/SYSTEM_STATUS_REFRESH_REVIEW.md) and [diagnostics design](SYSTEM_DIAGNOSTICS_DESIGN.md) distinguish current, stale and unavailable readings. CV Benchmark Review is retained. | Predefined diagnostics require approved suites, isolated execution, role checks and audit. Live execution and per-signal telemetry remain open. |
|
||||
| Terminology | “Prepare application” / “Klargjør søknaden” is visible in the scoped EN/NB application checks. | Continue broader terminology and European catalogue review. |
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# A3-IM10 Cross-application qualification
|
||||
|
||||
Admin Users runtime `171a6908` groups existing row actions into one keyboard menu. See [Admin action evidence](visual-correction/ADMIN_USER_ACTIONS_REVIEW.md).
|
||||
|
||||
Audit runtime `cd69b769` combines exact event type and inclusive local dates with recent search and adds keyboard-expandable details for already permitted values. See [Audit filter review](visual-correction/AUDIT_FILTERS_REVIEW.md).
|
||||
|
||||
Audit runtime `1a8a97a5` adds local metadata search for the loaded recent-event window. Ten frontend tests and 72 controlled captures and scans passed. See [audit search evidence](visual-correction/AUDIT_SEARCH_REVIEW.md).
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Compact Admin Users actions
|
||||
|
||||
Runtime `171a69089f7d16490b8b12939e0372c423b216cb`. A labelled Actions menu serves both desktop rows and phone cards. It retains role changes, password-reset delivery and deletion with the existing guards and confirmation paths. The final administrator's restricted actions are disabled with an explanation. No factor-recovery control was added.
|
||||
|
||||
The first browser pilots exposed lost focus on confirmation cancellation. The final implementation closes the action menu before opening a confirmation and returns focus after the closing dialog leaves the DOM, provided the trigger remains connected and focus has not already moved elsewhere.
|
||||
|
||||
Passed 14 targeted Jest tests, lint and the export build with TypeScript. The full browser matrix passed 36 configurations with 72 scoped scans and captures. It opens menus with the keyboard, checks final-admin restrictions, restores focus after Escape, and cancels a synthetic deletion confirmation. No mutation or page error occurred. There were 36 unavailable company fixture reads outside Users. The Jest suite retains an existing async test warning. The full server-backed phase 7 suite, live password-reset delivery and native/device review were not run. The phase 7 selectors were updated for the menu.
|
||||
@@ -40,6 +40,7 @@ Owner correction: 3 November 2026. This register extends IM10 and the original 3
|
||||
| V30 | Admin System | Operators cannot tell when the displayed status response last succeeded | RESOLVED in `4981a242` | [Status refresh review](SYSTEM_STATUS_REFRESH_REVIEW.md) qualifies timestamp, stale warning and keyboard retry. Per-signal telemetry remains open. |
|
||||
| V31 | Admin Users | Confirmation lacks an explicit phone label and 2FA status is absent | RESOLVED in `e22f2d64` | [Account status review](ADMIN_USER_2FA_REVIEW.md) covers the read-only flag and aligned presentation. Compact menus and protected recovery remain open. |
|
||||
| V32 | Admin Audit search | The first no-match state clipped its message inside the wide table on phones | RESOLVED in `1a8a97a5` | [Audit search review](AUDIT_SEARCH_REVIEW.md) records the narrow screenshot and fitting feedback. |
|
||||
| V33 | Admin Users actions | Repeated role, reset and delete buttons used most of the action column and phone cards | RESOLVED in `171a6908` | [Admin actions review](ADMIN_USER_ACTIONS_REVIEW.md) covers keyboard menus and final-admin safeguards. |
|
||||
|
||||
The owner-approved design foundation remains original A1 dashboard, D1 visual system, B1 tracking, editor left / preview right, application context right, desktop sidebar and hybrid mobile navigation. No controls, imports, revisions, permissions or provider rights may be removed to obtain visual simplicity.
|
||||
|
||||
|
||||
@@ -229,9 +229,9 @@
|
||||
"AdminUsersPage"
|
||||
],
|
||||
"visualStatus": "MEANINGFUL_USER_FORM_TABLE_BOUNDARIES_RETAINED",
|
||||
"afterStatus": "PASSED:36 configurations for read-only 2FA, confirmation and aligned rows or phone cards; creation/dialog/error states remain open",
|
||||
"afterStatus": "PASSED:36 configurations for compact keyboard action menus, aligned rows or cards, 2FA and cancelled confirmation; real delivery and writes remain open",
|
||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||
"evidence": "ADMIN_USER_2FA_REVIEW.md; evidence/admin-user-2fa/BROWSER.json; earlier ADMIN_USER_ALIGNMENT_REVIEW.md and ADMIN_HEADINGS_REVIEW.md"
|
||||
"evidence": "ADMIN_USER_ACTIONS_REVIEW.md; evidence/admin-user-actions/BROWSER.json; earlier ADMIN_USER_2FA_REVIEW.md and ADMIN_USER_ALIGNMENT_REVIEW.md"
|
||||
},
|
||||
{
|
||||
"route": "/admin/system",
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"screens": [
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin-menu",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin-menu",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"journeys": [
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"cellOffsets": [],
|
||||
"lastAdminActionsDisabled": "PASS"
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"cellOffsets": [
|
||||
{
|
||||
"field": "email",
|
||||
"offset": 0.5
|
||||
},
|
||||
{
|
||||
"field": "userName",
|
||||
"offset": 0.375
|
||||
},
|
||||
{
|
||||
"field": "roles",
|
||||
"offset": 0.5
|
||||
},
|
||||
{
|
||||
"field": "emailConfirmed",
|
||||
"offset": 0.5
|
||||
},
|
||||
{
|
||||
"field": "actions",
|
||||
"offset": 0.5
|
||||
}
|
||||
],
|
||||
"lastAdminActionsDisabled": "PASS"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"unexpectedWrites": [],
|
||||
"exportDenials": [],
|
||||
"unavailableReads": [
|
||||
"/api/companies",
|
||||
"/api/companies"
|
||||
],
|
||||
"blockedExternal": [
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com"
|
||||
],
|
||||
"limits": [
|
||||
"Every API response is synthetic. In admin-only mode all mutations are blocked and account flows are NOT RUN; otherwise account export is a controlled 403 and confirmations are cancelled.",
|
||||
"Read-only 2FA and confirmation statuses are displayed alongside the existing last-administrator safeguards.",
|
||||
"No real credentials, provider activation, model, native device, integrated security, production or release acceptance."
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 64 KiB |
@@ -43,7 +43,8 @@ const screens = [
|
||||
{name:'Mail label counts',reference:'correspondence',folder:'mail-labels',state:'label-count',source:'cd116ab8',scope:'Singular text at all nine widths; native singular/plural/live-locale regression passed. No writes or repeated send workflow.'},
|
||||
{name:'Mail review suggestion',reference:'correspondence',folder:'mail-review-counts',state:'review-counts',source:'e8e7d839',scope:'Fixture suggestion with corrected singular thread, job and message counts. Review actions were not executed.'},
|
||||
{name:'Mail draft conflict',reference:'correspondence',folder:'mail-recovery',state:'draft-conflict',source:'c7e8627c',scope:'A controlled 409 preserves unsaved text and shows the conflict warning. No send request.'},
|
||||
{name:'Administration users',reference:'admin',folder:'admin-user-2fa',state:'last-admin',source:'e22f2d64',scope:'Confirmation and read-only 2FA status appear on aligned desktop rows and phone cards. Final-administrator safeguards remain visible.'},
|
||||
{name:'Administration users',reference:'admin',folder:'admin-user-actions',state:'last-admin',source:'171a6908',scope:'Aligned rows and phone cards retain confirmation and read-only 2FA. One labelled menu replaces the repeated buttons.'},
|
||||
{name:'Administration user actions',reference:'admin',folder:'admin-user-actions',state:'last-admin-menu',source:'171a6908',scope:'Keyboard menu shows the existing role, reset and deletion actions and explains final-administrator restrictions.'},
|
||||
{name:'Administration audit',reference:'admin',folder:'audit-filters',state:'audit-populated',source:'cd69b769',scope:'Recent search, exact event type and inclusive local dates filter existing records.'},
|
||||
{name:'Administration audit no matches',reference:'admin',folder:'audit-filters',state:'audit-no-matches',source:'cd69b769',scope:'The empty result is readable without horizontal scrolling. Note text is outside search.'},
|
||||
{name:'Administration audit event details',reference:'admin',folder:'audit-filters',state:'audit-expanded',source:'cd69b769',scope:'Keyboard disclosure reveals the already permitted previous value, new value and note.'},
|
||||
|
||||