test(admin): qualify recent audit search and responsive feedback

This commit is contained in:
cesnimda
2026-11-10 13:12:23 +01:00
parent 1a8a97a578
commit 49e79875d9
89 changed files with 2777 additions and 8 deletions
@@ -0,0 +1,9 @@
# Recent audit event search
Runtime `1a8a97a57894bde4029ca0d878df6d4a815424a4`. The EN/NB search filters the existing administrator response of up to 200 recent events. It matches event type, user identifiers, application title/company and exact numeric application ID. It does not match notes or old/new values. The query stays in component state and produces no network request. Undo and Restore retain their existing paths, admission and focus handling.
The focused test was red before the search existed. The first browser matrix passed its functional assertions but the 320 px Bokmål dark capture showed clipped no-match copy in the table's scroll area. The retained before capture records the problem. The final implementation displays no-match feedback at normal page width and verifies that it fits. Clearing the field restores the loaded rows.
**PASSED:** 10 selected Jest tests, full lint, export build with TypeScript, and 36 configurations with 72 scoped axe scans and captures. The pilot overlaps the matrix. Reviewed the narrow Bokmål no-match and English desktop populated captures. No writes or page errors. Browser data was synthetic, with 36 unavailable company reads outside Audit.
Full historical search, date/time and other structured filters, safe event expansion, integrated authorisation and native review remain open.
File diff suppressed because it is too large Load Diff
@@ -39,6 +39,7 @@ Owner correction: 3 November 2026. This register extends IM10 and the original 3
| V29 | Admin Users | Row details sit above the centre of the action controls | RESOLVED in `dddec043` | [Alignment review](ADMIN_USER_ALIGNMENT_REVIEW.md) records the before and after geometry and phone layout. |
| 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. |
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.
@@ -219,9 +219,9 @@
"AdminAuditPage"
],
"visualStatus": "OPEN_COLLECTION_RENDERED_SCOPED_RENDERED_REVIEW",
"afterStatus": "PASSED:36 focused timestamp and keyboard scroll configurations on 2dc8fe4c; earlier empty and populated states retained; no undo/restore",
"afterStatus": "PASSED:36 recent-search, no-match, timestamp and keyboard scroll configurations; browser mutations not run",
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
"evidence": "AUDIT_DATE_REVIEW.md; evidence/audit-date/BROWSER.json; earlier ADMIN_HEADINGS_REVIEW.md"
"evidence": "AUDIT_SEARCH_REVIEW.md; evidence/audit-search/BROWSER.json; earlier AUDIT_DATE_REVIEW.md and ADMIN_HEADINGS_REVIEW.md"
},
{
"route": "/admin/users",
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,47 @@
{
"screens": [
{
"width": 320,
"language": "nb",
"mode": "dark",
"state": "audit-no-matches",
"capture": "viewport at top",
"violations": []
},
{
"width": 320,
"language": "nb",
"mode": "dark",
"state": "audit-populated",
"capture": "viewport at top",
"violations": []
}
],
"journeys": [
{
"width": 320,
"language": "nb",
"mode": "dark",
"auditSearch": "PASS",
"auditTimestampReadable": "PASS",
"headerHeight": 44.5,
"eventHeight": 79.5,
"keyboardScroll": "PASS",
"auditMutations": "NOT RUN"
}
],
"errors": [],
"unexpectedWrites": [],
"exportDenials": [],
"unavailableReads": [
"/api/companies"
],
"blockedExternal": [
"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.",
"Only the populated audit table, timestamp geometry and keyboard scrolling are exercised.",
"No real credentials, provider activation, model, native device, integrated security, production or release acceptance."
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

@@ -44,7 +44,8 @@ const screens = [
{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 audit',reference:'admin',folder:'audit-date',state:'audit-populated',source:'2dc8fe4c',scope:'Readable timestamp and compact fixture row in the existing scrollable table. No undo or restore executed.'},
{name:'Administration audit',reference:'admin',folder:'audit-search',state:'audit-populated',source:'1a8a97a5',scope:'Recent event search works with the existing read response and retains keyboard access to the table.'},
{name:'Administration audit no matches',reference:'admin',folder:'audit-search',state:'audit-no-matches',source:'1a8a97a5',scope:'The empty result is readable without horizontal scrolling. Private note text is outside search.'},
{name:'Administration system',reference:'admin',folder:'system-status-refresh',state:'system-normal',source:'4981a242',scope:'A timestamp records when the browser received the successful status response. All readings are synthetic.'},
{name:'Administration stale system status',reference:'admin',folder:'system-status-refresh',state:'system-stale',source:'4981a242',scope:'A failed refresh keeps the earlier readings and timestamp with a visible warning and retry.'},
{name:'Administration benchmark',reference:'admin',folder:'admin-headings',state:'system-findings',source:'c7e8627c',scope:'Divided synthetic findings/weak files without nested panels/shadows. Unapproved fixture; no benchmark execution or engine acceptance.'},