# Retention Rollback

T1 expires at T3, traversing a generated recovery edge into T1 activation 2.

- Workflow: `Retention@1@1`
- Static graph: 4 nodes, 6 edges
- Timeline: 4 ticks

## Static graph context

- **TEST:** `t1` → `t2` → `t3`

## Tick 1: Start workflow

**Workflow status:** `WAITING`<br>
**Active/current:** `t1`<br>
**Input event:** `start`

### Edge evaluation

**Evaluated**

- _No evaluated-edge detail recorded._

**Traversed**

- _No edge traversed in this tick._

### Review requests

| Activation | Task | Idempotency key |
|---|---|---|
| `t1#1` | review:scenario:retention\_rollback/t1/1 | `scenario:retention\_rollback/t1/1` |

### Join state

- _No persisted join state._

### Activation history

| Seq | Node | Activation | Status | Result / task |
|---:|---|---:|---|---|
| 1 | `t1` | 1 | WAITING | review:scenario:retention\_rollback/t1/1 |

## Tick 2: Complete t1

**Workflow status:** `WAITING`<br>
**Active/current:** `t2`<br>
**Input event:** `complete\_latest`

### Edge evaluation

**Evaluated**

- `e1`: `t1` → `t2`

**Traversed**

- `e1`: `t1` → `t2`

### Review requests

| Activation | Task | Idempotency key |
|---|---|---|
| `t2#1` | review:scenario:retention\_rollback/t2/1 | `scenario:retention\_rollback/t2/1` |

### Join state

- _No persisted join state._

### Activation history

| Seq | Node | Activation | Status | Result / task |
|---:|---|---:|---|---|
| 1 | `t1` | 1 | COMPLETE | result-t1 |
| 3 | `t2` | 1 | WAITING | review:scenario:retention\_rollback/t2/1 |

## Tick 3: Complete t2

**Workflow status:** `WAITING`<br>
**Active/current:** `t3`<br>
**Input event:** `complete\_latest`

### Edge evaluation

**Evaluated**

- `e2`: `t2` → `t3`

**Traversed**

- `e2`: `t2` → `t3`

### Review requests

| Activation | Task | Idempotency key |
|---|---|---|
| `t3#1` | review:scenario:retention\_rollback/t3/1 | `scenario:retention\_rollback/t3/1` |

### Join state

- _No persisted join state._

### Activation history

| Seq | Node | Activation | Status | Result / task |
|---:|---|---:|---|---|
| 1 | `t1` | 1 | COMPLETE | result-t1 |
| 3 | `t2` | 1 | COMPLETE | result-t2 |
| 5 | `t3` | 1 | WAITING | review:scenario:retention\_rollback/t3/1 |

## Tick 4: Expire t1

**Workflow status:** `WAITING`<br>
**Active/current:** `t1`, `t3`<br>
**Input event:** `expire`

### Edge evaluation

**Evaluated**

- `e4`: `approved` → `t1`
- `e5`: `t2` → `t1`
- `e6`: `t3` → `t1`

**Traversed**

- `e6`: `t3` → `t1`

### Review requests

| Activation | Task | Idempotency key |
|---|---|---|
| `t1#2` | review:scenario:retention\_rollback/t1/2 | `scenario:retention\_rollback/t1/2` |

### Join state

- _No persisted join state._

### Activation history

| Seq | Node | Activation | Status | Result / task |
|---:|---|---:|---|---|
| 1 | `t1` | 1 | INVALID | result-t1 |
| 3 | `t2` | 1 | COMPLETE | result-t2 |
| 5 | `t3` | 1 | WAITING | review:scenario:retention\_rollback/t3/1 |
| 7 | `t1` | 2 | WAITING | review:scenario:retention\_rollback/t1/2 |
