File size: 1,723 Bytes
d997548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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")