{
  "scan_date": "2026-09-09",
  "macro_notes": "active_mode=aggressive: all aggressive_overrides applied (RSI band 35-72, leading-sector breakout ceiling 75, T1 1:1.5/T2 1:3, 5/10-day time stops, pyramid rule, 10% cash reserve, 11% max portfolio risk). positions.json open_positions is empty (no open positions since CAR.UN stopped out 2026-08-31) -- Step 1b had nothing to enrich and Step 5 has nothing to check, so holds and exits are both empty arrays by design. Step 0/Tool-availability: mcp__Questrade__* tools confirmed absent from this session's toolset (not present even as a deferred/loadable tool) -- treated per Step 6 point 0 as a connector outage for this unattended run, not evidence of a different/interactive session. Since signals.new_buys ends up empty today, Step 6 had nothing to execute or abort and no additional ntfy alert was needed beyond whatever run_daily_scan.sh's own separate questrade_preflight check already sent (mirrors 2026-09-01 through 2026-09-08's handling of the same empty-new_buys situation). Step 1a lessons from retrospective.json (generated 2026-09-09, 6 items in lessons_for_next_scan, all applied): (1) narrow_funnel (only 2 distinct tickers, CAR.UN/CJT, ever traded) -- addressed by running all 9 screener_sources entries plus ~19 direct-name breadth-closing searches once the generic screeners again returned only platform descriptions/index-level commentary rather than fresh dated tickers, evaluating 20 distinct tickers across 9 sectors (Financials, Energy, Materials, Technology, Communication Services, Utilities, Consumer Staples, Industrials, Consumer Discretionary), clearing both min_candidates_evaluated_per_scan (15) and min_sectors_represented (5). (2) unconfirmed_volume -- applied: BCE was excluded specifically on a confirmed volume ratio (319.81K/3.48M = 0.09x, far under the 0.8x floor) rather than left as a vague gap, and several others (TD, CNR, WSP, RY, CNQ, CVE) were excluded in part because no volume/average-volume figure could be obtained at all despite a dedicated attempt. (3) unconfirmed_resistance_level -- moot again today; no candidate reached setup_B scoring cleanly enough to need a resistance level. (4) unconfirmed_candle_pattern -- MFC's watchlist re-check again needed a confirmed bullish reversal candle at its 50d EMA; today's differently-worded search plus an attempted Questrade fallback (tools unavailable) both again returned only the same March 10, 2026 hammer reference already ruled stale/non-confirming on 2026-09-08 -- this made today the 3rd consecutive scan carrying the identical unmet confirmation (added 2026-09-04, carried 2026-09-08), so per Step 1c's 'do not let a watchlist entry repeat unchanged for more than 2 consecutive scans' rule it was moved to excluded rather than carried a 3rd time, 4 trading days before it would have hit the 7-day max-carry limit anyway. (5) unconfirmed_macd_reading -- AEM and WPM both had their RSI/MACD figures conflict by direction or by an order of magnitude across sources and could not be reconciled after a follow-up attempt -- both excluded per data_integrity.stale_flagged_input_rule rather than picking a reading. (6) deferred_megacap_moved: GIB.A -- forced a full Step 3/4 reconfirmation today regardless of day-of-week per the lesson (also automatic since today is Wednesday, funnel_breadth.recurring_megacap_handling's weekly reconfirmation day); confirmed -2.74% below its 200-day moving average (price $102.02) despite having moved +30% since its 2026-08-27 deferral price ($74.93) -- excluded on ordinary technical grounds (price below 200 EMA), closing out the standing risk retrospective.json flagged. Step 1a momentum (setup_D) adaptive-review: positions.json's closed_positions still contains no setup_type:'momentum' entries (CJT breakout, CAR.UN pullback), so no extra confirmation bar applied to setup_D candidates today (moot regardless -- no candidate's data cleanly reached setup_D scoring). Step 1c watchlist resolution: MFC re-checked before any new sourcing (see lesson 4 above) -- moved to excluded, not carried. RSI-conflict handling: TD's RSI conflicted across sources (75.449 vs a stated 62-81 range) straddling the aggressive 72 ceiling -- per exclusions.rsi_conflicting_data_rule this alone was NOT treated as grounds for exclusion and TD was carried forward, but no volume, resistance level, or EMA-proximity figure could subsequently be confirmed for it, so it was excluded for insufficient confirmable technicals rather than on the RSI conflict. Similarly BNS's stale RSI/MACD (43.6/-0.89 against a $123.55 200-EMA) was NOT taken at face value -- a follow-up search confirmed price is actually near its 52-week high ($128.35, range $87.38-131.72), resolving the price-vs-200-EMA direction to 'above', but could not produce a corroborated fresh RSI/MACD reading consistent with that (a near-52-week-high stock reading RSI 43.6 is itself implausible) -- excluded per data_integrity.stale_flagged_input_rule on the unrefreshed RSI/MACD specifically, not on the resolved price direction. Step 2 sourcing: all 9 screener_sources entries run (SwingTradeBot/Barchart/TradingView/TradeThatSwing/Globe and Mail again returned generic commentary or platform-description links rather than individual fresh-dated TSX tickers; SEDI and 52-week-high/unusual-volume searches again returned only platform links, no concrete same-day filings/names); Sector ETF Constituent Check returned XEG's top holdings (Suncor 25.35%, CNQ 24.34%, Cenovus 13.08%, Imperial Oil 6.45%, Tourmaline 5.64%) with no current relative-strength read. Sector sweep rotated to Utilities (unused in the last 8 scans: 09-08 Real Estate, 09-04 Industrials, 09-02 Healthcare, 09-01/08-28 Consumer Staples, 08-31/08-27 Healthcare, 08-26 Technology) -- FTS was the direct-name follow-up but its most concrete price/EMA reference was 4+ months stale, so no Utilities candidate survived. Because today is Wednesday, every megacap that would normally be deferred under funnel_breadth.recurring_megacap_handling instead got a genuine Step 3/4 reconfirmation: RY, TD, BNS, BMO (Financials), SU, CNQ, ENB, CVE (Energy), AEM, WPM, NTR (Materials), GIB.A, CSU (Technology) -- none survived to new_buys/watchlist, each excluded for the specific reason listed in `excluded` below. Breadth was closed with additional direct-name searches across Communication Services (BCE), Consumer Staples (L), Industrials (CNR, WSP), and Consumer Discretionary (DOO). Phase D commodity trigger check: WTI rose from yesterday's ~$92.37 close to today's $94.30-94.73 range (+~2-2.5%, driven by US strikes on Iranian oil tankers per Yahoo Finance) -- this DOES qualify the >1% bullish WTI trigger in aggressive_overrides.valuation_exception, but no Energy candidate today was excluded on P/E grounds (all four Energy names failed on technical-data confirmability or the ordinary 200-EMA check instead), so the exception was never actually needed. Gold fell ~0.9% to $4,399 before partially recovering to ~$4,438 -- does not qualify the bullish >0.5% gold trigger. Total searches today: 10 screener/insider/52-week-high sources + 18 direct megacap confirmation searches + 8 targeted follow-ups (TD/FTS/L/CNR/CSU/DOO price refresh, SU/BNS 200-EMA resolution) + 2 more (L refresh, MFC candle alt-search) + 1 commodity-trigger check = 39 searches, above the usual 22-27 range, reflecting both the Wednesday mega-cap reconfirmation requirement and an unusually high rate of cross-source price/indicator conflicts and staleness this session.",
  "candidates_evaluated_count": 20,
  "sectors_evaluated": ["Financials", "Energy", "Materials", "Technology", "Communication Services", "Utilities", "Consumer Staples", "Industrials", "Consumer Discretionary"],
  "lessons_applied": [
    "narrow_funnel: ran all 9 screener_sources entries (sector sweep rotated to Utilities, unused in the last 8 scans) plus ~19 direct-name breadth-closing searches once generic screeners again returned only platform-description/index-level content, evaluating 20 distinct tickers across 9 sectors -- clears both min_candidates_evaluated_per_scan (15) and min_sectors_represented (5)",
    "unconfirmed_volume: BCE excluded specifically on a confirmed volume ratio (0.09x) far under the 0.8x floor; TD/CNR/WSP/RY/CNQ/CVE excluded in part because no volume figure could be obtained at all despite a dedicated attempt",
    "unconfirmed_resistance_level: moot today -- no candidate reached setup_B scoring cleanly enough to require a resistance level",
    "unconfirmed_candle_pattern: MFC's watchlist re-check needed a confirmed bullish reversal candle at the 50d EMA; today's alternate-worded search and an attempted Questrade fallback (tools unavailable) both again returned only the same stale March 10, 2026 hammer reference -- this being the 3rd consecutive scan on the identical unmet confirmation, MFC was moved to excluded per Step 1c's repeat-limit rule rather than carried again",
    "unconfirmed_macd_reading: AEM and WPM both had their RSI/MACD figures conflict by direction or by an order of magnitude across two attempts each and could not be reconciled -- excluded per data_integrity.stale_flagged_input_rule rather than picking a reading",
    "deferred_megacap_moved: GIB.A given a full Step 3/4 reconfirmation today (also automatic as today is Wednesday) -- confirmed -2.74% below its 200-day moving average despite a +30% move since its 2026-08-27 deferral price, excluded on ordinary technical grounds, closing out the standing risk"
  ],
  "signals": {
    "new_buys": [],
    "holds": [],
    "exits": [],
    "watchlist": []
  },
  "excluded": [
    { "ticker": "RY", "reason": "Royal Bank of Canada (Financials). No RSI, MACD, volume, or average-volume figure could be obtained despite the search returning detailed earnings/price-target information (next earnings Dec 3, 2026, not a near-term factor) -- excluded for insufficient confirmable technicals.", "price_cad": null },
    { "ticker": "TD", "reason": "Toronto-Dominion Bank (Financials). RSI conflicted across sources (75.449 vs a stated 62-81 range) straddling both the base and aggressive overbought ceilings -- per exclusions.rsi_conflicting_data_rule this alone was not treated as grounds for exclusion and the stock was carried forward, but no volume, resistance level, or EMA-proximity figure could subsequently be confirmed via a follow-up search, leaving too many other setup-scoring inputs unconfirmed -- excluded for insufficient confirmable technicals, not on the RSI conflict itself.", "price_cad": null },
    { "ticker": "BNS", "reason": "Bank of Nova Scotia (Financials). One source's RSI (43.6)/MACD (-0.89) implied Sell against a stated 200d EMA of $123.55; a follow-up search confirmed price is actually near its 52-week high ($128.35, range $87.38-131.72), resolving price-vs-200-EMA to 'above', but could not produce a corroborated fresh RSI/MACD reading consistent with that (43.6 RSI at a near-52-week-high is itself implausible) -- excluded per data_integrity.stale_flagged_input_rule on the unrefreshed RSI/MACD.", "price_cad": null },
    { "ticker": "BMO", "reason": "Bank of Montreal (Financials). 200-day EMA conflicted by ~15% across sources ($156.31 vs $179.02); the most concrete price reference found was its Aug 17, 2026 all-time high (23 days stale), with no today-dated price, volume, or resolved MACD direction (bearish-below-signal-line vs a neutral RSI of 39.7 disagree) -- excluded for an unconfirmable current price/indicator set.", "price_cad": null },
    { "ticker": "SU", "reason": "Suncor Energy (Energy). 200-day EMA conflicted across reference points ($65.88 vs $75.41 as of June, no current figure), and the single RSI reading (29.322, oversold) could not be corroborated by a second source or reconciled with today's confirmed price ($90.99) -- excluded per data_integrity.stale_flagged_input_rule.", "price_cad": null },
    { "ticker": "CNQ", "reason": "Canadian Natural Resources (Energy). Only dividend/earnings/market-cap data found; no RSI, MACD, 200-EMA, or volume figure obtained -- excluded for insufficient confirmable technicals.", "price_cad": null },
    { "ticker": "ENB", "reason": "Enbridge (Energy). Confirmed below its 200-day EMA (price ~$52.39 against a $52.39-55.38 200-EMA range, two independent sources agree price is below) -- excluded on ordinary technical grounds, not a data-quality issue.", "price_cad": null },
    { "ticker": "CVE", "reason": "Cenovus Energy (Energy). Only price/dividend data found; the only volume figures returned (12,888 / 7M) imply an implausible ~0.002x ratio suggesting a data error rather than a real reading, and no RSI/MACD/200-EMA was obtained -- excluded for insufficient confirmable technicals.", "price_cad": null },
    { "ticker": "AEM", "reason": "Agnico Eagle Mines (Materials). Single-source RSI (82.6, above even the 75 leading-sector ceiling) conflicts internally with a reported bearish 50/200-day moving-average crossover (50MA $152.4 below 200MA $186.5) -- an overbought reading is inconsistent with a bearish MA crossover, and a second RSI source could not be found to resolve which is current -- excluded per data_integrity.stale_flagged_input_rule.", "price_cad": null },
    { "ticker": "WPM", "reason": "Wheaton Precious Metals (Materials). RSI conflicted materially (77.03 vs 55.465, straddling the overbought ceiling), MACD conflicted in both sign and scale (11.82 vs -1.290), and the 200-day EMA reading ($136.70) was flagged Sell with no current price to check it against -- excluded per data_integrity.stale_flagged_input_rule.", "price_cad": null },
    { "ticker": "NTR", "reason": "Nutrien (Materials). RSI 30.2 (oversold, would ordinarily route to setup_C's carveout), but both its 50-day ($65.45) and 200-day ($68.72) moving averages were independently flagged Sell, implying price is currently below its 200 EMA -- the oversold carveout only waives the RSI-floor discard, not the 200-EMA discard (same treatment as DOL on 2026-09-08) -- excluded on ordinary technical grounds.", "price_cad": null },
    { "ticker": "GIB.A", "reason": "CGI Inc. (Technology). Given a full Step 3/4 reconfirmation today per retrospective.json's deferred_megacap_moved lesson (also automatic as today is Wednesday). Confirmed -2.74% below its 200-day moving average (price $102.02) despite having moved +30% since its 2026-08-27 deferral price ($74.93) -- excluded on ordinary technical grounds (price below 200 EMA); closes out the standing risk retrospective.json flagged.", "price_cad": null },
    { "ticker": "CSU", "reason": "Constellation Software (Technology). Its own 200-day SMA figure ($3,019.48) and today's confirmed price (~$2,870, down from ~$3,138 a week earlier, an ~8.5% pullback) show price now below that average, contradicting the 'Buy' framing attached to the stale 200-SMA reading -- excluded per data_integrity.stale_flagged_input_rule once the two figures are actually compared.", "price_cad": null },
    { "ticker": "BCE", "reason": "BCE Inc. (Communication Services). Confirmed today's volume (319.81K) against its average volume (3.48M) -- a ratio of ~0.09x, far below the 0.8x technical-section floor -- excluded on ordinary technical grounds.", "price_cad": null },
    { "ticker": "FTS", "reason": "Fortis Inc. (Utilities). Most recent concrete price/200-EMA reference found was from May 2026 (4+ months stale) despite a differently-worded follow-up search; no today-dated price or volume was obtainable -- excluded for an unconfirmable current price/volume.", "price_cad": null },
    { "ticker": "L", "reason": "Loblaw Companies (Consumer Staples). Internally inconsistent price data -- a follow-up search reported both '$62.87, down 4.9% over the past week' and a Sep 4 close of $62.44, which is lower than today's quoted price yet inside the claimed down-week, an unreconciled contradiction; no current volume or fresh RSI/MACD obtained either -- excluded per data_integrity.stale_flagged_input_rule.", "price_cad": null },
    { "ticker": "CNR", "reason": "Canadian National Railway (Industrials). Today's price ($129.48) and a partial RSI/MACD reading were found, but no 200-day EMA could be obtained from any source despite two attempts -- price-vs-200-EMA is the base gating check for every setup and could not be confirmed -- excluded for insufficient confirmable technicals.", "price_cad": null },
    { "ticker": "WSP", "reason": "WSP Global (Industrials). No RSI, MACD, 200-EMA, price, or volume data obtained at all -- excluded for insufficient confirmable technicals.", "price_cad": null },
    { "ticker": "DOO", "reason": "BRP Inc. (Consumer Discretionary). Confirmed a -6.47% single-session decline on Sep 8 immediately following a Sep 3 earnings report showing a per-share loss -- a sharp adverse move right off an earnings miss, not a bullish setup -- excluded (earnings-reaction red flag, not a data-quality issue).", "price_cad": null },
    { "ticker": "MFC", "reason": "Manulife Financial (Financials). Watchlist re-check (waiting_for: confirmed bullish reversal candle at the 50d EMA, added 2026-09-04, carried 2026-09-08). Today's differently-worded search and an attempted Questrade fallback (mcp__Questrade__* tools confirmed absent this session) both again returned only the same March 10, 2026 hammer reference already ruled stale/non-confirming on 2026-09-08 -- the 3rd consecutive scan on the identical unmet confirmation, so per Step 1c's repeat-limit rule moved to excluded rather than carried again.", "price_cad": null }
  ]
}
