← Design · c121

plan/05-teams.md

05 · Teams listing + team detail (Wave 2)

TL;DR: make team posture scannable: a proportional Enforced / Observed / Off bar against the org's policy set, plus "how unique is this team" (how many policies enforced, how many have team exceptions) and open findings. Draw two or three options switchable by ?v.posture=, assembled from our own components first, earlier phase experiments second, new only as a last resort (L). Team detail's Policies section gets the same bar and a pending-vs-live note.

Owns: app/pages/pages/phase4/mock/organization/teams/{index,detail}.vue, app/components/governance/part/TeamPolicies.vue, app/composables/useTeamMock.ts, new app/components/governance/mock/PostureBar*.vue. Don't touch live/TeamDevicesLedger.vue (06 owns it).

Today

  • Listing columns: Team · People · Policies ("N on · M enforcing") · Team exceptions (count) · Open findings (count) (index.vue l.37–52).
  • TeamPolicies.vue: summary text (l.104–108); table Policy · mode for team · Set by · Members who differ · Open; off policies folded; D9 "the stricter" (l.91–95).

Steps

  1. Catalog pass (write it down first). List candidates with file paths into 05-catalog.md in this plan dir: layer (DataHistoryGraph stacked, DataMetric, micro cards from c109, UxTableList), qdash live inventory sections (../qcontrol/crates/qdash/ui/app/pages/inventory/*, components/team/* — usage bars, tiles, attention lists), earlier experiments (c100 team cards / tilemap mocks in app/pages/pages/ and public/cycles/design/c100-mock-team*.png, c103 activity rows). Note which pieces could be repurposed.
  2. Options (?v.posture=bar|cards|tiles, default bar):
    • bar: a Posture column with a stacked bar (Enforced ink · Observed grey · Off light) of the org's N policies, with a tick for the org default mix so a team's deviation reads at a glance; next to it "3 exceptions" and open findings by severity dots.
    • second: something drawn from the c100 team cards / tilemap (uniqueness as a visual measure: policies enforced vs org, exceptions count).
    • third: from the qdash inventory sections (e.g. tile row per team) — only if the catalog shows a fit.
  3. Derive, don't store (I): posture from applicability() over the team's members; mixed member modes count by the team's effective mode with a "2 members differ" marker (I open question: say so in the report).
  4. Team detail. Policies section: same bar on top; table keeps Set by / Members who differ / Open; add a line when the draft changes this team: "Pending: 2 changes affect this team (not live)" linking to Changes (I: pending vs live). Rows link to S3 #exceptions (no editing on the team page).
  5. Open findings links use outcome=all (04's URL).

Done when

/pages/phase4/mock/organization/teams in all ?v.posture= options and …/teams/detail?team=eng; 05-catalog.md written. Screenshots shots/05-*.png.

Look for (review)

Which team is the snowflake, without reading numbers? Pick an option at review; the others stay as knobs until the ruling.

Qpoint Brand Style Guide