ADR-0105: Navigation Information Architecture — Group by Moment-of-Use¶
- Status: accepted
- Date: 2026-08-05
- Deciders: Nicolas Burri (raised it as the real fix for the toolbar overflow — "distinguish functions used on a daily basis … from functions only used at specific times … one category could be related to audit and submission"; inputs: inbox stays top-level + an unread marker, the logo should be clickable). Ratified 2026-08-05: group name "Evidence"; Traceability → Evidence ("feels more like Evidence to me"); Admin and the gear stay SEPARATE (one is installation-wide, the other scope-specific); per-entry visibility by role (below).
- Relates to: ADR-0083 (dossiers — resolves its shipped 7th-nav-word flag), ADR-0093 (one scope context — the toolbar this restructures), the 2026-07-28/29 toolbar-collapse work (EN 1279 / DE 1439 measured ceilings — this makes them moot), ADR-0098 (Authority), ADR-0087 (traceability report), the audit pack (ADR-0083 D-1).
Context¶
The toolbar carries seven flat top-level words; the seventh (Dossiers) pushed the collapse ceiling past 1280, so a standard laptop folds the nav into the overflow menu. Managing that mechanically (drop a word / a documents-area door / language-aware collapse) treats the symptom. The cause is that the nav is a flat list, not an organization: it never distinguishes the surfaces a user touches every session from the ones reached only at review, audit or submission time. Two related pains share this root — the audit pack and the dossier scatter across different places and read as redundant (they are complementary, not the same), and a newcomer cannot tell the daily drivers from the occasional tools.
Decision (ratified 2026-08-05)¶
- Group the nav by MOMENT-OF-USE, into three clusters:
- Work — the daily drivers, kept FLAT and prominent, never behind a menu: Documents, Inbox / My work.
- Evidence (ratified name) — the "produce something for a reviewer" surfaces, reached at review / audit / submission time, collapsed into ONE grouped top-level entry: Dossiers, the audit pack, Authority (the snapshot), and Traceability (workspace + report — ratified into Evidence whole, not split).
- Administration — Admin (installation-wide: users, roles, scopes, activity, document types, project setup) as its own grouped entry, kept SEPARATE from the scope-config gear (ratified: the gear is scope-specific governance, Admin is installation-wide — different axis, different home). The gear stays the per-scope affordance it is today.
- The overflow dissolves structurally: top-level goes 7 flat words → ~3 entries, fitting any width in both languages. This SUPERSEDES the ADR-0083 nav-word flag and the mechanical collapse levers (the measured ceilings stay in place as a backstop, but no longer bind in practice).
- Co-location fixes the audit-pack/dossier confusion: both live under Evidence, each with a one-line "when to use which" (pack = everything in scope, uncurated, regenerated; dossier = a curated, structured, versioned submission issued as a record). The distinction the manual already documents becomes legible at the point of choice.
- Inbox gains an action marker: a count bubble on the Inbox entry for items needing the user's action (obligations due/overdue, review tasks, un-acknowledged trainings) — sourced from the existing inbox aggregation. Named honestly as pending/actionable, not read/unread.
- The logo becomes clickable → home (standard convention; inert today). Destination is the current home now; a real landing/announcements page is a deferred, separate decision.
- Per-entry visibility by role (ratified — Nicolas: "make individual entries of the sections visible/hidden depending on the role of the user"). Every leaf entry in every group reflects the caller's permissions (the existing house reflection, applied systematically to the grouped nav; the server enforces regardless, ADR-0012). A group with no visible entries for a caller hides ITSELF — an author with no evidence permissions never sees an empty "Evidence" group, an ordinary user never sees "Administration". No dead groups, no disabled ghosts.
Consequences¶
- A nav restructure touching
app.html/routes/the toolbar component + the admin/gear areas; every surface stays reachable, several move under a group. e2e nav specs + the toolbar-responsive spec update (the 7-word overflow case retires; the group entries replace it). Screens re-captured. - The Inbox badge needs the pending-count read surfaced to the nav (small; the count exists).
- Manual: the navigation/orientation topic updates to teach the three clusters.
- Deliberately deferred, not in this ADR: the landing-page content, the attributions/imprint pages (backlog), and any change to WHAT each surface does — this is placement only.
Realization notes (2026-08-05 wave)¶
- "My training" moved to the USER menu — BLESSED (Nicolas 2026-08-05 evening: "I also like to find 'my training' in my personal menu"). Originally a measured deviation: The ratified Work row enumerated only Documents + Inbox; My training's home was unstated. Keeping it as a third flat word made the German inline bar need 1380px (> a 1280 laptop) — re-creating the exact overflow this ADR dissolves. It now lives in the user (person) menu — a personal "my stuff" surface — and the daily acknowledge-flow stays prominent via the Inbox badge (un-acked trainings are counted there). Revert lever if rejected: swap it back and accept German collapsing at 1280.
- Audit pack: ONE home — moved entirely into the Evidence menu (the documents-⋮ was its only entry and was removed); gating verbatim (single scope + VIEW, merged-PDF leads, busy lifecycle).
- Admin is a plain link, not a second dropdown — its grouping IS the existing admin sub-nav.
- Ceilings re-measured: collapse ≤ EN 1179 / DE 1259 (worst-case name); a 1280 laptop shows the grouped inline nav in BOTH languages — the ADR's win, pinned by spec.
- Badge:
inbox-countreuses the inbox's own reads (pending + tasks; reviews + actionable tasks, informational excluded), refreshes on boot + STATE_CHANGED. No new endpoint.