Skip to content

Bindings and reach

Some tags compute from other tags. A query tag has Parameters, a script tag has inputs. A binding says which tag fills one of them.

An example: a query counts good parts from a point in time. Its parameter from is bound to Shift.StartedAt. When the value there changes, the query recomputes.

The Parameters section lists every parameter with its state. With none bound, the page says No bound parameters.

  1. Bind to a tag opens the Pick a source tag chooser.
  2. After saving, the parameter reads bound to {{path}}.
  3. Change… swaps the source, Unbind removes it.

A binding is stored as an id, not as a name: A binding is stored as the source tag stable id - renaming the source does not break it.

A parameter that is neither bound nor supplied from outside is not knowable. The tag’s value then stands at Uncertain — not at zero.

You cannot bind a tag to something that already depends on it. TrakState checks this on save and refuses: {{path}} already depends on this tag. That keeps the web directed, and nothing can recompute in a circle.

There is also a depth limit. When it is reached, the value comes back Unusable rather than running on.

When a tag changes, TrakState works out every tag that depends on it and recomputes them in the right order: inputs first, then what is derived from them. Open screens are told and refetch the affected values. If a notification is lost, the connection catches up on reconnect.

A timer tag exists for exactly this: everything bound to it recomputes on each tick.

Reach says how widely a value is shared. It is a result, not an input field:

Reach Means
shared across the whole tenant — the default
personal for one user
single view for one window

The narrowest bound input decides. A value can only be shared as widely as its narrowest input allows. Where it becomes narrower than shared, the interface names the reason: derived from binding of {{param}} to {{source}}.

The Used by tab answers two different questions:

  • other tags that bind to this one. With none, it says Nothing reads this yet. Deleting it breaks nothing today.
  • masks and boards from plugins, split into Written by and Read by. A capture mask is not a tag, so it does not appear in the binding web — but it has to be visible before you rename or delete the tag.

When you delete a tag, the prompt names how many tags bind to it: Delete “{{path}}”? {{count}} tag(s) bind to this - this cannot be undone.