---
sources:
  - ../../src/analyses/bridges.rs
---

# Articulation points and bridges

## The concept

An **articulation point** (or cut vertex) is a node whose removal disconnects the graph. A **bridge** is an edge whose removal disconnects the graph. Both indicate structural single points of failure.

```
a ── b ── c ── d
     ▲         ▲
     cut vertex bridge (c—d)
```

If you remove node `b`, nodes `a` and `c,d` can no longer reach each other. The edge `c—d` is the only connection to `d`.

## Why it matters for knowledge systems

Cut vertices and bridges reveal fragility in your documentation structure:

- **Cut vertex documents** are single points of failure. If a cut vertex is deleted, moved, or becomes stale, entire sections of the graph become unreachable. Consider adding alternative paths.
- **Bridge edges** are the only connection between two parts of the graph. They are the minimum set of links you cannot remove without fragmenting the structure.

## What drft surfaces

### As an analysis (`drft report`)

```bash
drft report bridges
```

```
=== bridges ===
2 cut vertices, 1 bridge
cut vertex: hub.md
cut vertex: index.md
bridge: setup.md ↔ advanced.md
```

### As a rule (`drft check`)

The `fragility` rule warns about cut vertices and bridge edges:

```
warn[fragility]: hub.md (cut vertex)
warn[fragility]: setup.md → advanced.md (bridge edge)
```

Enable it in `drft.toml`:

```toml
[rules]
fragility = "warn"
```

## Algorithm

Treats the directed graph as undirected. Uses [Tarjan's bridge-finding algorithm](https://en.wikipedia.org/wiki/Bridge_(graph_theory)#Tarjan's_bridge-finding_algorithm): a single DFS pass maintaining discovery times and low-link values. A node is a cut vertex if it is the root with 2+ children, or has a child where `low[child] >= disc[node]`. An edge is a bridge if `low[child] > disc[node]`. Complexity is O(V + E).
