from pathlib import Path p = Path("/data/berna-r7/core/code/cells/dna_kernel.py") text = p.read_text() old = '''def decide(dna: DNA, S: float) -> dict: """ (D_c, K_c, u_c) -> {route, grow, split, retain} Returns a dict of signals + a discrete decision. """ route = signal_route(dna) grow = signal_grow(dna) split = signal_split(dna, S) retain = signal_retain(dna) signals = {"route": route, "grow": grow, "split": split, "retain": retain} # Discrete decision: highest signal wins decision = max(signals, key=signals.get) signals["decision"] = decision return signals''' new = '''def decide(dna: DNA, S: float, S_star: float = 0.85, t_consecutive: int = 3) -> dict: """ (D_c, K_c, u_c) -> {route, grow, split, retain} Priority-based decision per R5 Section 3.5. Priority order (per R5): 1. split - if S >= S* sustained (handled by caller's S_history) 2. retain - if persistence high (frozen state) 3. grow - if plasticity high and not saturated 4. route - default behavior """ route = signal_route(dna) grow = signal_grow(dna) split = signal_split(dna, S, S_star) retain = signal_retain(dna) signals = {"route": route, "grow": grow, "split": split, "retain": retain} # Priority-based decision (R5 Section 3.5) if S >= S_star: decision = "split" elif retain > 0.7: decision = "retain" elif grow > 0.6: decision = "grow" else: decision = "route" signals["decision"] = decision return signals''' assert old in text, "pattern not found" text = text.replace(old, new, 1) p.write_text(text) print("✅ decide() patched")