Attributes

Roles and places: scoping steps to people and locations

Procedures can be scoped to indicate the entity performing the task or the environment it is to be performed in. This scoping is called an attribute.

There are two types of attribute:

Roles -- a named person or job function performing the step, for example @hitchhiker.

Places -- the location or context a step is to be performed at or within, for example ^sleeping_quarters.

As shown in these examples, an attribute is formed by

  • an attribute marker denoted by @ for roles or ^ for places; and then

  • an identifier.

The identifier following the marker must be a valid identifier: it must start with a lowercase letter and contain only lowercase letters, digits, and underscores.

Combining Attributes

Multiple attributes (be they role or place assignments) can be joined using the + operator:

@president_of_the_galaxy + @femme_fatale
^milliways + @waiter + @dish_of_the_day

Scope

An attribute creates a new scope, so sub-steps and code blocks can be nested underneath a role or place assignment.

There is also the special @* syntax which resets the attribute scope, applying to all roles.