◆ kanex-ai
Loading… · 加载中
Sydnee Agent (AI) Apr 26 2:00 AM
[OBV backfill] RUNNING — 66% (1953/2940)
Sydnee Agent (AI): [OBV backfill] RUNNING — 66% (1953/2940)
employee high
Sydnee Agent (AI) Apr 26 1:08 AM
[OBV backfill] RUNNING — 58% (1720/2940)
Sydnee Agent (AI): [OBV backfill] RUNNING — 58% (1720/2940)
employee high
Zoho Store Notification Apr 26 1:04 AM
Zoho Campaigns - Your subscription is renewed
Zoho Store Notification: Zoho Campaigns - Your subscription is renewed
financial
Railway Apr 25 11:52 PM
Updates to Railway Terms and Policies
Railway platform updated terms of service and privacy policies.
vendor low
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)
vendor
Liangbo Li Apr 25 10:27 PM
Re: SP-HDPOC1X8
Liangbo Li: Re: SP-HDPOC1X8
employee high
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
vendor
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
vendor
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
vendor
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
vendor
Network Solutions Apr 25 9:06 PM
Action Required: Review WHOIS contact data
⚠ PHISHING: phishing subject pattern: 'Action Required' from external sender icloud.com
phishing urgent
Network Solutions Apr 25 9:05 PM
Action Required: Review WHOIS contact data
⚠ PHISHING: phishing subject pattern: 'Action Required' from external sender icloud.com
phishing urgent
ParkMobile Apr 25 8:23 PM
Reminder: A free gift from ParkMobile 🚙
ParkMobile: Reminder: A free gift from ParkMobile 🚙
personal
Sydnee Agent (AI) Apr 25 4:54 PM
[OBV calibration] backfill notification test
Sydnee Agent (AI): [OBV calibration] backfill notification test
employee high
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
financial
Primo Brands Delivery Apr 25 3:48 PM
Primo Brands™ reminder for Tuesday, April 28, 2026
Primo Brands delivery reminder for Tuesday, April 28.
vendor low
American Express Apr 25 12:50 PM
Important Notice: Your April 2026 Statement
American Express: Important Notice: Your April 2026 Statement
financial
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.
personal
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
employee high
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
employee high
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
employee high
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
employee high
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.
phishing urgent
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.
vendor
[email protected] Apr 24 6:50 PM
Re: Irving-Yan case: Meet and Confer letter and proposal for next steps.
(sent from kanex-ai)
sent
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
legal-divorce urgent
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
employee high
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.
employee high
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.
employee
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,
employee high
Reema Agarwal in Teams Apr 24 5:54 AM
Reema Agarwal sent a message
Reema Agarwal in Teams: Reema Agarwal sent a message
personal
Lance Cain Apr 24 5:41 AM
Re: Return Request
Customer return request pending account setup for week-old order.
vendor
Bank of America Apr 24 4:50 AM
Your available account balance is low
Bank of America: Your available account balance is low
financial
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
employee high
Zoho Payments Apr 24 3:42 AM
Invoice - 50101928705 from ZOHO Corporation.
Zoho subscription invoice for April 2026 payment received.
financial
[email protected] Apr 24 3:06 AM
Program Expiry
Trusted Traveler Program membership expiration notice and renewal reminder.
personal
[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.
financial high
[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.
vendor high
EmployerAccess Support Apr 24 2:44 AM
Your next automatic payment is tomorrow!
Anthem EmployerAccess automatic payment scheduled for tomorrow.
financial
[email protected] Apr 24 2:44 AM
Your QuickBooks Auto Payroll preview
QuickBooks payroll preview for KanexPro — verify $10,266.48 deduction.
financial high
[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.
vendor
Zoho Store Notification Apr 24 12:45 AM
Zoho Webinar - Your subscription is renewed
Zoho subscription renewal payment processed, $57 Professional plan.
financial
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
employee high
Microsoft Apr 23 7:46 PM
Your Microsoft invoice G154314584 is ready
Microsoft: Your Microsoft invoice G154314584 is ready
vendor
Beth K. Rautiola Apr 23 6:40 PM
Settlement
Beth K. Rautiola: Settlement
legal-loadkarma urgent
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
employee high
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
employee high
Houzz Partners Apr 23 4:31 PM
Meet your new favorite neutral
Houzz Partners: Meet your new favorite neutral
personal
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.
family high
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
financial

Sydnee nightly — persistence audit 2026-04-23 — 0P0 1P1 2R

Sydnee Agent (AI) <[email protected]>
To: Kelvin Yan <[email protected]>
Thursday Apr 23, 2026 · 4:25 AM PT · in [email protected]
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.