Phase 1
Accounts
Source: c81 phase1-pages — Accounts (PRO-27); inventory-companies-v1 accounts & licensing panel + bob-wire c12 api-keys grammar (trust posture, lifecycle per seat), re-derived from the phase1 world
fixture state
5 accounts: 3 enterprise, 1 personal, 1 unknown — Dana's ChatGPT on a personal account.
user-dw72hfqb (dwhitfield.72@gmail.com), personal · team-7cc19f3e, no agreement · Hermes, no account
observation mode — this page reports; the block is the obvious next step and lives with the Org-Backed Identity policy →
Accounts
the id as seen on inference calls · ranked personal first, then unknown, then enterprise by usersAccount id | Licensing | Users | Installs | Sessions · 7d | Tokens · 7d | Last seen | |
|---|---|---|---|---|---|---|---|
OpenAI ChatGPT | user-dw72hfqb (dwhitfield.72@gmail.com) | personal | 1 / 1 | 1 | 2 | 780k | 20h ago |
xAI Grok | team-7cc19f3e | unknown | 2 / 2 | 2 | 1 | 420k | 23h ago |
Anthropic Claude Code · Claude Desktop | org-qpoint-2ab41 | enterprise | 12 / 15 1 seat, no telemetry | 12 | 28 | 30M | 2h ago |
OpenAI ChatGPT · Codex CLI | org-qpoint-8xk22 | enterprise | 8 / 10 | 9 +1 unattributed | 15 | 11M | 1h ago |
Google Gemini CLI | qpoint.io-ws-C03kf9 | enterprise | 3 / 3 | 3 | 4 | 900k | 6h ago |
5 accounts from 4 providers · 16 of 18 people hold a seat (Miguel Torres and Omar Haddad hold none). Users = people observed calling with the account over licensed seats where the agreement is on file, else over the people listed on it. Sessions and tokens are the 7-day sample on record; 4-week tokens are per provider, not per account, and live on Providers.
Composition notes
- Question: whose accounts is our AI running on? Enterprise vs personal is the standout (c21 §2.6, §5 — "none of our IP is ever going to a personal ChatGPT account"); an unknown account id is signal on its own; a technology with no account at all is the third exception. Observability story, not an enforcement UI.
- Verdict line from accountsVerdict(world) (derived/accounts.ts, a sharpened verdicts.accounts): the mix, then every exception class in rank order — personal (with the alongside story), unknown, no account; the sub line is the receipts. Red when a personal account exists, amber for the other two, leaf when all enterprise.
- Framing band = four filter buttons (accounts resets · enterprise · personal · unknown) plus one linked claim (no account → the technology on Agent Inventory, since technologies are not rows here). Numbers cross-foot with the rows in the table, including under a person filter. One toned sub: personal, in red (the warn class). Unknown and no-account stay neutral — the verdict names them and their rows carry the amber; the cloud review overruled the first pass's three toned subs.
- Ghost affordance: UxButton disabled "Block personal accounts" with the quiet link to /pages/policy-config-org-backed-identity. Disabled means no grape — the stroke is greyed so it does not read as clickable. It stays ghosted in the all-clear state ("nothing to block") — the control is not this page's job in either state.
- Table is the raw UxTableList family so ?id= can pre-open a row. Rows from accountRollup(world, person?), ranked personal → unknown → enterprise by observed users. Licensing is the trust-badge column (c19 pattern 8) and the row's one attention device — enterprise is the normal state and reads grey, personal red, unknown amber; Users prints observed over seats (denominator printed; silent seats flagged in amber = attribution debt; the "seat count not on file" caveat lives in the expand, not on the row). Tokens 4w per account is not derivable (the trend is per model/company) — the column is the 7-day sample, labelled.
- Lifecycle state (c19 pattern 14) is modelled per seat, where the signal lives: active · no sessions on record (Marcus's stale Claude Code — an observed surface, nothing in the 7-day sample) · installed, never run (Wes — no surface at all) · seat, no telemetry (Alexis) · no identity (the org-key Codex). All derived; nothing fabricated. A per-account active/idle word was dropped — every account is active, the column would be mute.
- Expand = three UxTableListExpandSection cards: header (id, company / technology chips, badge, note, stats, and the story paragraph for the row's exception class — Dana's personal-alongside-enterprise, xAI's unknown id, Anthropic's silent seat), users on this account (person chips filter in place — users are filters here, not rows — with seat state and agent chips → Agent detail), recent sessions (→ Session detail).
- Derivation: every number traces to accountPosture / accountRollup / sessionsForAccount / recentSessions. sessionsForAccount falls back to the install's account for sessions that carry none (Claude Code), so the Anthropic row counts its sessions honestly.
- Open: "seats" for Google and xAI are not on file — the denominator falls back to the people listed on the account and says so. Whether a self-hosted registered model (the clear state's acct-nous-local) should read as "enterprise" licensing or a fourth posture is a world question, not a page one.