wize-tea-risk · git:20260613.7bd4681 · 2026-06-13 · sha256 39d4c2dcd2770f75

wize-tea-risk git:20260613.7bd4681A

Immutable. This exact content is served forever at /api/v1/blob/39d4c2dcd2770f75.

---
name: wize-tea-risk
description: "risk: TEA Risk Profile"
---

# TEA Risk Profile

# TEA — Risk Profile

**Goal.** Build the **probability × impact** matrix that prioritizes the rest of TEA's work. Areas in `HIGH` get deep test design; areas in `LOW` get smoke. Without a risk profile, every story is tested the same — wasteful, and unsafe.

Hawkeye drives. Tony co-signs. Runs **once**, right after architecture is signed off; revisit only on significant scope or architecture changes.

## Inputs

- `.wize/solutioning/architecture.md`
- `.wize/solutioning/epics/`
- `.wize/planning/nfr-principles.md`
- `.wize/knowledge/document-project/risk-spots.md` (brownfield)
- `.wize/knowledge/document-project/index.md` (documentation gap markers)

## Output

- `.wize/implementation/tea/risk-profile.md`

## Steps

### 1. List candidate hot spots

For every architectural component + every epic, ask: *"If this misbehaves, what hurts?"*. Write candidates without filtering.

### 2. Score each

| Axis | Levels |
|---|---|
| Probability | `low` (would be a surprise), `medium` (could happen), `high` (likely without explicit work) |
| Impact | `low` (cosmetic / opex), `medium` (user friction / revenue dent), `high` (data loss / outage / regulatory) |

Composite score:
- `low × low` = LOW
- `low × medium`, `medium × low`, `medium × medium` = MEDIUM
- anything touching `high` = HIGH

### 3. For each finding, write the mitigation contract

Per row:
- **What test makes us confident?** Unit / integration / E2E / NFR / manual.
- **Who owns the mitigation?** Shuri / Tony / external service.
- **When is it verified?** Story-level / epic-level / pre-launch.

### 4. Hand off

Hawkeye uses this in every `tea-design.md`. Tony respects it when picking ADR options.

## YAML frontmatter (canonical)

```yaml
---
gate: risk
status: PASS | CONCERNS | FAIL | WAIVED
score: 0-100
created_at: 2026-06-11T12:00:00Z
findings:
  - id: R-1
    area: "Outbox / mailer"
    probability: high
    impact: medium
    rationale: "Sign-up flow depends on email delivery; first impression failure is high-cost."
    mitigation: "Integration test against Resend sandbox; outbox retry with backoff; on-call alert on delivery failure rate > 5%."
    owner: shuri + tony
    verified_when: story E01-S04 + NFR per epic
  - id: R-2
    area: "Database migrations under load"
    probability: medium
    impact: high
    rationale: "Future migrations must be rolled out without lock contention."
    mitigation: "Online schema changes; canary on staging with synthetic load; ADR-006 process."
    owner: tony
    verified_when: pre-launch
  - id: R-3
    area: "Auth: token refresh during long-running tabs"
    probability: medium
    impact: medium
    rationale: "Cookie refresh race in RSC + edge can sign user out unexpectedly."
    mitigation: "E2E covering > 1h tab; refresh strategy ADR-008; on-call alert on `auth_session_expired_unexpected`."
    owner: shuri
    verified_when: story E04-S02 + post-launch monitoring
---
```

## Body of `risk-profile.md`

The narrative explains the matrix; the YAML is the structured truth. Hawkeye writes 1–2 lines per finding explaining the *why*.

```markdown
## Matrix

| | Impact LOW | Impact MEDIUM | Impact HIGH |
|---|---|---|---|
| **Prob HIGH** | R-7 | R-1 | R-2 |
| **Prob MEDIUM** | R-4 | R-3 | R-5 |
| **Prob LOW** | — | R-6 | — |

## Top-3 (drive test design)

1. **R-2** — Database migrations under load. Pre-launch verification mandatory.
2. **R-1** — Outbox/mailer. Story E01-S04 covers; epic NFR re-verifies.
3. **R-5** — Payment idempotency. Story E03-S02 covers.

## What this means for `tea-design.md`

- E01-S04 (mailer): 1 unit (retry policy), 1 integration (Resend sandbox), 1 E2E (sign-up arrives within 5min).
- E03-S02 (payments): 2 integration (Stripe idempotency keys), 1 E2E (double-click guard).
- Other stories follow the default 70/20/10 split.
```

## Documentation gap risk category

In brownfield repos, missing or stale documentation is an operational risk: new contributors make unsafe assumptions, AI agents hallucinate context, and reviews miss implicit contracts. Hawkeye treats it as a first-class risk area.

| Symptom | Severity | Rationale | Mitigation |
|---|---|---|---|
| `index.md` contains `_(To be generated)_` markers | medium | Conditional docs were skipped; the baseline is incomplete. | Schedule `wize-document-project initial_scan` for the next cooldown. |
| Baseline files older than 60 days | medium | Docs may no longer reflect the codebase. | Run `wize-refresh-knowledge` at sprint end. |
| No baseline exists in a brownfield repo | high | Team is flying blind; architecture and conventions are tribal knowledge. | Run `wize-dev-kit document-project quick` immediately. |

## Anti-patterns Hawkeye rejects

- **Findings without mitigation.** A finding without a contract is a wish.
- **Mitigation owned by "the team."** Name a persona/human.
- **HIGH impact, MEDIUM probability, no NFR re-check.** Wire it into epic NFR gate.
- **Cosmetic risks scored HIGH.** Calibration. Reserve HIGH for data, outage, regulatory.
- **Risk profile rewritten per sprint.** Run once; revise on real architecture changes.

## Hand-off

> Risk profile at `.wize/implementation/tea/risk-profile.md`. Top-3 drive deep `tea-design.md` for E01-S04, E03-S02, plus pre-launch migration drill. Default 70/20/10 split for the rest.