Skip to main content
Compendium / Pillars & Roles / Role Identity / Role Handle Chip
#405

Role Handle Chip

A @-handle chip with a small pillar dot — names a participant and the hat they wear in one inline mark.

STABLE CO
#badge #real-content #dark-mode-tested
Live
Participants
  • @author Intent Architect
  • @composer Composition Lead
  • @steward Flow Steward
  • @governor Governor
Spec

Intent

Inline identity primitive: handle + role-pip. Used in attribution rows, comment heads, sign-offs.

Acceptance Criteria

  • [ ] Renders @handle in mono caps
  • [ ] Small pillar-coloured pip indicates which hat
  • [ ] Hat label below in micro caps
  • [ ] Negative: does NOT reveal real names or PII

Constraints

  • Theme-aware via tokens
  • No hex literals in brand-colour slots
// role-handle-chip.astro
---
import type { CompendiumMeta } from '../../../data/types';

export const meta: CompendiumMeta = {
  id: 405,
  slug: 'role-handle-chip',
  name: 'Role Handle Chip',
  category: 'pillars-roles',
  subcategory: 'role-identity',
  pillar: 'co',
  description: 'A @-handle chip with a small pillar dot — names a participant and the hat they wear in one inline mark.',
  spec: `## Intent
Inline identity primitive: handle + role-pip. Used in attribution rows, comment heads, sign-offs.

## Acceptance Criteria
- [ ] Renders @handle in mono caps
- [ ] Small pillar-coloured pip indicates which hat
- [ ] Hat label below in micro caps
- [ ] Negative: does NOT reveal real names or PII

## Constraints
- Theme-aware via tokens
- No hex literals in brand-colour slots`,
  tags: ['badge', 'real-content', 'dark-mode-tested'],
  status: 'stable',
  health: { ics: 86, a11y: 'aa', themed: true, animated: false },
};

const chips = [
  { handle: '@author',    hat: 'Intent Architect',  pillar: 'do' },
  { handle: '@composer',  hat: 'Composition Lead',  pillar: 'co' },
  { handle: '@steward',   hat: 'Flow Steward',      pillar: 'de' },
  { handle: '@governor',  hat: 'Governor',          pillar: 'go' },
];
---

<div data-this-component class="w-full bg-paper text-black border-4 border-black p-3 overflow-hidden">
  <div class="font-mono text-[9px] uppercase tracking-widest opacity-60 mb-2">Participants</div>
  <ul class="space-y-1.5">
    {chips.map((c) => (
      <li class="flex items-center gap-2 border-2 border-black px-2 py-1 bg-paper">
        <span class:list={['w-2.5 h-2.5 border-2 border-black shrink-0', `bg-${c.pillar}`]}></span>
        <span class="font-mono text-[11px] uppercase tracking-widest font-black truncate">{c.handle}</span>
        <span class="font-mono text-[9px] uppercase tracking-widest opacity-60 ms-auto truncate">{c.hat}</span>
      </li>
    ))}
  </ul>
</div>