Sydnee Agent (AI)
Apr 26 2:00 AM
[OBV backfill] RUNNING — 66% (1953/2940)
Sydnee Agent (AI): [OBV backfill] RUNNING — 66% (1953/2940)
Sydnee Agent (AI)
Apr 26 1:08 AM
[OBV backfill] RUNNING — 58% (1720/2940)
Sydnee Agent (AI): [OBV backfill] RUNNING — 58% (1720/2940)
Zoho Store Notification
Apr 26 1:04 AM
Zoho Campaigns - Your subscription is renewed
Zoho Store Notification: Zoho Campaigns - Your subscription is renewed
Railway
Apr 25 11:52 PM
Updates to Railway Terms and Policies
Railway platform updated terms of service and privacy policies.
KanexPro Store (Shopify)
Apr 25 11:12 PM
Payout for Apr 26, 2026 (-$45.68 USD)
KanexPro Store (Shopify): Payout for Apr 26, 2026 (-$45.68 USD)
Liangbo Li
Apr 25 10:27 PM
Re: SP-HDPOC1X8
Liangbo Li: Re: SP-HDPOC1X8
GitHub
Apr 25 9:43 PM
[GitHub] A new public key was added to kanex1/sydnee.signals
GitHub: [GitHub] A new public key was added to kanex1/sydnee.signals
GitHub
Apr 25 9:43 PM
[GitHub] A new public key was added to kanex1/sydnee.signals
GitHub: [GitHub] A new public key was added to kanex1/sydnee.signals
GitHub
Apr 25 9:42 PM
[GitHub] A new public key was added to kanex1/sydnee.viewer
GitHub: [GitHub] A new public key was added to kanex1/sydnee.viewer
GitHub
Apr 25 9:41 PM
[GitHub] A new public key was added to kanex1/sydnee.bot.crypto
GitHub: [GitHub] A new public key was added to kanex1/sydnee.bot.cry
Network Solutions
Apr 25 9:06 PM
Action Required: Review WHOIS contact data
⚠ PHISHING: phishing subject pattern: 'Action Required' from external sender icloud.com
Network Solutions
Apr 25 9:05 PM
Action Required: Review WHOIS contact data
⚠ PHISHING: phishing subject pattern: 'Action Required' from external sender icloud.com
ParkMobile
Apr 25 8:23 PM
Reminder: A free gift from ParkMobile 🚙
ParkMobile: Reminder: A free gift from ParkMobile 🚙
Sydnee Agent (AI)
Apr 25 4:54 PM
[OBV calibration] backfill notification test
Sydnee Agent (AI): [OBV calibration] backfill notification test
Bank of America
Apr 25 4:06 PM
Your Account Notices Are Now Available in Mobile and Online Banking
Bank of America: Your Account Notices Are Now Available in Mobile and Online
Primo Brands Delivery
Apr 25 3:48 PM
Primo Brands™ reminder for Tuesday, April 28, 2026
Primo Brands delivery reminder for Tuesday, April 28.
American Express
Apr 25 12:50 PM
Important Notice: Your April 2026 Statement
American Express: Important Notice: Your April 2026 Statement
eBay
Apr 25 10:11 AM
Looking for the right auto parts? Say hey to My Garage.
eBay: Looking for the right auto parts? Say hey to My Garage.
Sydnee Agent (AI)
Apr 25 8:45 AM
RE: Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1 2R
Sydnee Agent (AI): RE: Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1
Kanex Ai1
Apr 25 8:36 AM
RE: Commercial Claim Discovery Documents Our file:D-8222 Debtor: VICTORIA ROPA ELEGANTE
Kanex Ai1: RE: Commercial Claim Discovery Documents Our file:D-8222 Deb
Sydnee Agent (AI)
Apr 25 8:35 AM
RE: Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1 2R
Sydnee Agent (AI): RE: Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1
Sydnee Agent (AI)
Apr 25 4:30 AM
Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1 2R
Sydnee Agent (AI): Sydnee nightly — performance audit 2026-04-25 — 0P0 2P1 2R
EmployerAccess Support
Apr 25 4:10 AM
Oh no! Your payment didn't go through.
Fake payment failure notice impersonating Anthem EmployerAccess; credential theft attempt.
Katherine_Cheng
Apr 24 7:18 PM
回覆: would like to buy your product: NetworkAV™ H.264,
LiteMax inquires about NetworkAV H.264 receiver specs and pricing for integration.
[email protected]
Apr 24 6:50 PM
Re: Irving-Yan case: Meet and Confer letter and proposal for next steps.
(sent from kanex-ai)
Denise Heinz
Apr 24 5:36 PM
Re: Irving-Yan case: Meet and Confer letter and proposal for next steps.
Denise Heinz: Re: Irving-Yan case: Meet and Confer letter and proposal for
Sydnee Agent (AI)
Apr 24 5:30 PM
Sydnee algo daily — dev $-1,460 · prod $+0 · 6d window
Sydnee Agent (AI): Sydnee algo daily — dev $-1,460 · prod $+0 · 6d window
TChristina Knudsen
Apr 24 1:01 PM
[Teams meeting] Inventory/Shipping Team Weekly
Inventory/Shipping team requests meeting on backorder status for Micro Center, B&H.
Baptiste Marmorat
Apr 24 11:11 AM
RE: would like to buy your product: NetworkAV™ H.264,
Export rep Baptiste confirming NetworkAV product interest from Katherine Cheng.
Aarti Gupta
Apr 24 10:28 AM
would like to buy your product: NetworkAV™ H.264,
Aarti Gupta: would like to buy your product: NetworkAV™ H.264,
Reema Agarwal in Teams
Apr 24 5:54 AM
Reema Agarwal sent a message
Reema Agarwal in Teams: Reema Agarwal sent a message
Lance Cain
Apr 24 5:41 AM
Re: Return Request
Customer return request pending account setup for week-old order.
Bank of America
Apr 24 4:50 AM
Your available account balance is low
Bank of America: Your available account balance is low
Sydnee Agent (AI)
Apr 24 4:15 AM
Sydnee nightly — execution audit 2026-04-24 — 1P0 1P1 2R
Sydnee Agent (AI): Sydnee nightly — execution audit 2026-04-24 — 1P0 1P1 2R
Zoho Payments
Apr 24 3:42 AM
Invoice - 50101928705 from ZOHO Corporation.
Zoho subscription invoice for April 2026 payment received.
[email protected]
Apr 24 3:06 AM
Program Expiry
Trusted Traveler Program membership expiration notice and renewal reminder.
[email protected]
Apr 24 3:01 AM
Re: Re: Kanexpro outstanding payment-need to pay for Thailand shipments
Vendor invoice for Thailand shipments totaling $8,879 with updated PI.
[email protected]
Apr 24 2:54 AM
Re: Re: Kanexpro outstanding payment-need to pay for Thailand shipments
Pay two Thailand shipment invoices ($8,879 total) by Friday to release second shipment.
EmployerAccess Support
Apr 24 2:44 AM
Your next automatic payment is tomorrow!
Anthem EmployerAccess automatic payment scheduled for tomorrow.
[email protected]
Apr 24 2:44 AM
Your QuickBooks Auto Payroll preview
QuickBooks payroll preview for KanexPro — verify $10,266.48 deduction.
[email protected]
Apr 24 1:08 AM
Re: Re: Need PO for Thailand order
HDCVT vendor shares Google Drive folder link for Thailand order PO.
Zoho Store Notification
Apr 24 12:45 AM
Zoho Webinar - Your subscription is renewed
Zoho subscription renewal payment processed, $57 Professional plan.
Harsh Tiwari
Apr 23 11:59 PM
Re: InfoComm India 2026 – Booth TE15 (Jasmine Hall 1) | Approval Required
Harsh Tiwari: Re: InfoComm India 2026 – Booth TE15 (Jasmine Hall 1) | Appr
Microsoft
Apr 23 7:46 PM
Your Microsoft invoice G154314584 is ready
Microsoft: Your Microsoft invoice G154314584 is ready
Beth K. Rautiola
Apr 23 6:40 PM
Settlement
Beth K. Rautiola: Settlement
KanexPro Store
Apr 23 5:58 PM
[KanexPro Store] Order #1211 placed by Nicholas Gibbs
KanexPro Store: [KanexPro Store] Order #1211 placed by Nicholas Gibbs
Sydnee Agent (AI)
Apr 23 5:30 PM
Sydnee algo daily — dev $-1,532 · prod $+0 · 6d window
Sydnee Agent (AI): Sydnee algo daily — dev $-1,532 · prod $+0 · 6d window
Houzz Partners
Apr 23 4:31 PM
Meet your new favorite neutral
Houzz Partners: Meet your new favorite neutral
Rachael Skoug
Apr 23 4:21 PM
Excited for Open House Tonight! Wax Museum: The Power of One!
School open house tonight at 5:55 PM; student should wear costume and bring iPad.
Bank of America
Apr 23 4:11 PM
Your Account Notices Are Now Available in Mobile and Online Banking
Bank of America: Your Account Notices Are Now Available in Mobile and Online
Sydnee nightly — persistence audit 2026-04-23 — 0P0 1P1 2R
AI verdict
employee
high
· confidence: high
· by internal-exempt
“Sydnee Agent (AI): Sydnee nightly — persistence audit 2026-04-23 — 0P0 1P1 2R”
Reasoning: @sydnee.ai is a protected domain — hard exemption
Sydnee nightly — persistence audit — 2026-04-23
P0 findings: 0 P1 findings: 1 Risks: 2
- Area: Persistence
- Bugs found (P0 / P1): 0 / 1
- Risks noted: 2
---
Full report (dev branch): https://github.com/kanex1/sydnee.signals/blob/dev/docs/audit_2026-04-23_persistence.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-04-23 — PERSISTENCE
## Summary
- Area: Persistence
- Bugs found (P0 / P1): 0 / 1
- Risks noted: 2
---
## Findings
### BUG [P1]: `_last_ah_trim_time` not persisted — AH trim cooldown bypassed on restart
**File:** `bot.py:2958, 2978`
**Evidence:**
The EOD trim correctly persists its cooldown timestamp and restores it on startup:
```python
# Fire site (bot.py:2909)
self._update_trade_field(t.trade_id, last_eod_trim_time=int(_now_ts), eod_trimmed=True)
# Load site (bot.py:906)
if row.get("last_eod_trim_time") is not None:
t._last_eod_trim_time = float(row["last_eod_trim_time"])
```
The AH trim block (7 PM–8 PM ET, lines 2952–3005) sets its equivalent in-memory only:
```python
t._last_ah_trim_time = _now_ts # line 2978 — NO _update_trade_field call
```
No `last_ah_trim_time` column exists in `core/schema.sql` or `ensure_trade_state_columns()`. On
restart during the AH window, `getattr(t, '_last_ah_trim_time', 0)` returns 0, so the cooldown
check (`_now_ts - 0 < 600`) is False → cooldown bypassed → AH trim fires immediately.
Unlike `_eod_trim_count` (which has a lazy DB query fallback at bot.py:2876–2883), `_last_ah_trim_time`
has no fallback mechanism at all.
**Impact:** A bot restart during Friday 7 PM–8 PM ET fires an extra ~25% AH trim in under
10 minutes. Two restarts could trim 50% of remaining shares in the first 10 minutes (vs. the
intended one trim per 10 min). No short-position risk (partial trim only), but accelerated
position reduction beyond the intended pacing.
**Fix:**
```python
# After bot.py:2978, add:
self._update_trade_field(t.trade_id, last_ah_trim_time=int(_now_ts))
```
Add `last_ah_trim_time BIGINT` to `core/schema.sql` (alongside `last_eod_trim_time`) and to
`ensure_trade_state_columns()`. Restore in `_load_trades_from_db` analogous to `last_eod_trim_time`
(bot.py:906–907).
---
### RISK: FLAT_EXIT leaves 0-share zombie parent open until reconcile
**File:** `bot.py:3599, 3632–3633`
**Evidence:**
When `FLAT_EXIT=true`, trim1 sells 100% of shares via a child trade:
```python
trim_shares = t.shares if _flat_exit else t.shares // 2 # line 3599 — 100%
...
remaining = t.shares - trim_shares # = 0
self._update_trade_field(t.trade_id, shares=0) # line 3633
```
The parent trade remains open in the DB (`exit_price IS NULL`). The child (all shares) is closed
via the trim path in `_close_trade`, which does not close the parent. On every subsequent 5-minute
bar the exit loop evaluates the parent with `t.shares=0`. If the stop fires:
- `_close_trade(t, ...)` → `MarketOrder(SELL, 0)` → IBKR rejects (invalid quantity)
- Rejection on every bar until the reconcile loop (lines 2063–2053) detects IBKR qty=0 and closes
the parent in the DB — typically within one reconcile cycle (~5 min)
**Impact:** Nuisance: rejected 0-share SELL orders appear in logs for up to ~5 min after any
FLAT_EXIT. No financial harm (IBKR will not execute a 0-share order). Reconcile correctly closes
the zombie once it runs. Risk surfaces only when `FLAT_EXIT=true` (currently enabled on dev).
**Fix (minimal):** At the trim1 fire site, when `remaining <= 0`, queue a full close for the
parent instead of leaving it open:
```python
remaining = t.shares - trim_shares
self._update_trade_field(t.trade_id, shares=remaining)
if remaining <= 0:
# All shares sold via child — close parent immediately
self._deferred_closes.append((t, f"FLAT_EXIT complete: all {t.shares}sh trimmed"))
```
Or add a guard at the top of the exit loop: `if t.shares <= 0: skip exit evaluation`.
---
### RISK: `_fri_ah_close_queued` not persisted — restart during AH flat can double-queue
**File:** `bot.py:2994–3000`
**Evidence:**
```python
if getattr(t, '_fri_ah_close_queued', False):
continue # dedup guard — in-memory only, NOT persisted
t._fri_ah_close_queued = True
self._deferred_closes.append((t, f"Friday AH FLAT: closing {t.shares}sh ..."))
```
If the bot restarts after 7:50 PM ET but before the flat order fills, the flag resets to False and
the flat close is re-queued. Two close orders are sent to IBKR. The second is caught by the
`is_open` guard in `_close_trade` (bot.py:5574) once the first fill closes the trade in memory.
**Impact:** Low. The second close is a no-op (guard catches it). A duplicate SELL may reach IBKR
for the brief window between the second queue and the first fill's `is_open` state update, but the
duplicate is structurally harmless — a rejection or a zero-fill if position already closed.
Theoretical: requires a restart in the ≤30-second fill window on Friday after 7:50 PM ET.
**Fix:** Add `fri_ah_close_queued BOOLEAN DEFAULT FALSE` to schema and
`ensure_trade_state_columns()`; persist via `_update_trade_field(t.trade_id, fri_ah_close_queued=True)`;
restore in `_load_trades_from_db`.
---
## OK (checked, working or recently fixed)
**Recently fixed since 2026-04-16 persistence audit:**
- `ensure_trade_state_columns()` missing classification columns — **FIXED**: `trigger_type`,
`trigger_direction`, `rsi_at_entry`, `bias_15m`, `bias_15m_rsi`, `sentiment_agrees`, `size_pct`,
`regime_at_entry`, `signal_price`, `signal_time` all added to the idempotent ALTER TABLE migration
(database.py:204–215). ✓
- `_eod_trim2`/`_eod_trim3` suffix-strip ordering — **FIXED**: EOD variants (`_eod_trim3`,
`_eod_trim2`, `_eod_trim`) now checked before `_trim3`/`_trim2`/`_trim` in the suffix loop
(bot.py:5730). ✓
**Working correctly:**
- `_trimmed` / `_trimmed_2` / `_trimmed_3` — persisted at fire site via `_update_trade_field`;
restored from `row["trimmed_1/2/3"]` in `_load_trades_from_db`. ✓
- `_obv_be_applied` — persisted via `_update_trade_field(obv_be_applied=True)` at
bot.py:3209/3211; restored at bot.py:897. ✓
- `_extreme_since_trim` — persisted every bar it updates (bot.py:3656/3665); restored at
bot.py:902. ✓
- `_last_eod_trim_time` — persisted immediately at EOD trim fire (bot.py:2909); restored at
bot.py:906. ✓
- `_eod_trim_count` — lazy: `None` on restore → rebuilt via DB child trade count query
(bot.py:2876–2883). Intentional design, confirmed. ✓
- `_pending_reversal` — persisted at all set/clear sites; restored on load. ✓
- `_rsi_force_trim` / `_rsi_force_trim2` — persisted via `force_trim_pending`/`force_trim2_pending`
columns; restored on load. ✓
- `_force_trim_reason` — persisted alongside force-trim flags; restored on load. ✓
- `_trim_price` / `_trim2_price` — derived from `trim1_price`/`trim2_price` (persisted at INSERT);
restored at bot.py:921–924. ✓
- `_close_order_kwargs` — ephemeral by design; user resubmits limit-close after restart. ✓
- AH trim `_ah_trim_count` starting at 0 after restart — suffix collision
(`_ah_trim1` already in DB) → `ON CONFLICT DO NOTHING` prevents duplicate DB rows; `is_open`
guard blocks duplicate IBKR orders if trade already closed. Net: no financial harm from
count reset. ✓
- `exit_reason` two-step write — `close_trade()` writes blank `""` then `update_trade(exit_reason=reason)`
fills it (bot.py:5778). Small race window if process killed between the two DB calls, but
`exit_reason` is analytics-only; no trade logic reads it. ✓
**Carried from prior audits — unfixed, no change since last report:**
- `vix_at_entry`/`vix_at_exit` not in schema (no DB columns) — RISK filed 2026-04-16.
Analytics-only; not blocking go-live.
- `position_size_pct` always 100.0 (parallel `size_pct` INT column holds the real value) — RISK
filed 2026-04-16.
- `_setup_mode` not persisted — RISK filed 2026-04-16. Push-notification cosmetic only.
- `signal_price`/`signal_time` not restored in `_load_trades_from_db` (Trade constructor call at
bot.py:871–883 omits these fields despite DB having the columns) — P1 filed 2026-04-17
execution audit. Slippage analytics only; no exit logic depends on in-memory value.