# Units: Runtime & gating

> Where a unit runs, and what it is allowed to write.

Glider documentation · Logic · Web page: https://cgglider.com/docs/units/runtime/

Sections of this page: [Overview](https://cgglider.com/docs/units.md) · [Clock](https://cgglider.com/docs/units/clock.md) · [Counter](https://cgglider.com/docs/units/counter.md) · [Ticker](https://cgglider.com/docs/units/ticker.md) · [Formatter](https://cgglider.com/docs/units/formatter.md) · [Watch rule](https://cgglider.com/docs/units/watch-rule.md) · [Data feed](https://cgglider.com/docs/units/poller.md) · [Runtime & gating](https://cgglider.com/docs/units/runtime.md) · [Commands & API](https://cgglider.com/docs/units/commands.md)

| Property | Values | Meaning |
| --- | --- | --- |
| runtime | client · server | Where the unit executes. Anything touching a secret must be server. |
| enabled | true · false | A disabled unit keeps its config but does not run. |
| status | ok · degraded · disabled | The dot on the row. Degraded means it is running but something is wrong — a failing poll, a missing input. |
| writes | paths | Declared, not inferred. Re-derived every time the config changes. |

## The unit report

| Issue | Means |
| --- | --- |
| schema | The unit does not round-trip through validation. |
| expr | An expression references an undeclared identifier or a function that is not whitelisted. |
| multi-writer | Two or more units write the same path; the message names them. |
| self-accumulate | A formatter or watch rule reads its own output — data:: and poller:: inputs are resolved first. The unit is held and never runs. |
| overlapping-writes | Write paths nest inside each other (a clock's zero path inside its display, or one unit writing score while another writes score.home). A unit whose own paths nest is held and never runs. |
| reserved-path | A unit writes under vars, to a read-only feed, or to a whole spreadsheet/column rather than a single sheet cell. Use a Variables operation for vars; write page data or one sheet cell for unit outputs. |

> **Guards decide what a gap looks like:** onMissing — hold, blank, zero, or fallback — is what stands between a dropped API field and a blank name on air. Choose it deliberately for every mapping.
