◆ 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 — EXECUTION_QUALITY audit 2026-08-07 — 0P0 10P1 2R

Sydnee Agent (AI) <[email protected]>
To: Kelvin Yan <[email protected]>
Friday Aug 7, 2026 · 4:15 AM PT · in [email protected]
AI verdict  employee high · confidence: high · by internal-exempt
“Sydnee Agent (AI): Sydnee nightly — EXECUTION_QUALITY audit 2026-08-07 — 0P0 10”
Reasoning: @sydnee.ai is a protected domain — hard exemption
Sydnee nightly — EXECUTION_QUALITY audit — 2026-08-07 P0 findings: 0 P1 findings: 10 Risks: 2 - Area: Execution Quality (Friday theme) - Branch: `dev` (01b7a0f — docs(peak-monitor): hourly log 2026-08-06 13:09 PT) - Files scanned: `bot.py` (24,173 lines), `core/executor.py`, `docs/audit_2026-08-01_EXECUTION_QUALITY.md`, `git log --oneline -30` - **Bugs found (P0 / P1): 0 / 10 (1 new + 9 carried from 2026-08-01)** - **Risks noted: 2 (both carried from 2026-08-01)** **Cross-check:** `git log --oneline -30` shows zero commits to `bot.py`, `core/`, or any strategy/core file since 2026-07-17 (all subsequent commits are audit docs + peak-monitor hourly logs). All 9 P1 bugs and 2 risks from the 2026-08-01 EXECUTION QUALITY audit are re-verified at current line numbers — all present and unchanged. One new P1 found this session in the `Cancelled/Inactive` retry path. --- Full report (dev branch): https://github.com/kanex1/sydnee.signals/blob/dev/docs/audit_2026-08-07_EXECUTION_QUALITY.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-07 — EXECUTION QUALITY ## Summary - Area: Execution Quality (Friday theme) - Branch: `dev` (01b7a0f — docs(peak-monitor): hourly log 2026-08-06 13:09 PT) - Files scanned: `bot.py` (24,173 lines), `core/executor.py`, `docs/audit_2026-08-01_EXECUTION_QUALITY.md`, `git log --oneline -30` - **Bugs found (P0 / P1): 0 / 10 (1 new + 9 carried from 2026-08-01)** - **Risks noted: 2 (both carried from 2026-08-01)** **Cross-check:** `git log --oneline -30` shows zero commits to `bot.py`, `core/`, or any strategy/core file since 2026-07-17 (all subsequent commits are audit docs + peak-monitor hourly logs). All 9 P1 bugs and 2 risks from the 2026-08-01 EXECUTION QUALITY audit are re-verified at current line numbers — all present and unchanged. One new P1 found this session in the `Cancelled/Inactive` retry path. --- ## Findings ### BUG [P1] (NEW 2026-08-07): `Cancelled/Inactive` retry in `_execution_qa` missing `start_time` reset — retry order killed by timeout after ≤6 seconds **File:** `bot.py:7984` (missing `start_time = time.time()` before `continue`) **Evidence:** ```python # bot.py:7966–7985 — Cancelled/Inactive retry path if status in ("Cancelled", "Inactive"): ... if not retried: retried = True ... exec_trade = self._place_order_with_overnight_fallback(_ct2, order2, ss.contract) oid = exec_trade.order.orderId self._active_order_ids.add(oid) continue # ← no start_time = time.time() before this # bot.py:8031-8034 — PreSubmitted MKT→LMT path (correctly resets): # "Reset budget so the retry order gets its own MAX_WAIT window — # otherwise a slow placeOrder can chew through the original budget # and the next loop iteration immediately kills the new order." start_time = time.time() # bot.py:8047-8050 — 30s timeout path (correctly resets): # (same comment, same fix) start_time = time.time() ``` The `Cancelled/Inactive` retry path places a new order via `_place_order_with_overnight_fallback` but does NOT reset `start_time`. The two other retry paths (PreSubmitted at line 8034, 30s timeout at line 8050) both explicitly reset `start_time` with identical comments explaining the race. The Cancelled path has the same `_place_order_with_overnight_fallback` call that can be slow, but no budget reset. Worst case: an IOC entry cancelled by IBKR at t=113s (e.g., pre-market thin book) → `_place_order_with_overnight_fallback` consumes 2–3s → `continue` fires at t≈116s → while check passes (116 < 120) → `self.ib.sleep(3)` → loop exits at t=119s → `self.ib.cancelOrder` kills the retry order. The retry order may have received a fill in those 3s that goes undetected, creating an orphaned IBKR position. **Impact:** Retry order for `Cancelled`/`Inactive` entries gets ≤6 seconds of fill monitoring instead of a full 120s window. On active market hours when IBKR sends rapid cancels (IOC on low-liquidity names), the retry is guaranteed to be killed. Entry is silently dropped with a misleading "EXEC QA: TIMEOUT 120s, killing order" log (which references MAX_WAIT, not the exhausted-budget root cause). **Fix:** Add `start_time = time.time()` at `bot.py:7985`, after `self._active_order_ids.add(oid)` and before `continue`: ```python self._active_order_ids.add(oid) # Reset budget so the retry order gets its own MAX_WAIT window — # otherwise a slow placeOrder can chew through the original budget # and the next loop iteration immediately kills the new order. start_time = time.time() continue ``` --- ### BUG [P1] (carried from 2026-07-10 / 2026-08-01): `OBV LOSS EXIT` fires on profitable trades below cushion threshold **File:** `bot.py:5113–5128` **Evidence:** ```python _min_cushion = max(float(t.entry_price) * _cushion_pct, atr_val * 0.25) if _profit_guard and profit_per_share < _min_cushion: # ← always positive if _loss_exit: hit = True reason = (f"OBV rule F against {_dir_lbl_ex} at loss after ...") self._log_activity(sym, "OBV LOSS EXIT: ... at loss ...", "trade") # ← log wrong ``` Guard is `< _min_cushion` (always > 0, e.g. $0.75/sh on $100 stock with $3 ATR). Profitable trades with small gain below cushion are force-exited at market with a misleading "at loss" log entry. **Impact:** On dev (`OBV_LOSS_EXIT=true`): winners held past 5 bars with a small favourable move are ejected before profit target. Prod safe (flag default off). **Fix:** ```python if _loss_exit and profit_per_share < 0: hit = True ... ``` --- ### BUG [P1] (carried since 2026-07-04): `risk.state.trade_count` not restored from DB on restart — `max_daily_trades` global cap bypassed **File:** `core/risk.py:118`, `bot.py:23458–23460` **Evidence:** ```python # bot.py:23458-23460 — startup only calls set_open_positions(): open_count = len(self.open_trades()) if open_count > 0: self.risk.set_open_positions(open_count) # trade_count stays 0 ``` `risk.state.trade_count` remains 0 after every restart. Each mid-day restart resets the global trade cap. `RSI_TICK_FIRE` can re-fire up to `max_daily_trades` additional times after each restart. **Fix:** In startup, query `self.db.get_today_trades()` and restore `trade_count` from the result count. --- ### BUG [P1] (carried since 2026-07-03): `_execution_qa` IndexError when `"Filled"` arrives before fill detail — orphaned IBKR position **File:** `bot.py:7946–7951` **Evidence:** ```python if status == "Filled" or (exec_trade.fills and filled > 0): fp = float(exec_trade.orderStatus.avgFillPrice or 0) or \ float(exec_trade.fills[0].execution.price) # ^^^ IndexError if exec_trade.fills == [] and avgFillPrice == 0 ``` When IBKR fires `"Filled"` before `execDetails` populates `fills`, `fills[0]` raises `IndexError`. No `Trade` record is created → orphaned IBKR position not tracked in DB. **Fix:** ```python fp = float(exec_trade.orderStatus.avgFillPrice or 0) if not fp: if exec_trade.fills: fp = float(exec_trade.fills[0].execution.price) else: continue # fills not yet populated — wait one more poll ``` --- ### BUG [P1] (carried since 2026-07-03): `broker_executions.timestamp_sent` always equals `timestamp_filled` — order-to-fill latency unmeasurable **File:** `bot.py:7898–7909` **Evidence:** ```python ts_filled = _dt.datetime.now(_dt.timezone.utc) # ← captured at fill-detect time ... VALUES (%s,%s,...,%s,%s) (... ts_filled, ts_filled)) # ← both columns = post-fill now() ``` `start_time` (captured at line 7933) is never threaded into `_persist_broker_execution`. `timestamp_filled − timestamp_sent` is always 0 ms for every row. **Fix:** Thread `start_time` into `_persist_broker_execution`: ```python ts_sent = _dt.datetime.fromtimestamp(order_start_time, tz=_dt.timezone.utc) ts_filled = _dt.datetime.now(_dt.timezone.utc) VALUES (... ts_sent, ts_filled) ``` --- ### BUG [P1] (carried since 2026-07-03): `signals.tempo` uses P&L/share as execution-quality proxy — actual slippage never queried **File:** `bot.py:11147–11148` **Evidence:** ```python per_share = t.pnl / t.shares if t.shares > 0 else 0 # ← P&L/share, not slippage slippages.append(per_share) # ← variable name misleading ``` `broker_executions.slippage` is never read by `_tempo_daily_analysis`. Hourly breakdown reflects trade profitability, not execution degradation. Bad fills are invisible in the tempo output. **Fix:** In `_tempo_daily_analysis`, join `broker_executions` on `symbol + timestamp_filled` grouped by hour; report `avg(slippage)` separately. --- ### BUG [P1] (carried since 2026-06-12): `config_syms` NameError in `_exec_qa_patrol` — position mismatch check never runs **File:** `bot.py:8333` **Evidence:** ```python # bot.py:8272: watchlist_syms = set(self.symbols) ← defined here # bot.py:8333: if ib_qty != bot_qty and sym in config_syms: # ← NameError: config_syms undefined ``` `watchlist_syms` is defined at `bot.py:8272`; `config_syms` is undefined. The `except Exception: pass` at `bot.py:8336` silently swallows the `NameError` every patrol cycle. IBKR/bot position mismatches are never detected. **Fix:** `bot.py:8333` — replace `config_syms` with `watchlist_syms`. --- ### BUG [P1] (carried since 2026-06-12): `_execution_qa` 30s MKT fallback outside RTH cancels valid resting LMT, places rejected MKT, silently drops entry **File:** `bot.py:8037–8044` **Evidence:** ```python if elapsed > RETRY_AT and not retried and not is_manual: # RETRY_AT=30, no RTH guard retried = True self.ib.cancelOrder(exec_trade.order) # ← cancels valid resting off-hours LMT ... order2 = MarketOrder(action, shares) # ← IBKR rejects MKT outside RTH ``` No RTH guard. Off-hours resting LMT cancelled after 30s and replaced with a GTC-wrapped MKT that IBKR rejects. `retried=True` → next rejection → entry silently dropped. **Fix:** Add RTH check at `bot.py:8037`: ```python if elapsed > RETRY_AT and not retried and not is_manual and in_rth: ``` Outside RTH, refresh the aggressive limit price and re-place a new LMT instead. --- ### BUG [P1] (carried since 2026-06-12): `RSI_TICK_FIRE` window ends at 780 (13:00 ET) — three peak RTH hours cut **File:** `bot.py:22189` **Evidence:** ```python if not (570 <= t_min < 780) or now_et.weekday() >= 5: # 780 = 13:00 ET, RTH = 960 ``` RTH closes at 960 (16:00 ET). `rsi_extreme` entries and tick-fire state machine are blocked 13:00–16:00 ET. The 13:00 ET bucket yielded +0.534% avg / 67.2% WR in the 2026-05-19 backtest. **Fix:** `bot.py:22189` — change `780` → `960`: ```python if not (570 <= t_min < 960) or now_et.weekday() >= 5: ``` --- ### BUG [P1] (carried since 2026-06-19): `_tape_last_loss_ms` in-memory only — TAPE loss cooldown resets on every bot restart **File:** `bot.py:21312–21314` (write), `bot.py:21706–21708` (read) **Evidence:** ```python # bot.py:21312-21314 — write on stop hit self._tape_last_loss_ms[sym] = now_ms # ← dict in memory, no Redis write # bot.py:21706-21708 — gate at entry _last_loss = self._tape_last_loss_ms.get(sym, 0) # ← always 0 after restart ``` `TAPE_LOSS_COOLDOWN_MIN` gate resets on every container restart (6+ per day on dev). Back-to-back stop pattern can recur across any restart between the two stops. **Fix:** Write `tape:loss_cooldown_ms:{sym}` to Redis on stop hit (TTL = `TAPE_LOSS_COOLDOWN_MIN × 60`); restore from Redis on cold cache. --- ## Risks ### RISK (carried since 2026-07-03): `broker_executions.slippage` measures fill vs retry-order limit — not signal-to-fill slippage **File:** `bot.py:7896` ```python slippage = round((fill_price - req_px) * direction, 4) if (req_px > 0 and fill_price > 0) else 0.0 ``` For MKT retry orders (`lmtPrice=0`), slippage records as `0.0`. True signal-to-fill slippage requires joining `broker_executions` with `trades.signal_price`. Understates execution degradation on retried fills. --- ### RISK (carried since 2026-07-03): `_active_order_ids` retains cancelled order ID after retry — set grows without bound **File:** `bot.py:7937` (add), `bot.py:8082` (discard only final `oid`) On retry, `oid` is reassigned to the new order's ID. The `finally` block discards only the current `oid`; the original cancelled order's ID remains in `_active_order_ids` indefinitely. No functional consequence (`_exec_qa_patrol` guards against stale by age); set grows by ~5–10 entries per active trading day. **Fix:** `self._active_order_ids.discard(original_oid)` before reassigning `oid` to the retry order. --- ## OK (checked, working or recently fixed) - **No new commits since 2026-08-01 execution audit:** Only peak-monitor docs appear in `git log --oneline -30`. All findings above are unambiguously unaddressed. ✓ - **`core/executor.py` `place_limit` RTH gap:** `OrderExecutor` only instantiated for the AB strategy (dev paper only) — not the main entry path. Acceptable scope. ✓ - **IOC partial fill handling:** `bot.py:7946` — `(exec_trade.fills an