> ## Documentation Index
> Fetch the complete documentation index at: https://invoca-5bd45748-mintlify-6c3474a6.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Alert

> Divergences, open decisions, and undocumented gaps for Alert.

See [Alert](/invoca-design-system/components/feedback/alert) for the decided part of this page.

## Known issues

| ID                                                                             | Kind       | What                                                                            |
| ------------------------------------------------------------------------------ | ---------- | ------------------------------------------------------------------------------- |
| [**TITAN-DIV-21**](/invoca-design-system/foundations/divergences#titan-div-21) | Divergence | Only the standard variant is colour-complete; filled and outlined fail contrast |

**Also true and not yet recorded as either:** a published example sets `severity="success"` with
`color="info"`, producing an alert that *is* a success and *looks* like information — a direct
violation of TITAN-ALR-03 in the system's own reference material; `severity` defaults to
`success`, which no design decision supports; every published example overrides the severity
icon, so the default mapping is demonstrated nowhere; and `AlertTitle` is exported with no
treatment defined, so a titled alert is buildable and unspecified.

## Gaps in the current rules

* **Whether an alert may carry a title is undecided.** `AlertTitle` ships, the design library
  publishes no titled alert, and nothing states when a message needs a heading.
* **No rule for how many alerts a page may show at once**, or whether they should merge.
* **Whether alerts are dismissible by default is unstated.** The design draws a dismiss control on
  every alert; code makes it opt-in via `onClose`.
* **No rule for placement precision** beyond "with the thing it is about" — whether a
  section-level alert goes above the section heading or below it is undecided.
* **Nothing states what happens to a dismissed alert whose condition persists.** It returns on the
  next render, and whether that is correct has not been decided.

## Constraints Titan should enforce

These are real, currently-true rules. Nothing in code stops a builder from violating them today —
each is a placeholder for a guardrail Titan hasn't built, not a decision still being made.

| ID               | Constraint                                                        | Would be enforced by                                                                             |
| ---------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| **TITAN-ALR-01** | Use the `standard` variant; never `filled` or `outlined`.         | Narrowing the `variant` type to `'standard'` only, or a lint rule.                               |
| **TITAN-ALR-02** | `severity` is always set explicitly.                              | Removing the default, or making `severity` a required prop.                                      |
| **TITAN-ALR-03** | `color` always matches `severity`, or is left unset.              | A type union or lint rule comparing the two prop values.                                         |
| **TITAN-ALR-05** | At most one trailing action, and it resolves the alert.           | A lint/runtime check counting action children (≤ 1).                                             |
| **TITAN-ALR-06** | Never place an Alert inside a table row or list item.             | A lint rule flagging Alert inside TableRow/ListItem ancestry.                                    |
| **TITAN-ALR-08** | An Alert that appears after page load carries a live-region role. | A required `role`/live prop with no default, or a lint rule requiring `role="alert"`/`"status"`. |
