Incident command for one open Sev-2: INC-2291, checkout latency over its objective in eu-central. Four workflow columns, three swimlanes, ten action cards, and a clock that runs while you read
Direction
Archetype — board. The columns are the state machine: triage, investigating, mitigating, verifying. Three swimlanes cross them, one per workstream. A card moves
Data stance — tile-first for the header strip only. The strip carries four figures, and each one names the quantity it compares against. The board itself is the body of the page
Density — Atlassian default. 14px body from --ds-font-body, --ds-space-150 inside a card, --ds-space-200 around the board
The one bold thing — severity reads as length. Each card carries a bar whose width is time since detection over the incident's own elapsed clock. The oldest untouched work draws the widest bar, so the eye ranks the board before anyone reads a word
Colour names the band the age falls in — under 20 minutes, under an hour, over it — and it does not repeat the rank. Against the raised card the three chart steps measure 4.66:1, 4.51:1 and 8.91:1 in the light theme and 10.01:1, 9.78:1 and 9.30:1 in the dark one, so in dark the loudest of the three is the calmest band. Length is the encoding in both themes and colour is a second, categorical fact; the alternative is a single-hue ramp, which would paint a six-minute card red
The lane head carries the same bar one level up, and that is where the mark earns its place. A count says how much work a lane holds and cannot say whether the lane is moving, so the lane bar measures only its oldest card that has not reached mitigating: comms holds the second-oldest card on the board and reads as a quarter, because that card is already published. Three tracks of one width on one left edge, which is what the card bars cannot have across four columns
Why this product suits this system
The Atlassian design system rests on two standing assumptions: someone else may be changing this right now, and the admin has renamed everything. An incident makes both of them the operating condition rather than an edge case. The concurrency notice, the columns taken from an ordered workflow rather than from status names, and the single field-level move are that assumption on screen
Generator
atlassian_tokens.py --both # tokens.css, byte for byte
atlassian_tokens.py --scales # spacing, shape, typography, and motion
atlassian_tokens.py --contrast --theme light
A diff confirms tokens.css reproduces exactly from --both. That flag emits colour alone, so the page inlines the spacing, shape, type, and motion sets it needs, verbatim from --scales
Measured contrast
Card text sets --ds-text on --ds-surface-raised and measures 14.34:1 in the light theme and 9.84:1 in the dark one, against the 4.5:1 that body text needs
The age bar is a graphical object and needs 3:1. Its warning step, --ds-chart-warning-bold, measures 4.51:1 light and 9.78:1 dark, and it is the worst of the three. The success step reaches 4.66:1 and 10.01:1, the danger step 8.91:1 and 9.30:1. All three clear the floor in both themes; the ordering of those six numbers is the reason the bold thing is length and not colour
The focus ring, --ds-border-focused, measures 3.30:1 against the sunken board in the light theme, which is its worst ground, and 8.68:1 in the dark one
The unsuffixed --ds-chart-warning measures 2.47:1 on white and --ds-chart-danger 4.02:1, so the page uses neither. Against a light surface the -bold step is the one that carries a mark
Dragging, and the two routes into one move
One function, applyMove(key, toColumn, how), moves every card. The drop handler calls it, and so do the two arrows on each card, which target the neighbouring column.
No second code path exists, so a fix to one is a fix to both. WCAG 2.2 success criteria 2.5.7 and 2.1.1 ask for exactly that
At either end of the workflow the arrow disables itself and names the end it has reached. Focus follows the card, so three presses of Enter walk a card from triage to verifying with no mouse. Chromium confirms it
The second state
Another responder moved FAULT-118 while this board still shows it where it was. The notice takes the shape of a section message rather than a flag, because it wants an answer; the card carries the same mark in place; and "Show their version" resolves it through that same applyMove
Beside it, verifying holds nothing and says so once, in the column header rather than in each of its three cells. An empty cell draws nothing at rest; three dashed rectangles down the emptiest column are the board's loudest shape pointing at the one place with no work in it, and they follow the reader around as cells empty. The dashed target and its stage name appear while a card is in hand, which is the only moment a drop target is information
Deviations
A theme toggle ships. Inside Jira the host owns the theme and an app reads it, and the system says not to ship one. This page stands alone, and the contract asks for both themes with an in-page toggle that wins in both directions
No @atlaskit packages, since the page runs no build step. The page hand-builds the lozenge, avatar, avatar group, button, and section message against the token contract. The foreign-component-library and native-control rules in ads_lint read .tsx and .jsx, and have nothing to say about a <button> here
Atlassian Sans reaches no Google Fonts URL, so --ds-font-family-body falls back to its own stack. The page loads no web font
A stage switcher replaces the columns under 48rem. Four columns measure 1076px inside a 390px scroller: two and a half screens sideways, with the stage name scrolled off the top for most of the interaction. The switcher keeps all four counts on screen, the board shows one stage, the lanes and their bars stay, and a card pushed out of the stage you are standing in is what the status line is for. Nothing scrolls sideways at 390px, inside the board or outside it
contain: paint bounds the board scroller. Without it the column widths reached the document's scroll width and the whole page scrolled sideways at 375px, even while the scroller itself clipped correctly. A browser measurement found it. The board now scrolls inside its own box at every width, and the page never does