Pages
Teams & Users — Ideas v3

Source: qdash /teams — c67 mapping workspace + identity gist, 2026-08-14

v2's verdict picked Stack A; this iteration designs its two open surfaces. First the mapping workspace — the page's only write path — in three form factors: the inline band, the slide-over drawer, and the sub-route. Then the identity gist: three depths of credential signal the roster can carry now that the credentials table lives on /identity. Same queue throughout: chen (new), felix's alias, the CI runner, and the proxy-only bucket — $306/30d at stake.

Form factor 1

The inline band

The amber band from Stack A expands in place. The roster stays above, the teams rail stays below — mapping happens in the middle of the page that gives it meaning. Cheapest interruption; tightest space.

roster above — felix · sofia · priya · … (unchanged from v2 Stack A)
$306/30d unattributed — 4 identities
chen@meridian.devnew identity$4/30d
first seen Mon 09:12 · Claude Code on chen-mba · OS user chen
f.osei@duck.comprovider alias$38/30d
Codex · same machine as felix@meridian.dev (felix-mbp) · same OS user
ci-runner@meridian.devservice identity$187/30d
3 agents · builds-04 · runs only during pipeline hours
(proxy-only, no identity)no identity$77/30d
2 agents · provider never self-reported an email
assign ▾
2 selected
teams rail + adoption strip below — (unchanged)
For — zero navigation; the $306 headline and the fix share a viewport; right-sized for the common 3–5 item queue
Against — no room for evidence detail or history; a 40-identity backlog (post-onboarding) would swallow the page; not shareable as a link
Form factor 2

The slide-over drawer

The drawer from v2 Stack B, promoted to full working state on A's spine. The page dims but stays present; the drawer owns one identity at a time with full evidence, and the queue advances as you decide. Focused, but modal.

Teams & Users
page dims · roster stays behind · esc closes
Map identities2 of 4 ·
f.osei@duck.comprovider alias$38/30d
providerCodex · self-reported email
machinefelix-mbp — same as felix@meridian.dev
OS userfelix — same as felix@meridian.dev
activity1 agent · overlapping hours with felix's sessions
merge into felix@meridian.dev — same machine + OS user
Up next
chen@meridian.dev$4
ci-runner@meridian.dev$187
(proxy-only, no identity)$77
For — full evidence per identity; a guided one-at-a-time flow suits the merge decision (alias → person), which the band can't express
Against — modal: blocks the roster it claims to preserve; bulk ops fight the one-at-a-time frame; still not shareable
Form factor 3

The sub-route — /teams/mapping

A real page with a URL. Room for the full queue, the evidence, the org rail — and the two things neither other form factor can hold: identity lifecycle (dormant → archived, disable-don't-delete) and a mapping history. This is where a 40-identity onboarding backlog or a quarterly cleanup actually happens.

Teams & Users / Map identities
Map identities4 unresolved · $306/30d · 10 of 14 mappedprojected when your IdP joins, 11 of 14 map automatically
Needs mapping · 4Dormant · 2History
chen@meridian.devnew identity$4/30d
first seen Mon 09:12 · Claude Code on chen-mba · OS user chen
f.osei@duck.comprovider alias$38/30d
Codex · same machine as felix@meridian.dev (felix-mbp) · same OS user
ci-runner@meridian.devservice identity$187/30d
3 agents · builds-04 · runs only during pipeline hours
(proxy-only, no identity)no identity$77/30d
2 agents · provider never self-reported an email
no candidate — needs a human call
2 selected
Lifecyclenew → mapped → dormant (30d quiet) → archivedarchiving never deletes — attribution history stays intact
rafael@meridian.devdormant 34dDatadog's disable-don't-delete, remapped
Teams
Payments3 mapped
Platform4 mapped
Data4 mapped
Frontend3 mapped
Assignments persist via /api/teams and scope Cost, Findings, and Posture. Mapping is evidence, not access — nothing is granted or revoked here.
For — scales to onboarding backlogs; a URL you can hand a teammate; the only home lifecycle and history can have; tabs keep the common case uncluttered
Against — a navigation away from the $306 that motivated the click; second page to maintain; overkill for a steady-state queue of 2–3
Gist

The identity gist — three depths

The credentials table moves to /identity; what stays is the gist. Three depths of the same signal, shown on the felix row — the question is how much credential story the roster carries before the handoff.

Treatment 1 — chip onlyone verdict word, amber when consumer/unknown; click → /identity filtered to the person
fefelix@duck.comData1 Critical — undecided egress · Sun$70
Treatment 2 — chip + methodadds auth method, account binding, agent count under the chip — a two-line cell
fefelix@duck.comData1 Critical — undecided egress · SunAPI key · personal acct · 2 agents$70
Treatment 3 — icon + posture summary linerow shrinks to an icon; the page-level story moves into a strip above the roster
Credential posture — 11 org-bound · 3 consumer keys · 2 unknown
fefelix@duck.comData1 Critical — undecided egress · Sun$70
Lean: treatment 1 (chip only) in the roster, treatment 3's summary line only when consumer keys > 0 — the strip earns its row exactly when there's something to say. Treatment 2's method detail belongs on /identity, not here.
Verdict

Band for the everyday, sub-route for the backlog

 BandDrawerSub-route
Interruption costnone — in placemodalnavigation
Evidence roomone linefull, one at a timefull, all items
Bulk assignmentyes, crampedfights the frameyes, roomy
Scales to backlog (40+)nonoyes
Lifecycle + history homenonoyes — tabs
Shareable URLnonoyes
Recommendation: the band is the primary affordance — it expands in place for the steady-state queue and carries an "open workspace →" escalation to /teams/mapping for bulk sessions, lifecycle, and history. The drawer is cut: it blocks the roster it claims to preserve, and its one-at-a-time frame fights bulk assignment. The merge decision (alias → person) moves into the sub-route where its evidence has room.

Qpoint Brand Style Guide