# Bird's Eye — backlog entries, 2026-11-03

For the Trader Dash backlog (`birdseye-backlog.md` in the "Trader Dash" project). Written from a Swing Project session, which can't reach that project, so it sits beside the scripts until merged.

## Shipped

**v1.26 — Swing column · ✓ SHIPPED (TradingView alerts pending)**
- `swing.json` (new): the SWING list — 35 names, 11 sectors, IBKR list 108, with conids. `held` map marks open positions (also a per-device Held toggle on each card).
- `swing_feed.pine` (new): "Swing Feed [SW]" plugin, kind `swing`. On a 15-min chart, one alert per bar close posting live price, daily SMA9/20/200 (+200 from 20 bars ago) and the 1-hour 9 — last completed hour (exit test) and developing hour (early warning). 2 request.security per symbol → 18 symbols per instance → 2 instances (swing-1: TXN…CB, swing-2: LMT…WELL). Compiled clean via pine_check. **Receiver unchanged** — the plugin contract already routes it into `quotes[SYM].ext.swing` (verified with a sample payload).
- Dashboard v1.26: Swing column after the six lanes (full width when flattened). States — held: EXIT ▼ (1-hour close under the 1-hour 9), AT RISK (price under the developing hour's 9), TREND ⚠ (daily filter failed), HOLD ▲; not held: ENTRY OK ▲, WAIT 1H, NO TREND, NO DATA. Held names sort first and toast + chime on AT RISK / EXIT, once per feed bar. Card shows the exit line (1-hour 9) and distance, plus 200/20/9 pass/fail. Click → 1-hour TradingView chart. Swing-only names excluded from the "n/25 stocks" count.
- `birdseye-tv.bat` now opens v1.26. v1.25 left on disk as the fallback.

## Open

- **Swing Feed in TradingView · OPEN · P1.** Save the script, add 2 instances on a 15-min layout (swing-1 / swing-2 slot lists), create 2 alerts ("Any alert() function call", webhook = the same /hook/<token> URL as the Bird's Eye Feed). Create click must be his.
- **Held from IBKR positions · IDEA.** Mark Held automatically from IBKR positions instead of the toggle.
- **Swing entry triggers · IDEA.** Base-high / pullback / squeeze flags from the screen (TMO, DIS, CB…) on the card.

**v1.26 follow-up — phone push · ✓ SHIPPED.** Receiver v2.4 (`birdseye_tvfeed.py`) pushes held SWING names to the phone via ntfy (topic in `ntfy_topic.txt`): AT RISK, EXIT (re-sent each new hour still below), CLEARED. Held lives in `swing.json`, written by the dashboard's Held? button through `POST /swing/held`. Old receiver kept as `birdseye_tvfeed.py.pre-swing-2026-11-03`. Note: anyone with the tunnel URL could flip a Held flag (effect: which names push).

**v1.27 — layout · ✓ SHIPPED.** Trap zone and 9er lanes removed (FADE → Watching; names pinned to either show in Watching). Field graduations are now small cards stacked top-right (fixed), not a bar pushing the page down. Swing column folds WAIT 1H and NO TREND into collapsible groups (held names never fold; open state remembered per device). `birdseye-tv.bat` opens v1.27; v1.26 kept as fallback.

**SWING list rebuilt 2026-11-04 · ✓ SHIPPED.** 36 names from Neo's TradingView screen (price 25–250, $vol ≥ $100M, ADR 1.5–3.5%) minus PODD (below a falling 200) and WTRG ($98M/day), plus tech under a 5% ADR exception: DOCU, WDAY, CRM, PLTR. Updated IBKR list 108, `swing.json` (held kept — none set), `SWING.txt`, and both Swing Feed instances (swing-1 / swing-2, 18 each); old alerts deleted, new alerts created and verified (15m, webhook on). Near-misses on the tech ADR cap: CRWD 5.1%, ZS 5.4%.
