At commit 992f27ad25e52a63d98567f479fde50c90e0cbac, the inject block in policy/alarms.py fires on itag(s.tags()) < tau_s_i alone (there is a # Problem comment nearby, so this may already be known). MORSE's Table III (S&P 2020) additionally conditions the Inject alarm on the target subject having a benign subject tag.
Semantically, the omission changes the alarm's class: with the target condition it is a contrast-style predicate (additional suspicion on the target can switch it off); without it, a pure threshold on the injector. This matters if CAPTAIN's alarm behavior is compared against MORSE's.
Two minor naming nits in the same file: the emitted alarm name is "Inject" while alarm_types (line 40) declares "Injection"; and "RemoveIndicator" is emitted from the remove branch but is not declared in alarm_types.
We have not measured any impact on evaluation results — flagging for fidelity. Found during a formal-methods fidelity audit of MORSE-style tag semantics.
At commit
992f27ad25e52a63d98567f479fde50c90e0cbac, the inject block inpolicy/alarms.pyfires onitag(s.tags()) < tau_s_ialone (there is a# Problemcomment nearby, so this may already be known). MORSE's Table III (S&P 2020) additionally conditions the Inject alarm on the target subject having a benign subject tag.Semantically, the omission changes the alarm's class: with the target condition it is a contrast-style predicate (additional suspicion on the target can switch it off); without it, a pure threshold on the injector. This matters if CAPTAIN's alarm behavior is compared against MORSE's.
Two minor naming nits in the same file: the emitted alarm name is
"Inject"whilealarm_types(line 40) declares"Injection"; and"RemoveIndicator"is emitted from the remove branch but is not declared inalarm_types.We have not measured any impact on evaluation results — flagging for fidelity. Found during a formal-methods fidelity audit of MORSE-style tag semantics.