🔭 Nancy Watchtower

Last update: 2026-04-25 01:58:46Z · auto-refresh every 20s · slug: watchtower-ozy0pe5nmtc8i…
Build: spark-e8e1 · ad95880 · /home/spark3/YYY
Data: umbrella logs/nancy_umbrella_train_merged_m22.json · holdings logs/paper_holdings.json · outcomes: logs trade_outcomes glob
$+20.50
All-lane book — Realized $+20.50 across 2 close events · Unrealized $+0.00 across 0 open (from paper_holdings × snapshot prices)
Per-lane realized (from entry_projected_profit_pct on each close): L1 (ST ~3.5–7%): $+0.00 / 0 · ST soft (≤3.5%): $+20.50 / 2 · Paper L2 / MT (≥7% or boost/legacy): $+0.00 / 0 · other (gap): $+0.00
$20$56

PAPER · LIVE   Lane 1 — ST Gate-Passed Ranker

LANE 1 · ST Short-term velocity train (NANCY_STRATEGY=train) — scoped PnL & stats Runtime 00:00:00
$+0.00
Realized $+0.00 across 0 L1 closes · Unrealized $+0.00 across 0 L1 open · Rate/hr $+0.00/hr
0%Win rate
Profit factor
$+0.00Avg / trade
$+0.0Avg win
$+0.0Avg loss
0%LONGS WR
0%SHORTS WR
0Win streak
0Loss streak

$+0
Best

$+0
Worst
25 / 0Gate / ranked
403Near-miss
3640 DRIFTEnv drift
paper_holdings.json (L1) · nancy_train_velocity_ranked_last.json · nancy_umbrella_train_merged_m22.json · Tier A1 drift detector / Tier B6 near-miss JSONL wired. Runtime counter reads paper_chart_session_start.txt.

Train L1: projected profit ~3.5–7% at entry. Routing to paper is determined by nancy_umbrella_train_merged_m22.json + the paper executor on this host. Entries: composite gate (velocity × conviction × path_efficiency × fractal_alignment). Exits: AI peak, FSM, profit lock, stale non-performer, etc. Open rows below are split by the same projected_profit_pct rule as the log.

Lifetime KPIs

Lane 1 equity curve

(no Lane 1 curve — no L1 closes and no Lane 1 open marks)

Per-close-reason capture (higher = better)

ReasonnCapture %

Top Lane 1 symbols by $

SymbolnTotal $

Open Lane 1 positions (0) · unreal $+0.00

SymSideBaseMultBase Trade%$ unrealProjAge
No Lane 1 positions open

Live Lane 1 candidates (gate_passed=25)

SymSignalProjBuy scorep_up
OPNUSDTLONG10.6515%62.91.0
FLOCKUSDTLONG8.9159%47.51.0
UMAUSDTLONG8.1566%44.21.0
1000RATSUSDTLONG11.3086%38.30.0
INUSDTLONG10.8434%37.00.0
MEUSDTLONG6.4516%36.61.0
2ZUSDTLONG6.4295%36.51.0
AVNTUSDTLONG6.3957%36.41.0
HOTUSDTLONG5.4176%31.91.0
API3USDTLONG5.1924%30.81.0

Lane 1 trade history (most recent first)

TimeSymSide$%PeakCapHoldReason
No trades in archive

PAPER · LIVE   Lane 2 — MT Hunter · 24h-move scanner

Lane 2 is the medium-term book: holdings and closes bucketed by projected_profit_pct7% (MT Hunter–shaped entries) or legacy outcome labels AI_boost / MT_legacy. Signal path: MODULE/nancy/mt_hunter.py → umbrella merge → executor MT-prefer. Env: NANCY_MT_HUNTER_ENABLED / NANCY_MT_HUNTER_SHADOW_ENABLED. Override bucket floor with NANCY_WATCHTOWER_MT_MIN_PROJ_PCT. Warming up = symbols on the current MT scan list not yet open in paper_holdings. Uniq sim $ on audit picks uses latest (sym,side) ×50 per 1% move; raw stress $ sums every audit line (non-additive).

Lane 2 equity curve (MT bucket)

(no Paper Lane 2 curve — no MT-bucket closes and no MT open marks)

MT Hunter — scanner health

OFFUmbrella merge
0Picks this tick
0Audit rows
0Uniq (sym,side)
$+0Uniq sim $
0Uniq sim n
0/0Sim W/L
Sim WR
$+0Raw stress $
0/10Grad 10+ uniq

Current portfolio · Lane 2 (open)

Live rows from logs/paper_holdings.json × snapshot marks, tagged MT (proj ≥7% at entry on this page). Total open: 0 · combined unreal $+0.00.

Open — LONG (0) · unreal $+0.00

SymSideEntryCurrent%$ unrealProjAge
No open LONG in MT bucket

Open — SHORT (0) · unreal $+0.00

SymSideEntryCurrent%$ unrealProjAge
No open SHORT in MT bucket

Sold portfolio · Lane 2 (closed)

Realized closes from nancy_trade_outcomes in the MT bucket (same proj / legacy rules as open tags). KPIs below are sold book only.

Closed-trade KPIs

No MT-bucket closes in outcomes yet

Sold — full history (most recent first)

TimeSymSide$%PeakCapHoldReason
No closes in MT bucket (proj threshold + boost/legacy)

Warming up — scanner picks not in book (0)

From nancy_mt_hunter_last.json this tick; excludes any symbol already present in paper_holdings (same rule as the scanner’s held-symbol filter).

SymSide24hVol5m velScoreProj
No warming candidates (all picks held or scanner empty)

Current picks this tick (full scan)

SymSide24hVol5m velScore
No picks this tick

Recent audit picks (persisted)

TimeSymSide24hEntryScore
No audit picks

Audit trail — sim vs mark (unique sym,side latest)

SymSideEntryCurrentSim %
No sim-computable picks yet

LANE 3   ST Soft supplement (≤3.5% at entry)

Lane 3 is the short-train soft lane (proj ≤3.5%). When the bridge routes it to the executor, opens and closes land in the tables below; shadow logging to nancy_train_soft_shadow.jsonl continues for scorecard. This is not Lane 2 — Lane 2 on this dashboard is medium-term / MT Hunter.

ST soft — open positions (0) · unreal $+0.00

SymSideEntryCurrent%$ unrealProjAge
No ST-soft positions open in paper_holdings

ST soft — sold (most recent first)

TimeSymSide$%PeakCapHoldReason
21:37:56TACUSDTshort$-35.00-0.70%+0.11%-613%4.5mSell loser
21:08:20GRIFFAINUSDTlong$+55.50+1.11%+1.44%+77%13.7mAI peak exit long

Historical + shadow KPIs

$+20Hist Total $
50.0%Hist WR
2Hist Trades
1.59×Hist PF
100.0%Longs WR
0.0%Shorts WR
-267.9%Capture
$57Give-back
0Shadow rows
0Sim picks
$+0Sim $ now
Sim WR
0/10Graduate 10+
NORouted?

Shadow picks — simulated $ move from entry

Latest candidates when gate_passed is thin and shadow logging is on. Not written to paper_holdings unless soft supplement is routed live.

SymSideEntryCurrentSim %
No shadow rows (enable NANCY_TRAIN_SOFT_SHADOW_ENABLED=1 on SPARK or sync logs/nancy_train_soft_shadow.jsonl)

LANE 4   Fast Fader · Funding Fader · Perp Overbought Short

Lane 4 is the Fast/Funding Fader lane. It identifies perps where longs are paying >+0.05% 8h funding, RSI(5m) > 70, 1h change ∈ [−0.5%, +2%] — the signature of crowded longs about to unwind. SHORT entries only. Target −0.8% / stop +1.5%. Currently shadow-only until promoted to live ledger routing.

0Picks total
0Unique syms
0Rows
$+0Sim $ now
0/0Sim W/L
Sim WR
0/10Graduate 10+
NO (shadow)Live?

Latest picks

TimeSymSideFundingRSI1hEntry
No picks yet

Simulated P&L (per-symbol latest pick)

SymSideEntryCurrentSim %FundingRSI
No sim data yet

System Health · Macro · Activity

Processes

supervisor1
fast_snapshot1
executors3
monitor0
socks_tunnel0

SOCKS verify: blip (tunnel up)

Feed freshness

fast_snapshot1.0s
mt_hunter2.5min
btc_leader8.6s
umbrella_merged0.9s
funding_fadermissing

BTC Leader (macro)

Directionflat
5m velocity0.0%
BTC price$0
Alt correlation0
Regimealts_decouple
Basket size?

Hourly realized P&L

UTC hour$
2026-04-24T21Z$+20.50

Live bridge feed

Ranked rows0
Gate passes25
MT hunter merged0
Opens this session2

Open book by lane

Book summary · Live tape · 15m spider / knobs

Full narrative, market context, and Nancy spider / artifact ages. Placed after paper lanes and system health so trading tables stay first.

Paper book is UP $20.50 — realized (all lanes) $+20.50 across 2 closes, unrealized $+0.00 across 0 open. By lane (realized / closes on this log): Train L1 (proj ~3.5–7%): $+0.00 / 0 — ST soft (proj ≤3.5%): $+20.50 / 2 — Paper Lane 2 / MT (proj ≥7% or AI_boost/MT_legacy): $+0.00 / 0 — other gap: $+0.00. MT Hunter (medium-term umbrella path): 0 audit rows; see MT section for unique (sym,side) sim. True sandboxes (not book unless routed): Lane 2 soft shadow log · Funding Fader 0 picks. Macro: BTC flat vel 0.0%, alt_corr 0 → regime alts_decouple. Health: supervisor=1, snapshot=1, executors=3, SOCKS tunnel PID 0 (verify blip). Spider (needs attention): last 2026-04-25T01:47:56Z, all_ok=False — end-of-15m-cron checks tied to the same lookback/tweaker pipeline (see page section below).

Market right now (live tape): At 2026-04-25 01:58:46Z on spark-e8e1, the bulk USDT-M snapshot feeding this page was last refreshed 1.0s ago (watchtower treats data as stale if older than 300s). The following regime read is therefore anchored to that tick, not to off-exchange headlines. BTC leader / correlation regime: spot direction flat, 5-minute velocity 0.0%, reference price n/a, Pearson correlation of BTC 1m deltas vs the volume-weighted alt basket n/a across 0 names — classifier bucket unknown (insufficient basket / empty snapshot) (alts are not following BTC step-for-step (divergence or flat tape)). Leader-lag file notes: no_btc_price. Tape heat (universe file): the snapshot lists 458 universe rows from 609 bulk tickers (file timestamp 2026-04-25T01:58:45.721213+00:00); the embedded velocity audit reports 458 rows with primary inter-scan velocity fields and an approximate 90th percentile |24h move| of 9.223% across the board — a coarse read on whether perps are quiet or collectively swinging hard. Decision-plane freshness: train-merged umbrella (ranked rows the executor consumes) is 0.9s old by file mtime, path logs/nancy_umbrella_train_merged_m22.json — that lag is the gap between “tape tick” and “last ranked bundle written,” which matters when volatility spikes intraminute. Your book vs this tape: no open holdings in the file this page read — flat exposure for mark-to-market purposes here. Scope: synthesized only from Nancy logs on this machine (Binance fapi-derived JSON), refreshed every 20s with the watchtower — not a macro or sentiment forecast.

🕸️ 15m loop · Nancy spider · knob chain

Nancy spider issues

Check?Detail
SCRIPTS/nancy_stack_ssot_validate.pyOK[nancy_ssot] OK schema_version=1.0.67 stack=nancy_paper_spark scripts=65
SCRIPTS/nancy_env_check.pyOK[nancy_env_check] OK
nancy binding docs (paths + anchors)OKok
umbrella fallback guardOKok
nancy runtime heartbeatsOKok
nancy always-on supervisor contractOKok
nancy train live auditOKok last_action=restart_train_executor:not_running close_events=2 open_events=2 closed_total_pnl_pct=0.41 trade_count=20 win_rate=0.3 tuning_action=hold
train hpc + epoxy data postureOKtrain_hpc_posture | severity=green | n_findings=1 | [{'id': 'train_ranked_live_data_ok', 'severity': 'green', 'detail': 'ranked JSON passed nancy_live_data_artifact_assert'}]
fast snapshot cadence + velocity hot orderingOKok snapshot_age=1s hot_n=60 source_hot=logs/nancy_velocity_hot_last.json rows_primary_velocity_lookback=458
paper chart ↔ spider (SSOT)OKok
15m cycle envelope (single roll-up)OKok age_sec=0 seq=28 digest=36c6d83d5772
5m deep scan + policy freshnessFAILmissing:state:logs/nancy_5m_market_state_last.json; missing:decision:logs/nancy_5m_micro_adjuster_last.json
lane-isolated tweaks architectureFAILmissing:mt:logs/nancy_runtime_tweaks_mt.json; global_has_per_trade_entry_gate_leak:['min_profit_ci_low_pct', 'min_profit_floor_pct_override', 'min_profit_pct']
decision resources (docs + audit)OKhost=spark-e8e1 | audit_expected=true | severity=yellow | findings_n=1 | audit_missing
compileall MODULE/nancyOKok
py_compile SCRIPTS/nancy_*.py (325 files)OKok

Knob + lookback artifacts (this host)

FileAge
nancy_15min_lookback_report.json8.8min
nancy_reverse_engineered_knobs_last.json8.9min
nancy_elon_interrogation_latest.json2.9min
nancy_runtime_tweaks.json5.8min
nancy_spider_last.json10.8min
nancy_lookback_cron_heartbeat.json10.8min

🏗️ Bot Architecture · Schematic & How It Works

Binance Futures API fapi.binance.com (geo-blocked from laptop) SOCKS5 Tunnel SSH -D 1080 → SPARK3 LaunchAgent, auto-restart Fast Market Snapshot 5s ticks · 467 USDT pairs writes nancy_fast_market_snapshot_last.json BTC Leader Lag direction · vel_5m · alt_corr regime classifier (A05 P3) Train Velocity Ranker composite = velocity × conviction × path_eff × fractal_align gate_passed + top_25 Train Executor Bridge Gate→Lane 1 (proj 3.5-7%) Soft→Sandbox 1 · MT Hunter→Paper Lane 2 BTC leader penalty · dedup · cooldown writes nancy_umbrella_train_merged.json LANE 1 · PAPER ST Gate-Passed Ranker — (no L1 closes) proj 3.5-7% · hold 6-11 min No L1 in outcomes on this host exits: AI peak / FSM / profit lock SANDBOX 1 ST soft supplement proj ≤3.5% · shadow scorecard paper when routed live 54% WR hist · PF 3.5× → soft_shadow.jsonl PAPER LANE 2 MT Hunter · medium-term book — (no MT-bucket closes yet) Open MT marks + scanner tables still below proj ≥7% / AI_boost / MT_legacy in outcomes umbrella merge · MT-prefer executor path LANE 4 Fast/Funding Fader funding ≥ 0.05% · RSI > 70 1h ∈ [−0.5%,+2%] · SHORT → funding_fader_shadow.jsonl observation only Paper Executor ×N supervisor keeps alive · dedup guard MAX_OPEN=16 · $1000 × 5× lev audit + outcomes + holdings journal Nancy Always-On Supervisor respawns fast_snapshot, executor, btc_leader 15s repair cycle · dedup kill-old-instances watches umbrella freshness · SOCKS autofix Audit + Scorecard nancy_trade_outcomes.json overnight_monitor every 10min watchtower dashboard every 20s Legend routes to paper sandbox / shadow data flow

Data plane (top row)

The Binance Futures API is geo-blocked from the laptop, so all traffic is routed through an SSH SOCKS5 tunnel to SPARK3 (ssh -D 1080, pinned by a macOS LaunchAgent with KeepAlive). A sitecustomize.py shim monkey-patches socket.socket so urllib/requests transparently traverse the tunnel.

The Fast Market Snapshot loop polls every 5 seconds, fetching 467 USDT perpetual tickers with per-symbol velocity (inter_scan_velocity_pct_per_sec), quote volume, 24h change, and maintains a ring buffer of prices. It writes nancy_fast_market_snapshot_last.json + state file. The BTC Leader Lag publisher derives BTC direction, 5m velocity, and the Pearson alt-correlation (BTC 1m deltas vs basket-mean deltas of top-30 alts by volume), classifying the regime as alts_follow_btc / alts_decouple / mixed.

Decision plane (middle)

The Train Velocity Ranker scores every universe symbol each tick via a composite: velocity_weighted × conviction × path_efficiency × fractal_alignment. Symbols clearing hard thresholds enter gate_passed. Lower-conviction symbols with real momentum enter top_25 as sub-threshold candidates.

The Train Executor Bridge turns those into executor-ready ranked rows. Gate-passed rows get Lane 1 routing (projected_profit_pct scaled from v_weighted × 4, typically 3.5-7%). Soft-supplement rows (top_25 with |v_weighted|≥0.35) log to Sandbox 1 / nancy_train_soft_shadow.jsonl and may or may not be routed to the executor’s ranked list. MT Hunter rows merge separately for Paper Lane 2 (medium-term). The bridge applies the BTC leader graduated penalty (A05 P3), per-symbol dedupe (60s cooldown + already-open guard), and emits nancy_umbrella_train_merged.json.

Paper Lane 2 vs ST soft vs experiments

Paper Lane 2 — MT Hunter (MODULE/nancy/mt_hunter.py + mt_hunter_bridge.py): primary medium-term path on this dashboard — open/closed/warming tables plus scanner KPIs. Merged into the umbrella; executor MT-prefer when NANCY_MT_HUNTER_ENABLED. There is no separate “Sandbox 2” section anymore.

Sandbox 1 — ST soft (≤3.5% proj): soft short-train supplement — paper tables when routed live, plus shadow scorecard from nancy_train_soft_shadow.jsonl. Graduation gate: swap-at-cap give-back + 55% sim WR (per internal notes).

Lane 4 — Funding Fader: mean-reversion experiment only (funding_fader_shadow.py). Not the MT path.

Execution plane (bottom)

The Paper Executor (multiple child processes for parallelism) reads the merged umbrella, selects entries respecting side-loss guards, BTC penalty, hourly/daily caps, and opens $1000 × 5× = $5000 notional per trade. Exits are handled by Exit FSM (OPEN_GRACE → EARLY_RISK → RIDING → PROFIT_LOCKED → TRAILING → STAGNANT → EXITING), the AI peak-exit overlay (closes when unrealized retraces ≥0.22% from peak ≥+1.35%), and the profit-lock / stale-non-performer / sell-loser paths. Every open and close writes to nancy_trade_outcomes.json and nancy_audit.jsonl.

The Always-On Supervisor (PID parent of every child) does a 15-second repair cycle: kills duplicates, restarts dead processes (fast snapshot, executor, btc_leader, shard merger), auto-fixes stuck umbrella state, reloads the SOCKS LaunchAgent if the verify blips 3 times in a row. The Overnight Monitor ticks every 10 minutes, writing a structured row to nancy_overnight_monitor.jsonl with P&L delta, anomaly flags (stale feeds, realized drops >$50/10min, missing processes).

This dashboard

The Partner Watchtower is generated by SCRIPTS/nancy_partner_dashboard.py on the host that runs it (build stamp in the page header). It reads logs/nancy_*.json and JSONL (plus logs/eu_chart/ when chart_sync_source.json is present so laptop mirrors match SPARK), merges train umbrella from nancy_umbrella_train_merged_m22.json or the eu_chart merged file, marks stale when the fast snapshot mtime is older than NANCY_WATCHTOWER_MAX_SNAPSHOT_AGE_SEC (default 300s), and recomputes HTML every 20s. The spider panel reflects nancy_spider_last.json written at the end of run_nancy_lookback_cron.sh alongside lookback + tweaker outputs. Serve locally with python3 SCRIPTS/nancy_partner_dashboard.py (listens on NANCY_WATCHTOWER_PORT, default 8899) or run gen once. Same slug in nancy_watchtower/.slug keeps the public path stable when reverse-proxied. No operator actions on this page — read-only.