Skip to content

M5-14 Run graph and control room on iPhone and Android

No Date Ruling Reason
D-M5-14-0 2026-10-25 Built on main after M4-39 and M5-03 landed; the changelog entry and these rulings are fragments. Differences to the brief's names, following the merged code: the integration test lies in integration_test/phone/mobile_run_graph_test.dart and runs through integration_test/phone_suite_test.dart like every phone integration test (the brief named integration_test/), so the iOS simulator and the Android emulator of make apps-platform run it in their one build; the goldens lie in test/goldens/phone/run_graph_phone_golden_test.dart with the other phone goldens; the layout parameter is RunGraphView.layout of type RunGraphLayout (wide, narrow) with runGraphLayoutFor(width), and the tap rule of the touch rows is the separate flag RunGraphView.touch, because a landscape phone uses the wide layout and still taps. D-W-100 (merged names win over the brief's).
D-M5-14-1 2026-10-25 The width threshold between narrow and wide is the design token DsLayout.overlayWidth: below it the bars stand below the labels, from it on beside them. In narrow every bar of the graph lies on one shared track that starts after the arrow of the top level and spans the rest of the row, not indented with its row, and the time axis stands above that track. Design note 1 and 3 of the brief: no literal limit; a portrait phone stays below the overlay width and a landscape phone, a tablet and the desktop pane reach it; one shared track keeps the times of all rows comparable, which an indented bar per depth would not.
D-M5-14-2 2026-10-25 "Running now" on the phone shows the cards by default with the switch "Cards" and "List" as on the desktop (D-M4-39-12 ends); the filters open as a modal sheet from the chip "Filters" (selected while a filter is set) with Space, Agent and "mine only" as chips that apply at once and a button "Done"; the desktop menus stay on the desktop. 01 5.3 M11 "the switch Cards and List, filters as a sheet"; chips at the touch size keep each choice one tap.
D-M5-14-3 2026-10-25 On the phone the control room frees the places of its cards when the app lifecycle port reports the background (paused, hidden, detached) and hands them in again when it reports the foreground; it does so from the lifecycle stream at once, not through a frame or a provider rebuild, because a phone in the background draws no frames. The foreground of the port includes inactive (as for the engine's connection, 15 7.2). The desktop keeps its cards live in the background, as its connection stays. Fixed requirement 13 and Design note 2; the engine on the phone closes the gateway in the background anyway, and the explicit release keeps the focus state and the cards ("live details paused") true while it does; on return the run store fetches the documents again (04 11.3).
D-M5-14-4 2026-10-25 The run graph of a card belongs to the tab Running (stack Running now, run graph); the run graph opened from the button "Graph" of the live box sheet (from=thread) stays in the tab of the thread and lies on top of the thread's stack (Spaces, channel, thread, run graph), so back returns to the thread; the button closes the sheet first. On the phone the screen has no back button of its own (the page frame carries it, on Android the top app bar with the title "Run graph"). 01 5.3 M3 "the sheet has a button Graph that opens M12", 5.4 system back.