At commit 992f27ad25e52a63d98567f479fde50c90e0cbac, policy/propTags.py line 373 reads:
This guard can never be true, so nct is computed and then always discarded in the benign-environment decay branch (citag > tau_s_ci and etag > tau_s_e). The sibling suspect-environment branch (line 395) uses the presumably intended form if ct < nct:.
Observed behavior (minimal harness against the unmodified code, script below): in the benign branch, itag decays toward 0.75 as expected, but ctag never updates. Example run with tags [1.0, 1.0, 0.2, 0.2], a time delta of 10 units and decay=1:
benign branch : it 0.2 -> 0.7499994754791259 ; ct 0.2 -> 0.2 (nct computed = 0.7500, discarded)
susp-env : it 0.2 -> 0.449755859375 ; ct 0.2 -> 0.449755859375
This looks consistent with a typo (ct < ct vs. ct < nct). For reference, MORSE (S&P 2020, Table I) applies decay to both components of the data tag. We have not measured whether this affects CAPTAIN's detection results or the paper's evaluation — flagging it for your assessment.
Reproduction (python3, from the repo root; the only liberties taken are bypassing Subject.__init__ and running with update_gradients=False — the decay block itself runs unmodified):
import sys; sys.path.insert(0, '.')
from graph.Subject import Subject
import policy.propTags as pt
class S(Subject):
def __init__(self): pass
class Ev:
def __init__(self, t): self.type='chmod'; self.time=t; self.parameters=0; self.id=1
class Ob:
def get_name(self): return 'O'
def run(cit, et, it, ct):
s = S(); s.get_name = lambda: 'S'
s.setSubjTags([cit, et, it, ct]); s.updateTime = 1
pt.propTags(Ev(1 + 10*4e9), s, Ob(), None, att=0.2, decay=1,
prop_lambda=0, tau=[0.5]*8, update_gradients=False)
print(s.tags())
run(1.0, 1.0, 0.2, 0.2) # benign branch: ct stays 0.2
run(1.0, 0.2, 0.2, 0.2) # susp-env branch: both move toward 0.45
Found during a formal-methods fidelity audit of MORSE-style tag propagation semantics; happy to share more details if useful.
At commit
992f27ad25e52a63d98567f479fde50c90e0cbac,policy/propTags.pyline 373 reads:This guard can never be true, so
nctis computed and then always discarded in the benign-environment decay branch (citag > tau_s_ci and etag > tau_s_e). The sibling suspect-environment branch (line 395) uses the presumably intended formif ct < nct:.Observed behavior (minimal harness against the unmodified code, script below): in the benign branch,
itagdecays toward 0.75 as expected, butctagnever updates. Example run with tags[1.0, 1.0, 0.2, 0.2], a time delta of 10 units anddecay=1:This looks consistent with a typo (
ct < ctvs.ct < nct). For reference, MORSE (S&P 2020, Table I) applies decay to both components of the data tag. We have not measured whether this affects CAPTAIN's detection results or the paper's evaluation — flagging it for your assessment.Reproduction (python3, from the repo root; the only liberties taken are bypassing
Subject.__init__and running withupdate_gradients=False— the decay block itself runs unmodified):Found during a formal-methods fidelity audit of MORSE-style tag propagation semantics; happy to share more details if useful.