# SessionRule Bug Fix — 2026-02-20

## Summary

A critical logic error in `SessionRule.ts` caused **all profiles configured as "24/7" to silently block trades** during Asian (TOK/SYD) market hours. This was a silent failure — no crash, no alert — the bot simply never entered during those hours.

---

## Root Cause

**File**: `src/strategies/rules/SessionRule.ts`

**Old logic (broken):**
```ts
if (isMajor && hasAllowedSession) {
    // pass
}
// else: always fail
```

The old check required **both** conditions simultaneously:
1. `isMajor` — the internal flag marking LDN/NY as "major" sessions.
2. `hasAllowedSession` — the session being in the profile's allowed list.

**The problem:** `isMajor` is `false` during TOK/SYD regardless of how the profile is configured. So even when a profile explicitly set `sessions: "LDN,NY,TOK,SYD"` (24/7 mode), the condition `isMajor && hasAllowedSession` failed during TOK/SYD, producing:

```
❌ Mandatory Rule Failed: SessionRule -> Session TOK | SYD not in allowed set (24/7).
```

This was a misleading error — the session WAS in the allowed set, but `isMajor` overrode the check.

---

## Fix Applied

**New logic — 3-path decision tree:**

```
1. Is allowedSessions = [LDN, NY, TOK, SYD]?
   → YES → 24/7 mode. ALWAYS PASS. Skip time checks.

2. Is current session = OFF (market closed)?
   → YES → BLOCK.

3. Is current session in the profile's allowedSessions list?
   → YES → PASS (restricted schedule, currently within window)
   → NO  → BLOCK
```

**Key change:** Removed dependency on `context.isMajorSession` entirely. The session check is now driven purely by the profile's configuration, not by an internal "major session" flag.

---

## Session Mapping (Frontend Wizard → Backend)

| Wizard Selection | `SessionRule.params.sessions` | Backend Behavior |
|:---|:---|:---|
| 24/7 | `LDN,NY,TOK,SYD` | Detected as 24/7 → always passes |
| London + New York | `LDN,NY` | Passes only during LDN/NY hours |
| Asia only | `TOK,SYD` | Passes only during TOK/SYD hours |

---

## Expected Log After Fix

```
✅ Rule Passed: SessionRule -> 24/7 mode: all sessions allowed. Current session: TOK | SYD.
```

vs. the old broken log:

```
❌ Mandatory Rule Failed: SessionRule -> Session TOK | SYD not in allowed set (24/7).
```

---

## Impact Assessment

| Metric | Before Fix | After Fix |
|:---|:---|:---|
| Trades during LDN/NY | ✅ Working | ✅ Working |
| Trades during TOK/SYD (24/7 profiles) | ❌ Silently blocked | ✅ Now allowed |
| Restricted session profiles (LDN,NY only) | ✅ Working | ✅ Working |
| Capital at risk | None (no trades were placed) | Normal |

---

## Files Modified

- `src/strategies/rules/SessionRule.ts` — Core fix
