◆ kanex-ai
Loading…
Interactive Brokers Client Services Jun 17 12:40 AM
Message Center Notification
Interactive Brokers ticket response regarding Kanex account messaging.
financial
Joaquín Medina Jun 17 12:34 AM
RE: Re:[## 708 ##] RE: RMA for EXT-4KHD70M
AVIT Vision requests credit memo for destroyed equipment per RMA 708.
vendor
Microsoft Outlook Jun 16 10:36 PM
Undeliverable: FW: TIER 3 Trending Stocks Part 2 (1 New Red Candle): $DELL, $OSCR, $ONDS, $ZETA, $LMND and $TMC (June 17, 2026-daily)
Microsoft Outlook: Undeliverable: FW: TIER 3 Trending Stocks Part 2 (1 New Red
employee high
Interactive Brokers Client Services Jun 16 9:59 PM
Security Notice for User k******8: Verify Log In
Fake Interactive Brokers security alert requesting account verification.
phishing urgent
Microsoft Outlook Jun 16 9:38 PM
Undeliverable: FW: $QCOM (June 17, 2026-daily)
Microsoft Outlook: Undeliverable: FW: $QCOM (June 17, 2026-daily)
employee high
TDhruv Sharma Jun 16 9:05 PM
[Teams oneOnOne] (Teams DM)
Dhruv Sharma: [Teams oneOnOne] (Teams DM)
personal
Fabiola Hernandez Jun 16 6:55 PM
Tomorrow is Spirit Day – Souvenir T-Shirt Day
Spirit Day reminder: kids invited to wear souvenir t-shirt tomorrow at camp.
family
Derrick Jun 16 6:19 PM
Request for More Info: EXT-USBC2XI-100M - Dual-Host USB 3.2 Gen 1 Extender over CAT6a — USB-C & USB-B Inputs, 100m/328ft
Product inquiry for USB extender; requesting pricing, specs, availability.
vendor
Sydnee Agent (AI) Jun 16 6:00 PM
[Spread Cal] 2026-06-17 — per-stock max_spread_bps results
Sydnee Agent (AI): [Spread Cal] 2026-06-17 — per-stock max_spread_bps results
employee high
Sydnee Agent (AI) Jun 16 5:40 PM
[Calibration Daily] 2026-06-17
Sydnee Agent (AI): [Calibration Daily] 2026-06-17
employee high
Sydnee Agent (AI) Jun 16 5:30 PM
Sydnee algo daily — dev $-2,699 · prod $+0 · 6d window
Sydnee Agent (AI): Sydnee algo daily — dev $-2,699 · prod $+0 · 6d window
employee high
Find My Jun 16 5:24 PM
A sound was played on Kelvin’s iPad mini.
Find My: A sound was played on Kelvin’s iPad mini.
vendor
Sammy Cemo, Matt Pourcho and Anthony DeLorenzo Jun 16 4:04 PM
New Pricing | Fortune 40 Credit | STNL Industrial | 11 Yr. WALT | SoCal
⚠ PHISHING: employee impersonation: display name matches 'anthony' but sender is cbre.com
phishing urgent
Microsoft Store Jun 16 3:23 PM
Meet the new Surface lineup—with limited-time offers
Microsoft Store: Meet the new Surface lineup—with limited-time offers
vendor
[email protected] Jun 16 2:34 PM
New Funding Program
Funding broker offering working capital solutions and consolidation services.
vendor
Sammy Cemo and Anthony DeLorenzo Jun 16 2:03 PM
Single-Story Owner-User Offering in Newport Beach
⚠ PHISHING: employee impersonation: display name matches 'anthony' but sender is cbre.com
phishing urgent
Aarti Gupta Jun 16 1:53 PM
Re: CR-TOUCH6R 6" Widescreen Touch Panel with Knob, RS232/RS485 & PoE
Aarti Gupta: Re: CR-TOUCH6R 6" Widescreen Touch Panel with Knob, RS232/RS
employee high
[email protected] Jun 16 1:43 PM
Action required: Your June booking bonuses expire soon
⚠ PHISHING: phishing subject pattern: 'Action required' from external sender vacationoffer.com
phishing urgent
TAnthony Patino Jun 16 1:30 PM
[Teams oneOnOne] (Teams DM)
LK account overdrawn; bank fee applied, needs replenishment before QB charge.
employee high
TAnthony Patino Jun 16 1:27 PM
[Teams oneOnOne] (Teams DM)
Anthony Patino sent a brief Teams DM referencing 'LK'.
employee
TAnthony Patino Jun 16 1:27 PM
[Teams oneOnOne] (Teams DM)
Anthony Patino reports insufficient funds issue.
employee high
Amazon Payments Jun 16 12:44 PM
Action requise sur le compte Amazon Payments
Fake Amazon Payments suspension notice in French requesting account verification.
phishing urgent
Nick Daniel Jun 16 11:04 AM
Quick question
TriNet HR solution sales inquiry.
vendor low
Aarti Gupta Jun 16 10:04 AM
Re: Order help #1227
Aarti Gupta: Re: Order help #1227
employee high
Aarti Gupta Jun 16 10:03 AM
Re: Order help #1227
Aarti Gupta: Re: Order help #1227
employee high
Aarti Gupta Jun 16 9:59 AM
EXT-USBCPD4K-70M 18Gbps USB-C 4K60 HDBaseT 3.0 Extender with 100W PD (70m)
Aarti Gupta: EXT-USBCPD4K-70M 18Gbps USB-C 4K60 HDBaseT 3.0 Extender with
employee high
Sean McGinley Jun 16 9:58 AM
Order help #1227
Customer inquiry about HDMI extender transmitter compatibility for order #1227.
vendor
IBKR FYI Jun 16 9:51 AM
FYI: Upcoming Exchange Holidays
Exchange holiday notice: MIAX, NASDAQ, NYSE closed June 19.
financial low
IBKR FYI Jun 16 9:27 AM
FYI: Upcoming Exchange Holidays
NASDAQ/MIAX exchange holiday June 19, 2026 — no trading.
financial low
Hims Jun 16 9:02 AM
Kelvin - action required on your account
⚠ PHISHING: phishing subject pattern: 'action required' from external sender icloud.com
phishing urgent
[email protected] Jun 16 9:02 AM
You have a new estimate
Suspicious medical estimate link from Providence—verify legitimacy before clicking.
phishing urgent
Mail Delivery System Jun 16 8:20 AM
Mail delivery failed [Invoice #36077 PO: SH260526762J]
Mail delivery failed for invoice #36077 to Mike Vanderkamp; recipient address rejected.
financial
Mail Delivery System Jun 16 8:19 AM
Mail delivery failed [Invoice #36078 PO: SH260430677J]
Mail delivery failed: [email protected][email protected] for invoice #36078.
vendor
Mail Delivery System Jun 16 8:19 AM
Mail delivery failed [Invoice #36079 PO: SH2606101007J]
Mail delivery failure: invoice to [email protected] rejected by recipient server.
financial
TDhruv Sharma Jun 16 8:16 AM
[Teams oneOnOne] (Teams DM)
Dhruv Sharma: [Teams oneOnOne] (Teams DM)
personal
Zoho Campaigns Jun 16 7:55 AM
Campaign "NEW USB-C + USB-B Dual-Host Extender · 100m" has been successfully Sent - Zoho Campaigns
Zoho Campaigns notification: USB-C/USB-B extender product campaign sent successfully.
employee
Ali Pacheco Jun 16 7:53 AM
Request for More Info: EXT-USBC2XI-100M - Dual-Host USB 3.2 Gen 1 Extender over CAT6a — USB-C & USB-B Inputs, 100m/328ft
Product inquiry for USB 3.2 extender from external vendor.
vendor
KanexPro Jun 16 7:51 AM
NEW USB-C + USB-BDual-Host Extender · 100m
KanexPro: NEW USB-C + USB-BDual-Host Extender · 100m
employee high
KanexPro Jun 16 7:50 AM
NEW USB-C + USB-BDual-Host Extender · 100m
KanexPro: NEW USB-C + USB-BDual-Host Extender · 100m
employee high
KanexPro Jun 16 7:50 AM
NEW USB-C + USB-BDual-Host Extender · 100m
KanexPro: NEW USB-C + USB-BDual-Host Extender · 100m
employee high
KanexPro Jun 16 7:49 AM
NEW USB-C + USB-BDual-Host Extender · 100m
KanexPro: NEW USB-C + USB-BDual-Host Extender · 100m
employee high
TDhruv Sharma Jun 16 7:33 AM
[Teams oneOnOne] (Teams DM)
Dhruv Sharma: [Teams oneOnOne] (Teams DM)
personal
TDhruv Sharma Jun 16 7:32 AM
[Teams oneOnOne] (Teams DM)
Dhruv Sharma: [Teams oneOnOne] (Teams DM)
personal
Bank of America Jun 16 6:16 AM
Your available account balance is low
Bank of America: Your available account balance is low
financial
Let's Talk Supply Chain Jun 16 6:01 AM
Are you ready?
Suspicious meeting confirmation from unknown sender with obfuscation.
phishing urgent
Interactive Brokers Client Services Jun 16 5:18 AM
Message Center Notification
Interactive Brokers ticket response regarding Kanex account notification.
financial
Benjamin & Williams Jun 16 5:03 AM
Commercial Claim Discovery Documents Our file:D-8222 Debtor: VICTORIA ROPA ELEGANTE
Fake debt collector demanding payment on unknown commercial claim within 24h.
phishing urgent
IBKR FYI Jun 16 5:01 AM
FYI: Option Expiration Notification
Oracle options expiring 18JUN2026 — immediate action required.
financial high
IBKR FYI Jun 16 5:00 AM
FYI: Option Expiration Notification
MSTR call option expiring 18JUN2026; action needed if extending position.
financial
Sydnee Agent (AI) Jun 16 4:25 AM
Sydnee nightly — exit_flow audit 2026-06-16 — 0P0 8P1 6R
Sydnee Agent (AI): Sydnee nightly — exit_flow audit 2026-06-16 — 0P0 8P1 6R
employee high

Sydnee nightly — entry_flow audit 2026-06-08 — 0P0 3P1 2R

Sydnee Agent (AI) <[email protected]>
To: Kelvin Yan <[email protected]>
Monday Jun 8, 2026 · 4:25 AM PT · in [email protected]
AI verdict  employee high · confidence: high · by internal-exempt
“Sydnee Agent (AI): Sydnee nightly — entry_flow audit 2026-06-08 — 0P0 3P1 2R”
Reasoning: @sydnee.ai is a protected domain — hard exemption
Sydnee nightly — entry_flow audit — 2026-06-08 P0 findings: 0 P1 findings: 3 Risks: 2 - Area: Entry Flow (Monday theme) - Bugs found (P0 / P1): 0 / 3 (1 new, 2 carried) - Risks noted: 3 (1 new, 2 carried) Cross-check: `git log --oneline -30` and `docs/strategy_decisions.md` reviewed before filing. `docs/audit_2026-06-07_config_drift.md` + `docs/audit_2026-06-07_weekly.md` reviewed. Prior entry-flow audits (`audit_2026-05-18_entry_flow.md`, `audit_2026-05-25_entry_flow.md`) not present in the audit series (5/18 and 5/25 were different themes that included entry-flow items). Carried P1s verified still present in current code. --- Full report (dev branch): https://github.com/kanex1/sydnee.signals/blob/dev/docs/audit_2026-06-08_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-06-08 — ENTRY FLOW ## Summary - Area: Entry Flow (Monday theme) - Bugs found (P0 / P1): 0 / 3 (1 new, 2 carried) - Risks noted: 3 (1 new, 2 carried) Cross-check: `git log --oneline -30` and `docs/strategy_decisions.md` reviewed before filing. `docs/audit_2026-06-07_config_drift.md` + `docs/audit_2026-06-07_weekly.md` reviewed. Prior entry-flow audits (`audit_2026-05-18_entry_flow.md`, `audit_2026-05-25_entry_flow.md`) not present in the audit series (5/18 and 5/25 were different themes that included entry-flow items). Carried P1s verified still present in current code. --- ## Findings ### BUG [P1] (new): TV-BXt `_eval_tv_bxt_sym` lacks Friday 15:00 ET entry cutoff — new positions open after the "all entries blocked" window **File:** `bot.py:3964–4170` (`_eval_tv_bxt_sym`) **Evidence:** ```python # bot.py:4007-4013 — Friday EOD flat fires only when my_pos is NOT None: if my_pos is not None and price > 0: ... 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:4014-4170 — entry logic continues for my_pos is None (new position) with no Friday check sig = self._tv_bxt_signal(sym) # reads live Redis signal if sig == 0: return ... self._open_trade(sym, sig, ...) # FIRES even Friday 15:00–15:44 ET ``` CLAUDE.md: `Fri 12:00 PT (15:00 ET) onward | all entries blocked (weekend gap risk) | ALL triggers`. The standard `_evaluate_symbol` flow correctly blocks all new entries via `bot.py:5791`: `if now_et.weekday() == 4 and t_min >= 15 * 60: return`. TV-BXt bypasses `_evaluate_symbol` entirely and has NO equivalent Friday gate for new entries. **Concrete scenario (dev, TV_BXT_RTH_ONLY=true):** 1. TV webhook arrives 15:10 ET Friday (5m BXt cross, e.g. SNDK) 2. `_bxt1m_window` → `win = "active"` (9:45-15:45 ET window) 3. `my_pos = None` → Friday EOD flat check (requires `my_pos is not None`) skipped 4. `TV_BXT_RTH_ONLY=true`: `240 <= 910 < 960` → True → allowed 5. `_open_trade` fires → SNDK long position created at 15:10 ET Friday 6. Position closes at 15:45 ET via the EOD flat check (35 min later) **On prod (no TV_BXT_RTH_ONLY):** new entries can fire 15:00–15:44 ET (closed at 15:45 ET), and 16:15–19:44 ET (post-market "active" window; position gets force-closed on the very next tick since the 15:45 check fires immediately for `my_pos is not None`). **Impact:** Real-money SNDK + MU (live since 2026-05-01) can take new TV-BXt positions on Friday afternoon during a window explicitly designated "all entries blocked." The 15:45 EOD flat provides a safety net, but it depends on the bot surviving until 15:45 ET. A crash or restart between 15:10–15:44 ET leaves the position open with weekend gap risk. **Fix:** Add a Friday entry cutoff guard before the new-entry code path in `_eval_tv_bxt_sym`, immediately before `sig = self._tv_bxt_signal(sym)`: ```python # Mirror _evaluate_symbol:5791 — block all new TV-BXt entries Friday after 15:00 ET _now_gate = datetime.now(ET) if _now_gate.weekday() == 4 and (_now_gate.hour * 60 + _now_gate.minute) >= 15 * 60: if sig := self._tv_bxt_signal(sym): # if there's a pending signal, clear it self._tv_bxt_signal_clear(sym) return ``` (The signal clear is important so a Friday-afternoon webhook doesn't survive to fire at Monday 4:15 ET.) --- ### BUG [P1] (carried since 2026-05-24): `TV_BXT_MAX_AGE_SEC` documented but not implemented — stale signals persist through the flat window when no position is open **File:** `bot.py:3702–3716` (`_tv_bxt_signal`), `bot.py:3964–3970` (flat-window branch) **Evidence:** ```python # bot.py:3705 — docstring promises max-age check: """... Optionally ignore stale signals via TV_BXT_MAX_AGE_SEC.""" # bot.py:3710-3714 — actual implementation: no age check, no TTL, no expiry: v = r.get(f"tv_bxt_signal:{sym}") return 1 if v == "up" else (-1 if v == "down" else 0) # bot.py:3964-3970 — flat window only clears signal if a position is open: if win == "flat": if my_pos is not None: self._tv_close(...) self._tv_bxt_signal_clear(sym) ... return # ← if my_pos is None, signal is NOT cleared ``` `tv_bxt_signal:{sym}` Redis key has no TTL. A TV webhook arriving during the "flat" window with no open position (e.g. Friday 19:30 ET) persists in Redis and fires on Monday's first "active" tick (04:15 ET), up to 60+ hours stale. **Impact:** TV-BXt model (SNDK, MU — real money) can open a position at Monday 4:15 AM ET based on a signal set Friday evening, potentially in the opposite direction from the weekend gap. **Fix (two options — either sufficient):** 1. In the flat window, also clear the signal when there's no position: ```python if win == "flat": if my_pos is not None: self._tv_close(...) self._tv_bxt_signal_clear(sym) # always clear in flat window ... return ``` 2. Add TTL to the Redis SET in the webhook handler (`bot.py:~11832–11843`): `r.set(f"tv_bxt_signal:{sym}", ..., ex=50400)` — 14h TTL survives intraday reconnects but expires before Monday open. --- ### BUG [P1] (carried since 2026-05-17): `REVERSE_TIME_DECAY` uses `== "1"` — YAML-style `"true"` silently disables the morning size ramp **File:** `bot.py:6019` **Evidence:** ```python # bot.py:6019 — sole check for the flag: if os.environ.get("REVERSE_TIME_DECAY", "0") == "1" and _in_rth: ``` Every other boolean env flag in bot.py uses `.lower() in ("1", "true", "yes")`. `REVERSE_TIME_DECAY: "true"` in a docker-compose YAML silently has no effect; only `"1"` works. No log or diagnostic when disabled by misconfiguration. **Impact:** The morning size ramp (50%→100% from 10:00→13:00 ET, tuned from backtest showing 2× stronger midday edge) is silently off if the compose uses YAML boolean form. **Fix:** One-line: `if os.environ.get("REVERSE_TIME_DECAY", "").lower() in ("1", "true", "yes") and _in_rth:` --- ### RISK (new): TV-BXt `_eval_tv_bxt_sym` opens new entries during the opening 30-min block (9:30–10:00 ET) **File:** `bot.py:3971–3974`; `bot.py:4047–4067` **Evidence:** ```python # bot.py:3971-3974 — explicitly documents the design: # NOTE: TV-BXt does NOT honor "hold" windows (9:15-9:45 + 15:45-16:15 ET # session-transition gaps). User intent is "act on every TV webhook" # regardless of where it falls within the trading day. # bot.py:4061 — TV_BXT_RTH_ONLY gate allows 4:00 AM - 4:00 PM ET (includes 9:30-10:00 ET): _in_session = _now_et.weekday() < 5 and 240 <= _t_min < 960 ``` Standard flow blocks ALL triggers 9:30-10:00 ET (`in_open_30` at `bot.py:5765-5772`). TV-BXt explicitly exempts itself from the hold window per the design comment. This means a TV webhook arriving at 9:35 ET would create a new position during the opening 30-min block on both dev (TV_BXT_RTH_ONLY=true) and prod (no gate at all). **Impact:** Opening 30-min entries on SNDK/MU at high spread, thin book, wide intraday range. CLAUDE.md says "ALL triggers blocked" 9:30-10:00 ET but TV-BXt is intentionally exempt. No operational risk per the design comment; risk is fill quality and spread cost. **Recommendation:** Document in CLAUDE.md's Entry Time Blockers table that TV-BXt is exempt from the opening 30-min block (by design). Consider adding `TV_BXT_RTH_ONLY` window adjustment to `10:00-16:00 ET` (`600 <= _t_min < 960`) to align with standard flow's post-opening window. --- ### RISK (carried): `_check_pullback` overnight gap (3:50-4:00 ET) preserves pending pullbacks to fire after gap — stale-signal entry risk **File:** `bot.py:6606–6614` **Evidence:** ```python # bot.py:6611-6614 — explicit design decision (comment says "don't cancel"): if 3 * 60 + 50 <= _t_min < 4 * 60: # Overnight gap: don't cancel — let pending survive to fire # after the gap closes at 4:00 AM ET. return ``` A pullback queued at e.g. 3:47 ET (3 minutes before the overnight gap) has a 180s timeout (`PULLBACK_TIMEOUT_SEC = 180`). By 4:00 ET, elapsed = 780s > 180s → fires unconditionally on timeout via `trigger_type = "timeout (180s, no pullback)"`. The entry is based on market conditions from 3:47 ET — up to 13 minutes stale — with no re-validation of RV, spread, or regime at the fire-time. **Impact:** Off-hours pullback entries (BXt / RSI extreme if off-hours toggle is ON) can fire at 4:00 ET on conditions evaluated at 3:47 ET. 13 minutes is substantial in pre-market. **Recommendation:** At minimum, re-check RV and spread at fire-time (after the gap). Or add a stale-signal expiry: cancel pending pullbacks where `elapsed > PULLBACK_TIMEOUT_SEC + 600` (10-minute grace) at re-evaluation after gap close. --- ### OK (checked, working or recently fixed): - **Standard entry time gates — all correct:** overnight gap `3*60+50 <= t_min < 4*60` (bot.py:5764-5770), opening 30 min `9*60+30 <= t_min < 10*60` (5765-5772), close hour `15*60 <= t_min < 16*60` BXt/div blocked rsi_extreme exempt (5779-5781), Friday EOD all-triggers block `weekday()==4 and t_min>=15*60` (5791-5793), off-hours gate `not in_rth and trigger_type != "rsi_extreme"` (5794-5796). Order of gates is correct; Friday EOD fires after close-hour so rsi_extreme that passes close-hour gate is still blocked on Friday. ✓ - **Off-hours rsi_extreme toggle:** fail-closed (returns `False` when Redis unavailable, bot.py:10790-10809). RTH rsi_extreme unaffected by toggle. ✓ - **RVOL policy — fail-closed and direction-aware:** RV unavailable → block (bot.py:6249-6251); BXt/div/pullback floor 0.8× (6278-6280); rsi_extreme blowoff ceiling 5.0× using rv_10m (6296-6299); rsi_extreme exempt from 0.8× floor (correct — exhaustion setup). ✓ - **WS tick-RV gate:** mutually exclusive with REST gate; WS floor only fires when fresh (<5s) and baseline_p50 configured (bot.py:6261-6276). ✓ - **1m BXt bias gate for rsi_extreme (`_rsi_ext_pending_dir`):** auto-clears when RSI recovers above OS or below OB threshold (bot.py:5569-5573). Pending fires at 50% on second bar if 1m still against (5723-5724). ✓ - **Model lock in `_process_entry_candidates`:** correctly drops ALL original-model candidates when TV model is active. Pending pullback NOT created for dropped candidates (pullback creation at bot.py:6494 is inside the per-candidate loop, AFTER the model lock `continue` at 6163). TV symbols cannot accidentally get original-model positions via the pullback path. ✓ - **GUARD 1/2/3 in `_open_trade`:** prevents double-entry (open trade check, IBKR cache position check, ib.wrapper direct read — bot.py:7026-7060). ✓ - **Atomic swap in `_process_entry_candidates`:** tuple-RHS assignment is one bytecode (bot.py:6126). Race condition fixed 2026-04-28 (commit: audit P0). ✓ - **TV-BXt flat window force-closes existing positions:** `win == "flat"` path at bot.py:3964 correctly closes any open TV position and clears signal. ✓ - **`_bxt_active_syms()` correctly gates `_process_entry_candidates`:** when TV model is active for SNDK+MU, all original 5m BXt / rsi-div / rsi-extreme / pullback entries for ALL symbols are dropped via the single-model lock. This is intentional design. ✓ - **BXt zone gate:** `BXT_RSI_LONG_MAX=60` / `BXT_RSI_SHORT_MIN=40` defaults (bot.py:5902-5910) correctly block BXt entries with RSI already in the overbought/oversold zone. ✓ - **15m bias gate:** `BXT_USE_15M_BIAS` default "true" hard-blocks counter-trend BXt (bot.py:5931-5948); divergence/pullback get 50% reduce instead. rsi_extreme exempt. ✓ - **TV-BXt signal cleared on close-opposite and OBV-trail stop:** `_tv_bxt_signal_clear` called at bot.py:4005, 4010, 4066 (block), and 4139/4140 (flow-confirm abandoned). ✓ - **Friday EOD flat for TV-BXt (existing positions):** fires at 15:45 ET Friday for any open TV-BXt position (bot.py:4007-4013). Scale state also cleared. ✓ - **Sibling stopout gate:** `sibling_stopout_min` correctly compares `other_ss.last_stopout_time` across all symbols (bot.py:5880-5885). ✓