What
Decision 6 of ADR-0059. A point or signal address is the string the drawing carries and the hardware answers to, and the topic carries it as trailing levels with no system in front:
| topic |
payload fields |
values |
tc49/layout/state/wanted/point/<addr> |
addr, position |
position closed or thrown |
tc49/layout/state/wanted/signal/<addr> |
addr, aspect |
aspect stop, caution or clear |
tc49/layout/state/device/point/<addr> |
addr, position |
position closed or thrown |
Whatever is wired subscribes tc49/layout/state/wanted/# and acts on the addresses it recognises, as traction already does. An address nobody answers to does no harm. Two systems that number a point alike both act, and that is the deployer's addressing to fix, not a topic level.
Scope
docs/SYSTEM.md: the three rows, and the paragraph "a point or signal address names its system as its first level" goes.
src/tc49/lib/inventory.py: the rows.
src/tc49/store/drawing.py: the check that refuses an address naming no system goes; an address is any non-empty string.
src/tc49/layout/interface.py, src/tc49/dccex/translator.py: no split("/") on an address; the translator acts on every point and signal address it hears.
CONTEXT.md: Address (both entries) and Device vocabulary.
- Fixtures under
bench/layouts/ that carry dccex/… addresses, and the UI's generated types.
Acceptance
What
Decision 6 of ADR-0059. A point or signal address is the string the drawing carries and the hardware answers to, and the topic carries it as trailing levels with no system in front:
tc49/layout/state/wanted/point/<addr>addr,positionpositionclosedorthrowntc49/layout/state/wanted/signal/<addr>addr,aspectaspectstop,cautionorcleartc49/layout/state/device/point/<addr>addr,positionpositionclosedorthrownWhatever is wired subscribes
tc49/layout/state/wanted/#and acts on the addresses it recognises, as traction already does. An address nobody answers to does no harm. Two systems that number a point alike both act, and that is the deployer's addressing to fix, not a topic level.Scope
docs/SYSTEM.md: the three rows, and the paragraph "a point or signal address names its system as its first level" goes.src/tc49/lib/inventory.py: the rows.src/tc49/store/drawing.py: the check that refuses an address naming no system goes; an address is any non-empty string.src/tc49/layout/interface.py,src/tc49/dccex/translator.py: nosplit("/")on an address; the translator acts on every point and signal address it hears.CONTEXT.md: Address (both entries) and Device vocabulary.bench/layouts/that carrydccex/…addresses, and the UI's generated types.Acceptance
scripts/check.shgreen.5.