test(admin): qualify heading hierarchy across four routes
@@ -0,0 +1,13 @@
|
||||
# Administration heading hierarchy
|
||||
|
||||
Runtime `c7e8627ca782b37ed553299a1db93af192e420e4` on `codex/a3-ui-10`. V21 covers Users, Audit, System and Processing. Each route now uses the shell's single page title and existing description. Section headings follow it directly. The System action buttons remain together, and refresh restores focus to its initiating control when available. If the control disappears, focus stays on the named System region. Role guards, actions, filters, tables and data contracts are preserved.
|
||||
|
||||
The old export reproduced two exact “Users” headings at 320 px. The successor pilot at 320 and 1440 px passed 18 captured states across both configurations. The same verifier checks one exact route title at level 1, the existing description, System keyboard refresh, and the earlier fixture checks for last-admin actions, populated/empty audit, normal/unavailable System, benchmark/settings views and Processing detail focus.
|
||||
|
||||
Passed 66 targeted Jest tests across six suites, type-checking, full lint and the static export build. The initial type check rejected a Jest role selector option. The passing rerun uses an anchored name matcher.
|
||||
|
||||
The full matrix passed 36 configurations and 324 captures, including axe checks with zero violations. No page errors, write requests or export requests occurred. The 144 intentional System 503 responses and 216 unavailable company reads remain separate from passing checks. The two-config pilot overlaps the matrix and is not added to its totals.
|
||||
|
||||
Compared the built System view at 320 and 1440 px, Users at 390 px and Audit at 768 px against the frozen A3 Administration reference. The single title and open sections match the intended hierarchy. Distinct user records and forms retain their boundaries. The actual application keeps four Admin routes and their real controls. The 768 px Bokmål Audit capture also exposes a separate timestamp wrapping problem, tracked as V25.
|
||||
|
||||
All browser responses are synthetic. Review does not qualify role enforcement on a server, live health, provider/model activity or administrative mutations. Creation, action errors, permission states, native devices and final owner acceptance remain open.
|
||||
@@ -28,10 +28,11 @@ Owner correction: 3 November 2026. This register extends IM10 and the original 3
|
||||
|
||||
| V19 | Mail localisation | One-label count rendered as 1 labels / 1 etiketter | RESOLVED in cd116ab8:44 native cases and36 focused label states; no writes or new dynamic translation calls | Native-language/European and whole-application acceptance remain separate |
|
||||
| V20 | Shared feedback | ToastProvider outside the application theme produced failing information-toast contrast3.85:1 | Fixed provider order in a84a97cb;70 native cases and36 configurations/252 Settings states passed, toast visible during contrast analysis | Other feedback/workflow and human/native acceptance remain separate; failed scan retained |
|
||||
| V21 | Administration hierarchy | Repeated generic route/page headings remain after opening section surfaces | OPEN minor visual discrepancy from rendered review | Review current route heading ownership and focus/test contracts before removing repetition |
|
||||
| V21 | Administration hierarchy | Repeated generic route/page headings after opening section surfaces | RESOLVED in the four Admin routes | Shell owns the title/description, section levels corrected and refresh focus retained. See [Admin heading review](ADMIN_HEADINGS_REVIEW.md) |
|
||||
| V22 | Application localisation | One result renders `1 matching jobs` / `1 jobber samsvarer` | RESOLVED in9bfc51b0:48 native cases and36 configurations/72 focused table/board count states passed,zero writes | Existing active-view locale reload/loading/error suppression retained; owner/native/European acceptance separate |
|
||||
| V23 | CV localisation | One section item renders `1 entries` / `1 oppføringer`; one-page Bokmål caption uses `1 sider` | RESOLVED in122956b6:81 native cases and36 configurations/72 focused caption states passed,zero writes | Entry-count formula and physical pagination unchanged; full native/European/owner acceptance separate |
|
||||
| V24 | Calendar workflow | Scheduling updates reminder card but leaves adjacent agenda stale | RESOLVED inc0ef4171;23 native cases and8 configurations/48 connected states passed,16 intercepted status/date writes | Refresh only after committed follow-up change; preserve selected month/view; backend/provider/timezone/native/owner acceptance remains separate |
|
||||
| V25 | Audit table timestamp | Tablet Bokmål capture wraps both the column heading and timestamp inside words | OPEN reproduced at 768 px | Preserve the scrollable table and timestamp formatting, with sufficient space for the date/time column |
|
||||
|
||||
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.
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"visualStatus": "OPEN_COLLECTION_RENDERED_SCOPED_RENDERED_REVIEW",
|
||||
"afterStatus": "PASSED:36 configurations /324 admin states combined; empty and populated synthetic audit, no undo/restore executed",
|
||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||
"evidence": "ADMIN_REVIEW.md; evidence/admin-flat/BROWSER.json"
|
||||
"evidence": "ADMIN_HEADINGS_REVIEW.md; evidence/admin-headings/BROWSER.json; prior ADMIN_REVIEW.md"
|
||||
},
|
||||
{
|
||||
"route": "/admin/users",
|
||||
@@ -230,7 +230,7 @@
|
||||
"visualStatus": "MEANINGFUL_USER_FORM_TABLE_BOUNDARIES_RETAINED",
|
||||
"afterStatus": "PASSED:36 configurations /324 admin states combined; current last-admin disabled actions only; creation/dialog/error states remain open",
|
||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||
"evidence": "ADMIN_REVIEW.md; evidence/admin-flat/BROWSER.json"
|
||||
"evidence": "ADMIN_HEADINGS_REVIEW.md; evidence/admin-headings/BROWSER.json; prior ADMIN_REVIEW.md"
|
||||
},
|
||||
{
|
||||
"route": "/admin/system",
|
||||
@@ -240,7 +240,7 @@
|
||||
"visualStatus": "OPEN_DIAGNOSTICS_DIVIDED_BENCHMARK_SCOPED_RENDERED_REVIEW",
|
||||
"afterStatus": "PASSED:36 configurations /324 admin states combined; synthetic populated/unavailable/benchmark/settings read states; no live qualification or mutations",
|
||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||
"evidence": "ADMIN_REVIEW.md; evidence/admin-flat/BROWSER.json"
|
||||
"evidence": "ADMIN_HEADINGS_REVIEW.md; evidence/admin-headings/BROWSER.json; prior ADMIN_REVIEW.md"
|
||||
},
|
||||
{
|
||||
"route": "/trash",
|
||||
@@ -361,7 +361,7 @@
|
||||
"visualStatus": "OPEN_COLLECTION_DETAIL_SCOPED_RENDERED_REVIEW",
|
||||
"afterStatus": "PASSED:36 configurations /324 admin states combined; keyboard, filter geometry, owner-link suppression and synthetic failed detail; no processing mutations",
|
||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||
"evidence": "ADMIN_REVIEW.md; evidence/admin-flat/BROWSER.json"
|
||||
"evidence": "ADMIN_HEADINGS_REVIEW.md; evidence/admin-headings/BROWSER.json; prior ADMIN_REVIEW.md"
|
||||
}
|
||||
],
|
||||
"ownerVisualAcceptance": "OPEN",
|
||||
@@ -379,13 +379,13 @@
|
||||
"Embedded review suggestions and error/empty/conflict states"
|
||||
],
|
||||
"/admin/audit": [
|
||||
"Error and permission states; current positive/empty synthetic qualification passed; see ADMIN_REVIEW.md for remaining limits"
|
||||
"Error and permission states; audit timestamp wrapping V25 reproduced at 768 px"
|
||||
],
|
||||
"/admin/users": [
|
||||
"Creation/dialog/error/permission states; last-admin synthetic qualification passed; see ADMIN_REVIEW.md for remaining limits"
|
||||
],
|
||||
"/admin/system": [
|
||||
"Action/error/permission states and minor repeated route heading; synthetic read qualification passed; see ADMIN_REVIEW.md for remaining limits"
|
||||
"Action/error/permission states; synthetic read and single-title qualification passed"
|
||||
],
|
||||
"/admin/processing": [
|
||||
"Empty/error/permission states; populated detail/filter/keyboard synthetic qualification passed; see ADMIN_REVIEW.md for remaining limits"
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
{
|
||||
"screens": [
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "audit-empty",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "audit-populated",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-unavailable",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-normal",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-benchmark",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-findings",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-settings",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "processing-detail",
|
||||
"capture": "viewport at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "last-admin",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "audit-empty",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "audit-populated",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-unavailable",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-normal",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-benchmark",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-findings",
|
||||
"capture": "focused viewport",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "system-settings",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"state": "processing-detail",
|
||||
"capture": "full page at top",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"journeys": [
|
||||
{
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"draftPreservedAcrossKeyboardSections": "NOT RUN",
|
||||
"revocationAndDeletionCancelled": "NOT RUN",
|
||||
"recentExportDenial": "NOT RUN",
|
||||
"lastAdminActionsDisabled": "PASS",
|
||||
"processingKeyboardAndOwnerLink": "PASS",
|
||||
"processingFilterLabelsAndDurationGeometry": "PASS",
|
||||
"populatedAdminReadStates": "PASS"
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"draftPreservedAcrossKeyboardSections": "NOT RUN",
|
||||
"revocationAndDeletionCancelled": "NOT RUN",
|
||||
"recentExportDenial": "NOT RUN",
|
||||
"lastAdminActionsDisabled": "PASS",
|
||||
"processingKeyboardAndOwnerLink": "PASS",
|
||||
"processingFilterLabelsAndDurationGeometry": "PASS",
|
||||
"populatedAdminReadStates": "PASS"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"unexpectedWrites": [],
|
||||
"exportDenials": [],
|
||||
"unavailableReads": [
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/admin/system",
|
||||
"/api/admin/system/email-settings",
|
||||
"/api/admin/system/cv-benchmark",
|
||||
"/api/admin/system/maintenance-jobs",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/admin/system",
|
||||
"/api/admin/system/email-settings",
|
||||
"/api/admin/system/cv-benchmark",
|
||||
"/api/admin/system/maintenance-jobs",
|
||||
"/api/companies",
|
||||
"/api/companies",
|
||||
"/api/companies"
|
||||
],
|
||||
"blockedExternal": [
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"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.",
|
||||
"System and audit populated states are synthetic read fixtures; no probe, maintenance, settings save, undo, restore or provider action executed.",
|
||||
"No real credentials, provider activation, model, native device, integrated security, production or release acceptance."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"screens": [],
|
||||
"journeys": [],
|
||||
"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.",
|
||||
"System and audit populated states are synthetic read fixtures; no probe, maintenance, settings save, undo, restore or provider action executed.",
|
||||
"No real credentials, provider activation, model, native device, integrated security, production or release acceptance."
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 33 KiB |