◆ kanex-ai
Loading…
Sydnee Inc Legal Aug 15 7:55 PM
TEST — Veer 304E, how the Izeal reply will look
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 7:46 PM
Veer Towers 304E - furnished 1BR, corporate housing
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Kelvin Yan Aug 15 7:34 PM
Veer 304E — three drafts for review before sending
⚠ PHISHING: employee impersonation: display name matches 'kelvin yan' but sender is email.sydneeinc.com
phishing urgent
Bank of America Aug 15 5:44 PM
Your statement is available
Bank of America: Your statement is available
financial
Bank of America Aug 15 5:43 PM
Your statement is available
Bank of America: Your statement is available
financial
Sydnee Agent (AI) Aug 15 5:39 PM
[Calibration Daily] 2026-08-16
Sydnee Agent (AI): [Calibration Daily] 2026-08-16
employee high
Sydnee Inc Legal Aug 15 5:34 PM
Access test 1 of 3 - link
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 5:33 PM
Access test 3 of 3 - verified
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 5:09 PM
Access test 3 of 3 - verified
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 5:09 PM
Access test 1 of 3 - link
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:48 PM
Access test 1 of 3 - link (opens straight away, no code)
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Microsoft Outlook Aug 15 4:47 PM
Undeliverable: FW: Dr Cat's Video Insights on $NOW and $TEAM-Video 2 of 12 (August 16, 2026)
Microsoft Outlook: Undeliverable: FW: Dr Cat's Video Insights on $NOW and $TEAM
employee high
Microsoft Outlook Aug 15 4:46 PM
Undeliverable: FW: Dr Cat's Video Insights on $ABCL-Video 3 of 12 (August 16, 2026)
Microsoft Outlook: Undeliverable: FW: Dr Cat's Video Insights on $ABCL-Video 3
employee high
Sydnee Inc Legal Aug 15 4:26 PM
Veer 304E - all three access levels
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:16 PM
Veer 304E - replacement links
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:10 PM
Veer 304E - short links, one with a code
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:04 PM
Your access code
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:04 PM
Your access code
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:00 PM
Veer 304E - test of the secure file links
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Sydnee Inc Legal Aug 15 4:00 PM
Your access code
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydneeinc.com
phishing urgent
Amazon Payments Aug 15 12:52 PM
Action requise sur le compte Amazon Payments
Fake Amazon Payments suspension threat; credential harvesting attempt.
phishing urgent
Guest Relations at The Ritz-Carlton, Laguna Niguel Aug 15 10:49 AM
Kelvin, please complete the travel request form to customize your stay at The Ritz-Carlton, Laguna Niguel
Suspicious Ritz-Carlton email with obfuscation; potential credential theft attempt.
phishing urgent
Manus Team Aug 15 7:33 AM
ACTION REQUIRED: 7 days left to back up Kelvin Yan for future restoration
⚠ PHISHING: phishing subject pattern: 'ACTION REQUIRED' from external sender privaterelay.appleid.com
phishing urgent
Benjamin & Williams Aug 15 5:02 AM
Commercial Claim Discovery Documents Our file:D-8222 Debtor: VICTORIA ROPA ELEGANTE
Fake debt collection demand with 24h payment pressure; spoofed domain.
phishing urgent
Sydnee Agent (AI) Aug 15 4:15 AM
Sydnee nightly — PERFORMANCE audit 2026-08-15 — 0P0 2P1 13R
Sydnee Agent (AI): Sydnee nightly — PERFORMANCE audit 2026-08-15 — 0P0 2P1 13R
employee high
The Ritz-Carlton Reservations Aug 15 4:12 AM
Plan for your upcoming stay at The Ritz-Carlton, Laguna Niguel on Monday, August 17, 2026
Ritz-Carlton reservation confirmation for August 17 stay at Laguna Niguel.
personal
Tesla Aug 15 12:55 AM
Full Self-Driving (Supervised) Subscription Renewed
Tesla FSD subscription auto-renewed for Model Y, $107.29/month.
financial low
Sydnee.ai Legal Aug 14 9:22 PM
Jiao 移民案件最新进展说明(好消息,请放心)
⚠ PHISHING: domain impersonation: display name contains 'sydnee' but sender is email.sydnee.ai
phishing urgent
KuCoin Aug 14 6:38 PM
Dormancy Fee Deduction Notice
KuCoin dormancy fee deducted from account this month.
financial
Tommy Wang (Wang IP Law) Aug 14 6:30 PM
Re: I-485 Application (IOE0934359789 and IOE0934359788)
Tommy Wang (Wang IP Law): Re: I-485 Application (IOE0934359789 and IOE0934359788)
legal-ip high
Bank of America Aug 14 6:16 PM
We've sent your payment to SOUTHERN CALIFORNIA EDISON SCE as requested
Bank of America: We've sent your payment to SOUTHERN CALIFORNIA EDISON SCE as
financial high
Sydnee Agent (AI) Aug 14 5:42 PM
[Calibration Daily] 2026-08-15
Sydnee Agent (AI): [Calibration Daily] 2026-08-15
employee high
Sydnee Agent (AI) Aug 14 5:30 PM
Sydnee algo daily — dev $-2,239 · prod $+0 · 6d window
Sydnee Agent (AI): Sydnee algo daily — dev $-2,239 · prod $+0 · 6d window
employee high
Laguna Road Area Community Message Aug 14 2:39 PM
1 New School Flyer for Your Child
School flyer: Congressional App Challenge signup opportunity.
family
Anthony Patino in Teams Aug 14 2:34 PM
Anthony Patino sent a message
⚠ PHISHING: employee impersonation: display name matches 'anthony' but sender is teams.mail.microsoft
phishing urgent
TAnthony Patino Aug 14 1:34 PM
[Teams oneOnOne] (Teams DM)
Anthony Patino flagging ~$20k air shipment payment for approval.
employee
Amy Burghardt Aug 14 1:19 PM
RE: Meeting
Amy Burghardt: RE: Meeting
personal high
Mary Chmelka Aug 14 1:07 PM
Survey invite to Ameritas California Language Assistance Program Survey
Ameritas requesting language preference survey for insurance benefits.
vendor low
TAnthony Patino Aug 14 12:47 PM
[Teams oneOnOne] (Teams DM)
Anthony Patino requesting updated HDCVT statement.
employee
TAnthony Patino Aug 14 12:45 PM
[Teams oneOnOne] (Teams DM)
Teams DM acknowledgment from Anthony Patino.
employee
TAnthony Patino Aug 14 12:45 PM
[Teams oneOnOne] (Teams DM)
Anthony Patino confirms E-like assessment via Teams DM.
employee low
TAnthony Patino Aug 14 12:08 PM
[Teams oneOnOne] (Teams DM)
Anthony found something; not due for ~30 days.
employee
TAnthony Patino Aug 14 12:05 PM
[Teams oneOnOne] (Teams DM)
SAVLink payment $15,915 awaiting approval
financial high
TAnthony Patino Aug 14 11:59 AM
[Teams oneOnOne] (Teams DM)
Anthony Patino internal Teams message about communications or notes.
employee
TAnthony Patino Aug 14 11:56 AM
[Teams oneOnOne] (Teams DM)
Anthony Patino confirming he will set something up now.
employee
TAnthony Patino Aug 14 11:56 AM
[Teams oneOnOne] (Teams DM)
Anthony Patino Teams DM about something that just came due recently.
employee
TAnthony Patino Aug 14 11:55 AM
[Teams oneOnOne] (Teams DM)
Anthony Patino confirms document dated 6/04 with net60 terms.
employee
TAnthony Patino Aug 14 11:54 AM
[Teams oneOnOne] (Teams DM)
SmartAV Link requesting payment of $15,915.
vendor
TAnthony Patino Aug 14 11:47 AM
[Teams oneOnOne] (Teams DM)
Anthony reports received Iolo Capital invoice, needs approval to add to CC.
employee
TAnthony Patino Aug 14 11:25 AM
[Teams oneOnOne] (Teams DM)
Anthony Patino initiating a Teams call.
employee

Sydnee nightly — ENTRY_FLOW audit 2026-08-11 — 1P0 8P1 10R

Sydnee Agent (AI) <[email protected]>
To: Kelvin Yan <[email protected]>
Tuesday Aug 11, 2026 · 4:10 AM PT · in [email protected]
AI verdict  employee high · confidence: high · by internal-exempt
“Sydnee Agent (AI): Sydnee nightly — ENTRY_FLOW audit 2026-08-11 — 1P0 8P1 10R”
Reasoning: @sydnee.ai is a protected domain — hard exemption
Sydnee nightly — ENTRY_FLOW audit — 2026-08-11 P0 findings: 1 P1 findings: 8 Risks: 10 - Area: Entry Flow (Monday theme) - Branch: `dev` (e0a3fe9 — docs(peak-monitor): hourly log 2026-08-10 13:10 PT) - Files scanned: `bot.py` (24,173 lines), `config.json`, `docs/strategy_decisions.md`, `git log --oneline -30`, prior entry-flow audits 2026-08-10 and 2026-08-03 - **Bugs found (P0 / P1): 1 / 8 (0 new — all carried from prior audits)** - **Risks noted: 10 (0 new — all carried)** **Cross-check:** `git log --oneline` shows zero bot/core/strategy code commits since 2026-07-17 (all subsequent commits are audit docs + peak-monitor logs). All P0 and P1s re-verified at current line numbers — all present, unchanged. `bot.py` remains at 24,173 lines, confirming no line-number drift. No new findings. --- Full report (dev branch): https://github.com/kanex1/sydnee.signals/blob/dev/docs/audit_2026-08-11_ENTRY_FLOW.md Reply FROM [email protected] to [email protected] to request fixes, e.g.: "code_task on sydnee-signals-dev: apply fix for the P0 about RVOL threshold in bot.py" Sydnee Agent will propose + you APPROVE (or plain 'approve') + auto-push to dev. --- Full audit below (first 12 KB) --- # Nightly Audit 2026-08-11 — ENTRY FLOW ## Summary - Area: Entry Flow (Monday theme) - Branch: `dev` (e0a3fe9 — docs(peak-monitor): hourly log 2026-08-10 13:10 PT) - Files scanned: `bot.py` (24,173 lines), `config.json`, `docs/strategy_decisions.md`, `git log --oneline -30`, prior entry-flow audits 2026-08-10 and 2026-08-03 - **Bugs found (P0 / P1): 1 / 8 (0 new — all carried from prior audits)** - **Risks noted: 10 (0 new — all carried)** **Cross-check:** `git log --oneline` shows zero bot/core/strategy code commits since 2026-07-17 (all subsequent commits are audit docs + peak-monitor logs). All P0 and P1s re-verified at current line numbers — all present, unchanged. `bot.py` remains at 24,173 lines, confirming no line-number drift. No new findings. --- ## Findings ### BUG [P0] (carried × 6 entry-flow audits, unfixed since 2026-07-08): `_tf15_trend` NameError in `elif _pending:` path — exit evaluation aborts for pending-reversal symbols **File:** `bot.py:5483` **Evidence:** ```python # bot.py:5441 — immediate-fire path correctly assigns _tfmid_trend: _tfmid_trend = ss.trends.get(15, 0) # bot.py:5483 — elif _pending: path reads the deleted variable name: _15m_with_pos = (_tf15_trend != 0 and _tf15_trend == t.direction) # ← NameError # grep -c "_tf15_trend" bot.py → 1 (line 5483 only; no assignment anywhere in file) ``` `_tf15_trend` was renamed to `_tfmid_trend` in a prior refactor; line 5483 was not updated. `NameError` swallowed by the upstream `except Exception`, causing exit evaluation to return early every bar while `_pending_reversal = True`. OBV/stop/target/peak-confirm exit logic skipped for those symbols — positions can over-hold indefinitely until force-flat. **Impact:** Real-money risk. Any symbol that enters the 2-bar BXt reversal confirmation state loses all exit handling for the life of the `_pending_reversal` flag. **Fix:** ```python # bot.py:5483 _15m_with_pos = (_tfmid_trend != 0 and _tfmid_trend == t.direction) ``` --- ### BUG [P1] (carried × 6 entry-flow audits, unfixed since 2026-07-14): `_check_pullback` has no post-16:00 ET gate — RSI extreme pullbacks bypass `rsi_extreme_offhours_enabled` toggle **File:** `bot.py:7009–7034` (`_check_pullback` time gate section) **Evidence:** ```python # bot.py:7009–7034 — _check_pullback time gates: if 3 * 60 + 50 <= _t_min < 4 * 60: return # overnight gap: preserve if 15 * 60 <= _t_min < 16 * 60 and not _is_rsi_extreme_pb: ss.pending_pullback = None; return # close-hour: cancel BXt/div/pb only if now_et.weekday() == 4 and _t_min >= 15 * 60: ss.pending_pullback = None; return # Friday: cancel all # ← NO GATE for _t_min >= 16 * 60 (post-market Mon–Thu) ``` Scenario (Mon–Thu, off-hours toggle OFF): RSI extreme fires at 15:58 ET. `_rsi_ext_pending_dir` set → `ss.pending_pullback` created. At 16:01 ET (180s timeout), `_check_pullback` runs — `_t_min=961` has no blocking gate. Entry fills post-market via GTC without operator opt-in (toggle default OFF). **Impact:** Post-market GTC orders on RSI extreme pullbacks seeded in the last ~3 min of close hour (15:57–16:00 ET) fire Mon–Thu, bypassing the off-hours toggle. Real-money since 2026-05-01. **Fix:** Add after the Friday cutoff block (after `bot.py:7034`): ```python if _t_min >= 16 * 60 and _is_rsi_extreme_pb: if not self._is_rsi_extreme_offhours_enabled(): self._log_activity(pb.sym, "OFF-HOURS BLOCK — cancelling pending RSI extreme pullback (toggle OFF)", "block") ss.pending_pullback = None return elif _t_min >= 16 * 60 and not _is_rsi_extreme_pb: ss.pending_pullback = None return ``` --- ### BUG [P1] (carried × 6 entry-flow audits, unfixed since 2026-07-07): `_check_pullback` missing open-30 gate — pre-RTH pending pullbacks fire during 9:30–10:00 ET all-entries-blocked window **File:** `bot.py:7009–7034` (`_check_pullback` time gate section) **Evidence:** ```python # _check_pullback time gates (bot.py:7009–7034) do NOT include in_open_30. # Standard _evaluate_symbol hard-blocks ALL entries 9:30–10:00 ET (bot.py:6118): in_open_30 = 9 * 60 + 30 <= t_min < 10 * 60 if in_open_30: return # No equivalent check in _check_pullback. ``` Scenario: RSI extreme fires at 9:28 ET (pre-market, toggle ON). `ss.pending_pullback` created. At 9:30 ET the open-30 block applies to new entries via `_evaluate_symbol` — but `_check_pullback` runs at 9:31 ET on the 180s timeout and fires an entry inside the blocked window. **Impact:** Entries during the high-volatility opening 30 min — explicitly prohibited per CLAUDE.md. Real-money risk since 2026-05-01. **Fix:** Add after the overnight gap return (after `bot.py:7012`): ```python if 9 * 60 + 30 <= _t_min < 10 * 60: self._log_activity(pb.sym, "OPEN-30 BLOCK — cancelling pending pullback (all entries blocked 9:30–10:00 ET)", "block") ss.pending_pullback = None return ``` --- ### BUG [P1] (carried × 6 entry-flow audits, unfixed since 2026-06-29): `_kcr_eval_sym` lacks Friday 15:00 ET entry cutoff — KCR opens new positions Friday 15:00–15:29 ET **File:** `bot.py:20705` **Evidence:** ```python # bot.py:20705 — only time gate before KCR entry: if not self._tape_in_rth_entry_window(): if not self._tape_earnings_offhours_allowed(sym): return # _tape_in_rth_entry_window allows until 15:30 ET with no Friday differentiation: # bot.py:20347-20365: return (start_min <= tmin < 15*60 + 30) # Standard flow hard-blocks ALL entries Friday from 15:00 ET (bot.py:6138): if now_et.weekday() == 4 and t_min >= 15 * 60: return ``` KCR force-flat fires at 15:50 ET. A Friday 15:10 ET KCR entry carries ~40 min of weekend gap risk before flat-close. **Fix:** Add before `_tape_in_rth_entry_window()` check at `bot.py:20705`: ```python _now_kcr = datetime.now(ET) if _now_kcr.weekday() == 4 and _now_kcr.hour * 60 + _now_kcr.minute >= 15 * 60: return ``` --- ### BUG [P1] (carried × 8 entry-flow audits, unfixed since 2026-06-08): `_eval_tv_bxt_sym` lacks Friday 15:00 ET entry cutoff — TV-BXt opens new SNDK/MU positions Friday 15:00–15:44 ET **File:** `bot.py:4141` **Evidence:** ```python # bot.py:4135 — Friday EOD flat only for OPEN positions (my_pos is not None): if _now.weekday() == 4 and (_now.hour * 60 + _now.minute) >= 15 * 60 + 45: self._tv_close(my_pos, "TV-BXt Friday EOD flat") ... return # bot.py:4141 — new-entry path: no Friday gate (my_pos is None): sig = self._tv_bxt_signal(sym) # can fire Friday 15:00–15:44 ET ``` Standard flow blocks ALL new entries Friday from 15:00 ET. TV-BXt bypasses `_evaluate_symbol` entirely. A position opened Friday 15:00 ET isn't force-closed until 15:45 ET — 45 min of weekend gap risk on real-money SNDK/MU. **Fix:** Add before `sig = self._tv_bxt_signal(sym)` at `bot.py:4141`: ```python _now_gate = datetime.now(ET) if _now_gate.weekday() == 4 and _now_gate.hour * 60 + _now_gate.minute >= 15 * 60: if my_pos is None: self._tv_bxt_signal_clear(sym) # prevent Monday stale-signal refire return ``` --- ### BUG [P1] (carried × 8 entry-flow audits, unfixed since 2026-05-17): `TV_BXT_MAX_AGE_SEC` documented but never implemented — Friday webhooks persist through the weekend, fire Monday pre-market **File:** `bot.py:3832` (docstring); `bot.py:13530–13531` (write path) **Evidence:** ```python # bot.py:3832 — docstring promises max-age filtering: """... Optionally ignore stale signals via TV_BXT_MAX_AGE_SEC.""" # bot.py:13530-13531 — write path: no TTL set: r.set(f"tv_bxt_signal:{sym}", sig) r.set(f"tv_bxt_signal_ts:{sym}", str(int(time.time()))) # ← both keys persist indefinitely (no EX parameter) ``` A Friday-afternoon webhook survives 65+ hours to fire Monday pre-market — potentially in the opposite direction from the weekend gap. **Fix:** Add `ex=50400` (14h TTL) to both Redis SET calls at `bot.py:13530-13531`: ```python r.set(f"tv_bxt_signal:{sym}", sig, ex=50400) r.set(f"tv_bxt_signal_ts:{sym}", str(int(time.time())), ex=50400) ``` --- ### BUG [P1] (carried × 8 entry-flow audits, unfixed since 2026-05-17): `REVERSE_TIME_DECAY` uses `== "1"` — morning size ramp silently disabled when docker-compose YAML uses `"true"` **File:** `bot.py:6405` **Evidence:** ```python # bot.py:6405 — sole check: if os.environ.get("REVERSE_TIME_DECAY", "0") == "1" and _in_rth: # All other boolean env flags use .lower() in ("1", "true", "yes"). # REVERSE_TIME_DECAY="true" in docker-compose YAML silently has no effect. ``` **Impact:** Morning size ramp (50%→100% from 10:00–13:00 ET, calibrated from backtest showing 2.3× stronger midday edge) is silently disabled when compose uses YAML boolean form. No diagnostic log when disabled by misconfiguration. **Fix:** ```python if os.environ.get("REVERSE_TIME_DECAY", "").lower() in ("1", "true", "yes") and _in_rth: ``` --- ### BUG [P1] (carried × 8 entry-flow audits, unfixed since 2026-05-17): `_rsi_ext_pending_dir` set BEFORE time gates — RSI extreme fires 1 bar early at open-30 / overnight-gap boundary **File:** `bot.py:6065–6074` (1m BXt pending block) vs `bot.py:6111–6118` (time gates) **Evidence:** ```python # bot.py:6065-6069 — pending state set and early return BEFORE time gates: if _1m_against_e: if _pend_dir != raw_sig: ss._rsi_ext_pending_dir = raw_sig # ← set here, before 6111 return # ← never reaches time gates below # bot.py:6111-6118 — time gates defined AFTER the block above: in_overnight_gap = 3 * 60 + 50 <= t_min < 4 * 60 in_open_30 = 9 * 60 + 30 <= t_min < 10 * 60 if in_overnight_gap: return if in_open_30: return ``` Scenario: RSI extreme fires at 9:35 ET (inside open-30) with 1m BXt against. `_rsi_ext_pending_dir=raw_sig` set and return. At 10:01 ET: `_pend_dir==raw_sig` → falls through at 50% scale → time gates pass → entry fires 1 bar earlier than if the signal re-seeded fresh at 10:01 ET, bypassing the implied "no action during open-30" expectation. **Fix:** Hoist `in_overnight_gap` + `in_open_30` computation above the 1m BXt block: ```python # before bot.py:6054: in_overnight_gap = 3 * 60 + 50 <= t_min < 4 * 60 in_open_30 = 9 * 60 + 30 <= t_min < 10 * 60 # then guard the pending-state set: if _1m_against_e: if _pend_dir != raw_sig: if not (in_overnight_gap or in_open_30): ss._rsi_ext_pending_dir = raw_sig ... return ``` --- ### BUG [P1] (carried × 8 entry-flow audits, unfixed since 2026-05-17): `config.json:daily_loss_limit: 50000` equals `capital` — DLL circuit breaker non-functional on real money **Files:** `config.json` (`"capital": 50000, "daily_loss_limit": 50000`); `core/risk.py:112` **Evidence:** ```json { "capital": 50000, "daily_loss_limit": 50000 } ``` `core/risk.py:112`: gate fires only when `today_pnl < -daily_loss_limit`. With limit equal to capital, the bot must realize a 100% intraday drawdown before entries halt. The `RiskConfig` dataclass default at `bot.py:786` is `$1,000` but `config.json` overrides it on every load. **Impact:** No effective intraday loss circuit-breaker since 2026-05-01. A runaway session can burn the full $50K account before the gate fires. **Fix:** `"daily_loss_limit": 1500` in `config.json` (3% of $50K, matching prior intent). --- ## Risks ### RISK (carried since 2026-08-03): Stale comment at `bot.py:6084–6092` describes old "24×5 all triggers" off-hours policy — contradicts current code **File:** `bot.py:6084–6092` **Evidence:** ```python # bot.py:6084-6092 — comment describes SUPERSEDED policy: # 24×5 entry policy (paper trading — overnight enabled): # ... # - 4:00 PM - 8:00 PM ET (post-market): all triggers allowed ← FALSE # - 8:00 PM - 3:50 AM ET (IBKR Overnight): all triggers allowed on ... ← FALSE # - 4:00 AM - 9:30 AM ET (pre-market): all triggers allowed ← FALSE # bot.py:6141-6143 — actual enforced policy: if not in_rth and trigger_type != "rsi_extreme": self._log_activity(sym, f"