Skip to content

relay-behavior now has two behaviours, not three: a locked-open circuit cannot be modelled #55

Description

@dcj

Follow-up from #50. Filed to make the collapse a recorded decision rather than a side effect.

After 0.7.0, relay_behavior is still validated (manifest_physics.py:428-434) and still stored on CircuitPhysics, but it no longer drives anything except through relay_locked: both former call sites in emitter.py now read not cphys.always_on. So non-controllable and always-on are behaviourally identical, and the three-value enum has two outcomes.

The consequence is that a producer cannot model a circuit that is locked open: a spare, a tagged-out branch, a circuit commissioned off. Every locked circuit resolves permanently CLOSED with requester CONFIGURATION.

Nothing in the specification contradicts the current behaviour. capabilities/switch.md defines relay-controllable: false as "locked (for example a circuit commissioned as permanently on)", which is worded as an example rather than the only case, so locked-open is left open rather than ruled out. And main documented no meaning for non-controllable at all, so 0.7.0 filled a vacuum rather than overturning a contract.

Two ways to close this, and the choice is a scope call:

  • Record it. State in DESIGN.md that relay-behavior distinguishes the operator's intent only, and that both non-controllable spellings mean locked-closed. Cheapest, and honest.
  • Keep the seam. Have a locked circuit resolve to a declared resting state rather than an implied CLOSED, so non-controllable can later mean locked-at-its-commissioned-state without another wire break.

Worth deciding before someone needs locked-open, because relay-behavior is where it would have lived.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions