Skip to content

Benign-branch decay never updates ctag: tautological guard 'if ct < ct' (policy/propTags.py) #3

Description

@sotomayorlucas

At commit 992f27ad25e52a63d98567f479fde50c90e0cbac, policy/propTags.py line 373 reads:

if ct < ct:
    ct = nct

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions