ACTIVE vs DROP Node Logic Explained | Generated by AI

Home 2026.05

Here’s the full picture:

How ACTIVE vs DROP works

The two key enums (models.py:12-54)

class NodeStatus(str, Enum):
    ACTIVE = "ACTIVE"           # viable, can be expanded further
    PRUNED_BY_RULE = "PRUNED_BY_RULE"  # killed by hard physics rule
    PRUNED_BY_SLM = "PRUNED_BY_SLM"   # killed by soft scoring (reserved)

class NodeResultState(str, Enum):
    PASS = "PASS"    # survived this round
    DROP = "DROP"    # dead — won't be expanded

A node only gets DROP when both are set together:

self.node.status = NodeStatus.PRUNED_BY_RULE
self.node.result_state = NodeResultState.DROP
self.node.fsm_state = FSMState.FINALIZED   # no further transitions

Where DROP is triggered

1. During calculate stage (builder.py:295-310) — tot_hard_rule_check from skills.py returns physical_violations:

if not hard_rule_result["passed"]:
    if physical_violations:
         status = PRUNED_BY_RULE, result_state = DROP

2. During evaluate stage (builder.py:396-416) — the evaluation breakdown itself contains hard_rule_violations:

if breakdown.hard_rule_violations:
     status = PRUNED_BY_RULE, result_state = DROP

What does NOT cause DROP


One-liner: Only a hard physics rule violation (detected by skills.py) flips a node to DROP. Soft scores just affect expansion priority, leaving the node ACTIVE.


Generated by AI. Curating and sharing still takes effort. If you find it useful, feel free to donate. WeChat: @lzwjavaWeChat QR · X: @lzwjava · Say hi 👋

Back Donate