I3214 — The narrow-screen menu of /ui and /cockpit closes on Escape, on a choice and on its backdrop, and returns focus to its toggle
Give /ui and /cockpit one narrow-screen drawer shell (toggle, panel, backdrop) that each surface fills with its own entries: Escape, the backdrop and choosing an entry close it, focus returns to the toggle, the page behind does not scroll while it is open, it opens with scripts off, and only one menu toggle shows at a narrow width; the Cockpit gains the narrow navigation it lacks, and cockpit-probe holds the behaviour at every declared width.
PŘIPRAVENO vlna 0 · p1 · profil implementation · bezpečné souběžně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I3214 bude přijato.
Cíl
Give /ui and /cockpit one narrow-screen drawer shell (toggle, panel, backdrop) that each surface fills with its own entries: Escape, the backdrop and choosing an entry close it, focus returns to the toggle, the page behind does not scroll while it is open, it opens with scripts off, and only one menu toggle shows at a narrow width; the Cockpit gains the narrow navigation it lacks, and cockpit-probe holds the behaviour at every declared width.
Proč
On 2026-10-08 the owner wrote that drawers do not work on mobile and that this harms adoption; the conversation names no reproduction (see open question Q1). The site's navbar collapse has a behaviour spec (nav-collapse.mjs); the UI's sidebar checkbox has none. Proposed in ADR 0215 (A phone is the baseline width of every first-party surface, and the primary flow is accepted there before a surface grows) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c197#0, chatgpt-majordomus:c197#1, chatgpt-majordomus:c193#9.
Aktuální stav
Verified on master 707a04c7ce8: only /ui has a narrow menu, the mj-ui-menu checkbox (apps/majordomus-cli/src/ui/shell.rs, share/ui/src/ui.css); the Cockpit's sidebar is `sticky hidden ... lg:block` (share/cockpit/src/cockpit.css), so below 1024 px its sections are reached only through the JavaScript Ctrl-K palette; scripts/lib/interaction-specs/nav-collapse.mjs holds the site navbar's collapse at one width; I1016 (the Cockpit works on a phone) is BLOCKED on I1009.
Cílový stav
One drawer shell rendered by ui/shell.rs and cockpit/view.rs, each passing its own entries, and scripts/lib/cockpit-probe.mjs driving it on /ui and /cockpit at every width /api/v1/design declares.
Rozsah
- apps/majordomus-cli/src/ui/shell.rs
- apps/majordomus-cli/src/cockpit/view.rs
- share/ui/ui.js
- share/ui/src/ui.css
- docs/MAJORDOMUS_UI.md
Mimo rozsah
- The behaviour of the site navbar's collapse
- Any route or entry change
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
- I3216BLOCKED The IDD loop is accepted at a phone's width as it is at a desktop's
- I3217BLOCKED A wide table on a UI screen is a stacked list below the narrow width, from the same rows
Kritéria přijetí
- With scripts off the drawer still opens on /ui and /cockpit and every entry is reachable
- The ui audit and the navbar comparison of I2770 stay green
Validace
- scripts/cockpit-probe --quick
- scripts/ui audit --only /ui
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib ui::shell
Požadované důkazy
- cockpit_probe_drawer_every_width
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3214.yaml. Read it back with majordomus plan show I3214.