Pages
Teams & Users — Ideas v5

Source: qdash /teams — c67 states & scale, 2026-08-14

The v4 composition, unchanged — shown in the states v4 didn't draw. First-run (mapping is the onboarding), all-clear (the resting face), attention at Meridian's 14 people with the expand row finally designed, and attention at 214 people where search, collapsed chips, and the workspace escalation earn their keep. Two corrections ride along: a verdict line that says what the numbers mean, and a tightened color grammar — amber is attribution debt, and nothing else. Fixtures mirror the userRollups() shape so the ship rewrite is transcription.

State 1

First run — mapping is the onboarding

Fresh install, day two: telemetry has seen 8 identities, no teams exist, nothing is mapped. The Fleet Overview checklist ("Attribute users to teams") lands here. The mapping workspace opens expanded and teams are created in the act of assigning — there is no separate "create a team" ceremony.

Teams & UsersSpend, sensitive-data access, and risk per person.
8 identities observed — none mapped yet. Assign your first person below; teams are created as you type.
8people
observed since install — Tue
0%mapped
no teams yet
$41spend · 2d
all unattributed
at risk
no history yet
Map your identitieseverything below is observed — mapping is evidence, not accessor connect your IdP — most of this maps automatically
priya@meridian.devClaude Code · priya-mbp · first seen Tue$11/30dPaymentscreate "Payments" ↵
marcus@meridian.devClaude Code + Cursor · marcus-mbp$9/30dassign team…
ci-runner@meridian.dev3 agents · builds-04 · pipeline hours only$14/30dassign team…
+ 5 more identities · autocomplete offers existing teams first, creates on enter

Teams

No teams yet — they appear here as you assign, with spend attribution from the first hour.
no roster table yet — 8 rows with no risk history is noise; the queue IS the page until first mapping · no posture strip, no adoption deltas · the amber workspace is the only amber on screen
State 2

All clear — the resting face

Everyone mapped, nothing open. Risk ranking is meaningless when every story is "ok" — the roster falls back to spend order and earns its keep as the attribution ledger. Every conditional disappears: no band, no posture strip, no amber anywhere.

Teams & UsersSpend, sensitive-data access, and risk per person.
Nothing needs you. 14 people across 4 teams, fully mapped — $1,340/30d all attributed, sorted by spend.
14people
across 4 teams
100%mapped
IdP not connected
$1,340attributed · 30d
of $1,340 — everything
0at risk
no open findings
PersonTeamIdentityActivitySpend · 30d
prpriyaPaymentsorg ✓3 agents · 12m ago$169
mamarcusPlatformorg ✓3 agents · 48m ago$121
dadanaDataorg ✓3 agents · 1h ago$112
+ 11 more — show →$682
100% mapped · IdP not connected —
risk-story column gone (no stories to tell) · band replaced by one quiet line · the page stays worth a daily glance as the spend ledger, not a fire alarm
State 3

Attention · 14 people — v4, corrected

The v4 composition with the two corrections applied — verdict line on top, credential gist gone neutral — and felix's row expanded: the level-1 expand designed at last. Agent rows carry the top_context chips the API already sends; level 2 stays AgentExpandDetail unchanged.

Teams & UsersSpend, sensitive-data access, and risk per person — ranked by risk.
2 people and 4 identities need you — felix has an , sofia an , and $306/30d has no owner.
14people
+1 this week — chen
71%mapped
10 of 14 — 4 need mapping
$1,034attributed · 30d
of $1,340 — from /api/costs
2at risk
felix · sofia
3 of 14 people run on consumer keys — credential detail and risk live on /identity
PersonTeamRisk storyIdentityActivitySpend · 30d
fefelix@duck.comData1 Critical — undecided egress to metrics.coderelay.io · Sunconsumer key2 agents · 31m ago$70
claude-code 1.19felix-mbp~/payments-api~/scratch2.1M41 sessionsCritical31m
codex 0.34felix-mbp~/payments-api860k12 sessionsStandard2d
context chips = top working directories (top_context) · "detail →" opens AgentExpandDetail (?from=teams) — level 2 unchanged
sosofiaPlatform1 Elevated — secrets.yaml read · Fri · unassignedorg ✓2 agents · 2h ago$98
prpriyaPaymentsokorg ✓3 agents · 12m ago$1692.4× median
mamarcusPlatformokorg ✓3 agents · 48m ago$121
chchennew todayokconsumer key1 agent · 19m ago$4
+ 9 more, all ok — show →$489
$306/30d unattributed — 4 identities · 3 have suggestions
corrections vs v4: verdict line names the work · consumer-key chip and posture note go neutral (severity is /identity's job) · spend outlier pill goes neutral too — amber now appears exactly three times, all meaning "attribution debt": the alias, the unassigned cell, the band
State 4

Attention · 214 people — the scale test

A real org: 214 identities, 26 teams, $18.4k/30d, a 61-identity mapping backlog. Search becomes primary, the band stops offering inline assignment and escalates to the workspace, and team chips collapse to the top five with the tail behind Cost Center — the same correction integrations made in its v9 "scalable catalog" pass.

Teams & UsersSpend, sensitive-data access, and risk per person — ranked by risk.
6 people and 61 identities need you — worst six below, and $4.1k/30d has no owner ·
214people
+9 this week
71%mapped
153 of 214 — 61 need mapping
$14.3kattributed · 30d
of $18.4k — from /api/costs
6at risk
2 Critical · 4 Elevated
⌕ search 214 people — name, team, machine…risk: any open team: all ▾
r.vancePayments-EU2 Critical — undecided egress · plaintext secret in prompt$402
j.okaforalias1 Critical — sensitive repo read on unmanaged machine$261
a.lindqvistML-Infra1 Elevated — customer-data export · Thu$1,240
s.moreauData-Platform1 Elevated — credentials.json read · Mon$188
k.tanakaFrontend-Web1 Elevated — egress to unlisted domain · 2d$95
d.adeyemiSRE1 Elevated — session on shared runner · 4h$310
+ 208 more — search above, or sort by spend / tokens / last active ▾$14.1k
$4.1k/30d unattributed — 61 identities · 44 have suggestions · 12 look like service accounts

Teams

scale rules: search always visible above ~30 people · "map here ▾" disappears above ~8 queue items — the band becomes pure escalation · team chips cap at top 5 by spend + the unassigned chip, tail lives in Cost Center · roster keeps only the exception rows, the tail is search's job
Notes

Grammar, fixtures, and one new checkpoint item

Color grammar

Amber = attribution debt, nowhere else: alias marks, unassigned cells, the mapping band, the unassigned chip. Red stays findings/risk. Credential signal and spend outliers go neutral — their severity lives on /identity and Cost Center. One color, one fixable problem, one place to fix it.

Fixture = API shape

Roster fixtures carry userRollups() keys (user, cost, active, crit/elev, isAlias, riskScore…) joined with the /api/teams map; team chips carry costs.by_team rows. The teams.vue rewrite transcribes this template against live data — display derivations (story, verb) become small pure functions next to userRollups.

Checkpoint item 6 — period

Everything here says ·30d; Cost Center has 24h/7d/30d/All. Either /teams adopts ?period= or every handoff pins /cost?period=30d — otherwise the numbers visibly disagree one click after we made them agree.

Qpoint Brand Style Guide