Location: src/master/node.cpp (set_schedule, ~lines 23-35); contrast with src/virtual/bus.cpp (set_schedule, ~lines 147-152)
Finding: master::Node::set_schedule returns the invalid-frame error when given an empty entry list. The RELAY spec states that installing an empty schedule table is valid and simply disables scheduled transmission — and the virtual bus's own set_schedule implementation correctly accepts an empty table. The two schedule-setting code paths in this same codebase now contradict each other: callers going through the master node have no way to stop scheduled transmission by installing an empty schedule, while callers going through the virtual bus directly can.
Recommendation: Allow an empty schedule in master::Node::set_schedule (store it and let the run loop treat it as 'nothing scheduled'), matching the virtual bus's behavior and the spec's stated semantics.
Filed from the 2026-07-29 ecosystem audit register; independently re-verified against current HEAD before filing.
Location:
src/master/node.cpp(set_schedule, ~lines 23-35); contrast withsrc/virtual/bus.cpp(set_schedule, ~lines 147-152)Finding:
master::Node::set_schedulereturns the invalid-frame error when given an empty entry list. The RELAY spec states that installing an empty schedule table is valid and simply disables scheduled transmission — and the virtual bus's ownset_scheduleimplementation correctly accepts an empty table. The two schedule-setting code paths in this same codebase now contradict each other: callers going through the master node have no way to stop scheduled transmission by installing an empty schedule, while callers going through the virtual bus directly can.Recommendation: Allow an empty schedule in
master::Node::set_schedule(store it and let the run loop treat it as 'nothing scheduled'), matching the virtual bus's behavior and the spec's stated semantics.Filed from the 2026-07-29 ecosystem audit register; independently re-verified against current HEAD before filing.