Skip to main content
Compendium / Specs & Documents / Analysis & Lint / Failure Modes (FMEA)
#005

Failure Modes (FMEA)

A numbered FMEA-style failure-modes list with 1–5 severity dots — the negative space of every DoCoDeGo spec.

STABLE GO
#list #real-content #dark-mode-tested
Live
FAILURE MODES & EFFECTS FMEA
  1. FM-01 Auth provider outage — no degraded path defined
  2. FM-02 Clock skew on session expiry between regions
  3. FM-03 Race: two concurrent logins from same identity
  4. FM-04 Localised error string leaks server-side enum
  5. FM-05 Stale OAuth state nonce kept in memory > 5 min
Spec

Intent

List the canonical failure modes of a spec, FMEA-style. Each entry carries an ordinal, a description, and a 1-5 severity rendered as solid dots. The component makes explicit what is most often left implicit: how this thing can break.

Acceptance Criteria

  • [ ] Numbered list (FM-01, FM-02, …)
  • [ ] Severity rendered as 5 dots, filled per level
  • [ ] At least 4 failure modes
  • [ ] Mono-typography ordinals, sans body
  • [ ] Does NOT require any client-side state

Constraints

  • Static; no JS
  • Theme-aware via tokens
// failure-modes-list.astro
---
import type { CompendiumMeta } from '../../../data/types';

export const meta: CompendiumMeta = {
  id: 5,
  slug: 'failure-modes-list',
  name: 'Failure Modes (FMEA)',
  category: 'specs-documents',
  subcategory: 'analysis-and-lint',
  pillar: 'go',
  description: 'A numbered FMEA-style failure-modes list with 1–5 severity dots — the negative space of every DoCoDeGo spec.',
  spec: `## Intent
List the canonical failure modes of a spec, FMEA-style. Each entry carries an ordinal, a description, and a 1-5 severity rendered as solid dots. The component makes explicit what is most often left implicit: how this thing can break.

## Acceptance Criteria
- [ ] Numbered list (FM-01, FM-02, …)
- [ ] Severity rendered as 5 dots, filled per level
- [ ] At least 4 failure modes
- [ ] Mono-typography ordinals, sans body
- [ ] Does NOT require any client-side state

## Constraints
- Static; no JS
- Theme-aware via tokens`,
  tags: ['list', 'real-content', 'dark-mode-tested'],
  status: 'stable',
  health: { ics: 100, a11y: 'aa', themed: true, animated: false },
};

const modes = [
  { id: 'FM-01', sev: 5, text: 'Auth provider outage — no degraded path defined' },
  { id: 'FM-02', sev: 4, text: 'Clock skew on session expiry between regions' },
  { id: 'FM-03', sev: 3, text: 'Race: two concurrent logins from same identity' },
  { id: 'FM-04', sev: 2, text: 'Localised error string leaks server-side enum' },
  { id: 'FM-05', sev: 1, text: 'Stale OAuth state nonce kept in memory > 5 min' },
];
---

<section class="w-full bg-paper text-black border-4 border-black shadow-nb-sm">
  <header class="px-3 py-2 border-b-2 border-black flex items-baseline justify-between">
    <span class="font-mono text-[10px] uppercase tracking-widest font-black">FAILURE MODES &amp; EFFECTS</span>
    <span class="font-mono text-[9px] uppercase tracking-widest opacity-60">FMEA</span>
  </header>
  <ol class="divide-y-2 divide-black">
    {modes.map((m) => (
      <li class="flex items-center gap-2 px-3 py-2">
        <span class="font-mono text-[9px] uppercase tracking-widest opacity-60 shrink-0 w-12">{m.id}</span>
        <span class="flex-1 text-[11px] leading-snug">{m.text}</span>
        <span class="flex items-center gap-0.5 shrink-0" aria-label={`severity ${m.sev}/5`}>
          {[1,2,3,4,5].map((i) => (
            <span class:list={[
              'inline-block w-2 h-2 border border-black',
              i <= m.sev ? (m.sev >= 4 ? 'bg-attention' : m.sev === 3 ? 'bg-do' : 'bg-ink') : 'bg-paper',
            ]} />
          ))}
        </span>
      </li>
    ))}
  </ol>
</section>