issue-states 0.2.0

A library for managing issue states
Documentation
# Issue states

The central objects of interest are the states an issue may have, henceforth
referred to as "issue states". However, in this project, issue states are not
a property which is actively assigned to an issue but rather a property which is
inferred from its metadata, based on the specification. For example, an issue
may exhibit the state "assigned" if an assignee is present for the issue.

An issue state is associated with a "condition", which is conceptually a pure
function mapping an issue's metadata to a truth value. A state is said to be
"enabled" for a given issue if this function yields "true" for the issue's
metadata, e.g. if the condition is satisfied.

An issue exhibits at most one state at a given time. This state has to be one of
the enabled states for the issue. Contrary to common workflow concepts, state
transitions are not modeled --hence the name "issue-states" rather than
something containing "workflow". Thus, no restrictions or actions can be
associated with an transition. If a user can arbitrarily alter issue metadata,
it can be assumed that he or she may put the issue in any state specified.


## Relations between states

An issue state may "override" one or more other issue states if specified:
if the state is enabled, the issue cannot exhibit any of the states overridden.
For example, if two states are enabled for an issue but one overrides the other,
the overriding state is selected as the issue's state. The relation "overrides"
is both anti-symmetric and transitive.

An issue state may "extend" on one or more other issue states. This relation
has the same effect as the "override" relation. However, the extending state
inherits the conditions of the extended states, e.g. the state is only enabled
if its own condition is satisfied and all states it extends are enabled. The
inheritance of extended states is transitive with regard to the relation
"extends". Thus, the relation "depends on" is also both anti-symmetric and
transitive.

The relation given by the union of the relations "overrides" and "extends" shall
also be anti-symmetric and transitive.


## Note on computability

The rules above are designed to keep the resolution of an issue's state
computable, e.g. it should not be possible to construct contradictions using the
relations between issue-states.