# Panes

Four panes cycle via `←` / `→` or `Tab` / `Shift-Tab`. Empty panes hide automatically — Targets hides when no rows are seeded, Health hides when no checks are registered.

## Targets

Two-column layout when the terminal is at least 200 cols wide: row list on the left, actions for the selected row on the right. Narrower terminals stack vertically (list on top, actions below).

```
┌── Targets ──────────────────┬── Actions for `ticker` (process) ────┐
│  ▸ ○  web      [docker]   │   [r] Restart ticker      (default)  │
│    ○  db       [docker]   │   [t] Run tests                       │
│    ○  ticker   [process]  │                                       │
│    ●  api                 │                                       │
└───────────────────────────┴───────────────────────────────────────┘
```

### Row kinds

| Kind | Source | Built-in `r` |
|---|---|---|
| `repo`     | `config.repos[]` or `profile.reposProvider()` | none — declare an action |
| `docker`   | `config.docker.services[]` | `docker compose restart <service>` |
| `process`  | `config.processes[]` | kill + respawn (tagged spawn lookup) |

### Status glyphs

- ● running (green)
- ○ idle (gray)
- ✗ failing (red)

Lint sub-glyph (after the name): ✓ pass · ! fail · (none) unknown. The leading `▸` marks the selected row; the pane border highlights when this pane has focus.

### Keystrokes

- `↑` / `↓` — move selection
- `<key>` (any single character) — fire the first matching action for the selected row from the action registry. Match rule: action whose `scope` is `repos:<rowId>` or `repos` AND whose `key` equals the keystroke. Declared actions win over built-ins on (scope, key) collision so you can shadow the default `r`.
- `:` — open the `:` command palette (any tab; not Targets-specific)

If no action matches, the keystroke is a silent no-op — the right-side panel lists exactly what's bound, including built-ins tagged `(default)`.

## Output

Streaming source-tagged logs. Severity is shown by a leading glyph (`⚠` warn, `✗` error; info has none) so lines remain scannable without color.

- `↑` / `↓` — scroll one line
- `PgUp` / `PgDn` — scroll one page
- `Enter` — jump to bottom (auto-scroll resumes)
- `c` — clear
- `/` — open Search modal
- `f` — open Filter modal
- `e` — open the most recent error with a `file:line` reference in `$EDITOR`

A "Recent errors" strip appears at the top when one or more error lines have been pushed (most-recent first, capped at 3 visible).

## Health

Each row shows: severity glyph (`✓` ok, `⚠` warn, `✗` error), label, remediation key (if any). `Enter` toggles the diagnostic detail for the selected row. Press the remediation letter (case-insensitive — declared `R` matches both `r` and `R`) to fire the fix.

While a remediation runs, a banner appears at the top and the running row shows `(running…)`.

## Help

Live-rendered markdown. `j` / `k` (or `Shift-Tab` / `Tab`) cycle pages. `↑` / `↓` scroll. `g` / `G` jump to top / bottom. `←` / `→` always exit Help to the next tab.

Under narrow terminals (< 200 cols), the page-title strip hides and the legend collapses to `[j/k] page i/N` to save space.
