The sidebar row has one subtitle line. This page specifies a line that can roll between several things that are true at once, and lets you watch eight real situations play out. Nothing here is wired to the app.
Eight situations, each playing a short script on a loop (the frame bar shows the time and the rule in force). Hover a row to pause it and see the tooltip. Strings are shipped English or German; "Picking up Signals…" is the owner's draft. Glyphs and the lens rows are stand-ins; German "Signale werden vorbereitet…" is the readiness doc's example and the German run ladder is a stand-in.
| Risk | Answer | Status |
|---|---|---|
| A warning or error rolls away, or progress hides under it unseen | Errors hold (R1). Warnings roll, so nothing is hidden for more than one dwell (R2). Hover lists everything (R5). | decided (owner's rule) |
| A moving glyph is a moving click target | The glyph travels with its line, hover pauses, and the popover is also reachable from the row's context menu and accessibility actions (R7). | owner call; needs a hand check |
| Nothing says something else is running | No count (owner). The tooltip lists it, and the lens rows show the effect (R5, R9). | decided |
| "Is it finished?" | No message. The roll settles, the lens row turns available, VoiceOver stays silent (R4, R9). | owner call |
| The line reads as a promise | Rolling lines are present-tense activity or a count of work done, never an ETA. The ETA ladder holds and is the run's (R1). | decided |
| A truncated line sits on screen 5 s (German) | Hover pauses and shows the full text (R5). The shorter German phrase is still an open item in the readiness doc. | partly open |
| Roll and shimmer together | The shimmer starts once the line has settled. | owner call |
| A status that flashes | 2 s floor (R6). | decided in principle |
| The ticker creeps | Cap of three (R3). | owner call |
| VoiceOver hears the roll | Static value, speak at start only (R9). | owner call; hand check |
| Reduce Motion loses information | Top-ranked holds; tooltip and lens rows carry the rest (R8). | owner call |
| A second window shows a different status | Accepted: the Signals status is window-scoped (readiness decision 1). | decided |
Statuses: fetched = read this session; excerpt = only a search excerpt; none = nothing found. I found no shipping product that rolls between concurrent jobs in one status line. The verified convention is one ambient line plus a separate place that lists everything.
| Product | What it does with several tasks | Source | Status |
|---|---|---|---|
| Xcode activity view | Shows progress of executing tasks, status messages and indicators. Silent on several at once: no cycling, count or expanding stated. I half remember a stack or cycle but did not verify it. | Xcode help | fetched, silent |
| Mail (Mac) | An Activity window to monitor progress; a few activities at the bottom of the sidebar (downloading, a large download paused to save battery, with resume); account offline at the end of the Favorites bar. Silent on several at once. | Mail help; forum | fetched / excerpt |
| Photos (Mac) | One status area: item count, last update, Pause/Resume, a count of items that could not sync with a View door. No rotation described. | Apple Support | excerpt |
| HIG, Progress indicators | Silent on concurrency. Keep indicators moving; avoid labelling a spinner on macOS; be accurate and succinct. | HIG | fetched |
| HIG, Motion | Gratuitous motion distracts; avoid motion on frequent interactions; make motion optional. | HIG | fetched |
| Apple, reduced-motion criteria | Decorative motion stops; motion that carries a status change is replaced by something like a dissolve, a highlight fade or a colour shift, not removed. | App Store Connect Help | fetched |
| WCAG 2.2.2 Pause, Stop, Hide | Auto-updating information that starts by itself beside other content needs a way to pause, stop or hide it, unless essential. Hover-to-pause alone is mouse-only. | W3C | fetched |
| GitHub checks, Time Machine, Finder copy, Safari downloads, Music, iOS Mail, Linear, Slack | Nothing usable found. Not claimed either way. | n/a | none |
design-desktop-project-status.md says never two conditions on one line, with one sanctioned exception. This design keeps §5 for every holder and amends it only for rollers, where two conditions share a line in time, not in space.SidebarSubtitleText.tooltip names "a cycling departure-board line" as the intended direction, with no design doc behind it. The project-icon split-flap (design-project-icons.md) is the nearest house motion vocabulary..running only today; readiness decision 5 extends it to Signals. About 22 characters fit at 240 pt.SubtitleVariant.rollPolicy (exhaustive, no default, beside glyphKind), a resolveAll returning holders first then rollers, and a pure clock with an injected time source.update() calls a full reloadData(), which rebuilds cells. Keep the clock in the controller keyed by project and refresh a visible rollable row in place (refreshRowsAroundRename is the precedent). A throttle on count ticks is a reasonable add-on, not the fix. Measure how often update() fires while Screens reads before committing.NSAccessibility.post counting posts over several cycles; the accessibility value byte-identical across a roll; then one by-hand VoiceOver pass.The owner decides.
Same engine as the catalogue, with job toggles. Frame "a" is today's single-winner line; "b" is the roll under the rules above. Toggle a job off to finish it; the floor and the roll rules apply.
The idea in two tiers
Every state that can appear on the line is flagged holds or rolls. If anything that holds is true, it owns the line, exactly as today. If nothing holds, the line rolls between the states that roll.
The rules, and when each is triggered
Which states hold and which roll
When someone adds a new state, ask in this order. G1: does it make the project unusable or the report wrong? Holds. G2: did the researcher just press something and wait for an answer, or will it live under one cycle (about 15 s)? Holds. G3: does it carry a control on the row (a ring with cancel, a stop), or is it a run's verb ladder? Holds. Otherwise, if it is long-lived and ambient, it rolls. When unsure, it holds, because that is today's behaviour and cannot be worse than now. In code this is an exhaustive switch with no default, next to
glyphKind, so a new variant cannot compile without the decision, and a table test pins every row.