Financebotresearch desk研究台

Discovery › watchlist

Watchlist scan

Market context. S&P 500 7,743.41 (9/25 close), VIX 14.87 — a new marginal high and volatility still falling, from 7,705.68 / VIX 15.33 at the 9/23 scan. The 9/23 regime read holds: there is no broad de-rate to buy. Breadth today was 107 up / 87 down across the 194-name universe while the security complex fell 3-10% — so today's event is sectoral, not market-wide risk-off.

What changed since 9/23 (3 sessions): one sector cracked, two high-conviction names fell below their own entry floors, GOOGL was re-analyzed today and upgraded [7.0]→[7.5], and three tooling defects were found that had been suppressing the scan's own output — including two in-zone names at conviction 7.0 and 8.5 that no previous scan had ever reported.


🔴 The headline — the security complex began to de-rate

The 9/23 file flagged CRWD · DT · FTNT · MANH · OKTA · QLYS · RBRK · TEAM at simultaneous 1-year highs and called it "a distribution statement, not a sell signal." Three sessions later the complex is selling off, and the cause is valuation, not fundamentals.

Ticker Price Δ today Held Verdict vs entry zone
ZS $193.05 −10.06% — WATCH [6.0 rpt] no zone on file
TWLO $275.80 −7.96% — WATCH [5.5] +28.3% above $185-215
FSLY $24.96 −6.45% HOLD [6.0] not in watchlist
QLYS $172.43 −5.75% TRIM [7.0] +23.2% above $125-140
OKTA $195.19 −5.54% — TRIM [6.0] +69.7% above $100-115
PANW $374.74 −3.89% WATCH [7.0] +17.1% above $275-320
RBRK $109.55 −3.73% HOLD [6.5] no zone on file
CHKP $131.24 −3.71% HOLD [5.0] not in watchlist
CRWD $252.13 −2.90% TRIM [6.0] +73.9% above $120-145

Cause (two things, same day):

  1. Bernstein downgraded PANW, OKTA and SentinelOne to Market Perform, arguing the sector's ~100% gain since early 2026 pushed valuations to or above fair value. This is an explicit valuation call on the exact overshoot this file has been tracking.
  2. Zscaler's Chief Revenue Officer Mike Rich is stepping down (Ross Tackett succeeds him 10/01), reviving sales-execution concerns weeks after a soft FY27 growth outlook.

Why it matters more than the tax rule. The standing rule (adopted 7/28) is hold unless gains are at genuine risk of being wiped out or significantly cut. The first leg down is the event that makes that risk live rather than hypothetical. Four held names carry a TRIM or near-TRIM verdict while sitting 17-74% above their own entry zones. Nothing here is a forced sale today — but "distribution statement, not a sell signal" is now a testable claim rather than a comfortable one, and the next leg decides it.

⚠️ QLYS is the sharpest case: its 9/22 /value re-derivation set FV $145-175 and TRIM at 23x fwd. Spot $172.43 is at the top of its own fair-value range — the de-rate is the thesis working, not breaking.


ACT NOW

Ticker Conv Price Fair value Discount Zone Catalyst Recommendation
INTU [7.0] $275.79 $350-440 −27% to −60% 🔻 1.5% BELOW the report's $280-320 Q1 FY27 ~11/20 ADD — the cleanest mispricing on the list
AVGO [8.3] $352.81 — — 🔻 2.0% BELOW $360-420 — ADD — and it is the AI-capex pick over KLAC
BKNG [7.0] $163.95 $195-245 −19% to −49% ✅ IN $150-180 Q3 ~early Nov ADD — largest fair-value gap on the list
BR [8.5] $163.77 $190-230 −22% to centre $211 ✅ IN $150-180 — ADD — highest conviction on the file, in band

1. INTU — and a correction to the 9/23 note. The 9/23 scan called INTU "the cleanest 'came to you' name — fell top-edge→mid on rates, not news (no print since the 8/25 beat)." That rationale was wrong. There was news: a 9/17 Investor Day that reaffirmed FY27 revenue growth of only 9-10% (versus 14% delivered in FY26), TurboTax +2-3%, and Mailchimp flat to −1%; Goldman reiterated Sell at a $304 target on 9/24.

The verdict, however, is intact — and that is the important part. The /analyze-from-before file of 9/22 analyzed that Investor Day in full and still concluded ACCUMULATE [7.0], explicitly booking the bad news as unfavourable: "FY27 guided +9-10%… the 3-yr algorithm was cut: GBS 15-20% → 10-15% CAGR… a 500bp cut to the GBS algorithm, not a one-year air pocket." It also found the offsets primary-sourced: +441bp GAAP margin expansion (matching the Investor Day's "~440bp" exactly), a +15% dividend, and an FY27 EPS guide that beat consensus on a like-for-like basis on a stricter new non-GAAP definition that now includes SBC.

So this is not a thesis break — it is a fully-underwritten ACCUMULATE whose price then fell another 6.8% below the entry floor that same report set. Spot $275.79 versus FV $350-440. That is the buy. What the 9/23 scan got wrong was the reason, and a wrong reason is worth correcting even when it points the same way, because next time it will not.

2. AVGO — below its own floor, and the cluster tie-break now resolves. $352.81 is 2.0% under the $360-420 band on the highest conviction in the AI-capex sleeve (report [8.3]). The standing rule is own ONE of AVGO/KLAC at size. KLAC's 9/22 file set entry $155-178 and spot is $187.92 — 5.6% above it, HOLD [7.5]. AVGO is below its entry; KLAC is above its own. The tie-break is no longer a judgement call.

3. BKNG — surfaced only after the parser was fixed, and it is the widest gap in the Shortlist. ACCUMULATE [7.0] (9/10), FV $195-245 against spot $163.95 — +19% to +49%, the largest discount to fair value of any in-zone name. −24.9% over 52 weeks, +4.2% today. Trim 24x fwd. Break triggers are specific and currently benign: AI-agent share of room-nights above the <1% floor, and the scope of Google's AI Mode agentic-booking rollout. ⏳ Q3 ~early Nov. This name sat in zone through every prior scan without being reported — see the tooling section.

4. BR — still the highest-conviction name on the file, still in band. $163.77 inside $150-180, FV $190-230 → ~22% below the $211 centre. FY26 delivered +9% revenue / +12% adj EPS, a 20th straight dividend raise, and a $1.5B buyback. Nothing has changed except that it is now 2.7% cheaper than at the 9/23 scan.

Sizing discipline still applies. With full coverage, 37 names sit in zone of 126 zoned, plus 9 below their floors. That is a repricing, not 42 ideas. Respect the clusters: AVGO/KLAC = one AI-capex bucket · XYL/PNR/CNM = one water theme · STZ/MZTI/INGR = one staples theme · G = the one AI-services pick.


WATCH CLOSELY

Fell BELOW their own entry floor (cheaper than the plan)

Ticker Conv Price Zone Below by Held Verdict Note
ROL [6.0] $30.03 $34-40 −11.7% — ACCUMULATE Was in zone 8/28. Break trigger is a 3rd EPS miss ~late Oct — the fall may be the trigger front-running itself. Re-test before adding.
INTU [7.0] $275.79 $305-350 wl / $280-320 rpt −9.6% wl / −1.5% rpt ACCUMULATE See ACT NOW. The watchlist zone is stale versus its own 9/22 report.
STZ [6.5] $113.63 $125-140 −9.1% — ACCUMULATE Staples cluster with MZTI/INGR — both also in/near zone. Own one.
GWRE [6.5] $145.56 $150-175 −3.0% ACCUMULATE −3.6% today. The 9/06 guide de-rate on an intact business; FY27 OCF guide confirmed the cash thesis.
DPZ [6.5] $292.14 $300-335 −2.6% DEFER ⏳ Two dated events inside 3 weeks: Joe Jordan becomes CEO 10/01, Q3 print 10/13 6:05am ET. DEFER is correct — do not act before 10/13.
AVGO [8.3] $352.81 $360-420 −2.0% ACCUMULATE See ACT NOW.
DECK [6.5] $78.67 $80-95 −1.7% — ACCUMULATE Q1 incremental op-margin went negative on tariffs — the standing caveat.
MNSO [5.0] $8.78 $9-11 −2.4% — WATCH Explicitly not a buy: 5.8% dividend uncovered (112% GAAP payout). ⚠️ADR.
FIS [5.0] $35.41 $36-42 −1.6% — WATCH In/below zone because conviction is 5.0.

Trim breach

Ticker Price Trim vs trim Held Verdict
AMD $630.63 $545 🔴 +15.7% beta WATCH [5.0]

AMD is the cleanest trim candidate on the file and the only one flagged by the deterministic scanner. It has run +32% since the 8/27 re-derivation that set $545 (then $476.67). This is low conviction [5.0], held in beta only, and now 66% above its $330-380 entry zone. The 8/27 lesson was that the old $360+ trim pointed the wrong way because it sat below fair value; $545 was re-derived from that analysis and has now been cleanly exceeded. Unlike the security names, there is no quality argument for holding through — recommend acting.

Just left the zone upward

  • AXP [7.5] $308.89 — +1.3% above $280-305, up 2.3% since 9/23. The 9/23 first-file ACCUMULATE is 3 days old; Q3 print 10/23. A rounding error out of band, not a thesis change.
  • KLAC [7.5] $187.92 — +5.6% above the 9/22 file's $155-178. HOLD is correct.

Dated events inside 30 days

9/30 NKE Q1 FY27 (WATCH [5.0]) · 9/30 MU FQ4 FY26 (held beta, TRIM [4.0]) · 9/30 CBRS lockup tranche (~68M shares) · 10/01 DPZ CEO · 10/01 LULU Chip Wilson 3rd board seat · 10/04 NU Brazil election R1 · 10/13 DPZ Q3 · 10/16 V DOJ discovery closes · 10/21 PEGA Q3 · 10/22 INTC Q3 (TRIM [4.0], held both) · 10/22 NOW Q3 · 10/23 AXP Q3 · 10/26 CALX Q3 · 10/26 Anthropic IPO pricing (AMZN) · 10/28 FOMC (~60% odds of a second hike) + RRX Q3 + ALGM FQ2.


HOLD ON LIST — in zone, no action

Conviction ≥6.5, in zone, thesis unchanged since 9/23 (these are the Shortlist; the reason they are "hold" this week is that the three ACT NOW names are better, not that these are worse):

LDOS [8.0] $123.61 · MANH [8.5] $206.03 (in zone, but verdict is WATCH and spot is only ~7% under the FV centre — in the band on price, thin on margin of safety; −3.3% today) · LEU [7.7] $147.07 · GOOGL [7.5] $343.92 (re-analyzed today — ACCUMULATE, entry re-derived $300-345→$305-355, FV $300-400, trim 29x fwd; Q3 print 10/28) · CRM [7.0] $234.02 · DOX [7.0] $57.71 · MAIN [7.0] $55.10 · VST [6.8] $138.46 · ACM [6.5] $60.89 (+4.1% today) · ADBE [6.8 rpt] $235.47 · BKE [6.5] $42.27 · BWXT [6.5] $138.47 · CRUS [6.5] $119.92 · G [6.5] $33.10 · GPN [6.5] $86.49 · MZTI [6.5] $100.47 · OLED [6.5] $77.39 (+5.4% today) · TMUS [6.5] $165.43 · XYL [6.5] $102.63

Below the ≥6.5 bar, in zone: CALX 6.0 · CNM 6.0 · CSGP 6.0 · INGR 6.0 · O 6.0 · PNR 6.0 · PODD 6.0 · TME 6.0 · ALT 6.0 · ZVRA 6.0 · LHX 5.5 · HLNE 5.5 (fell into $80-92 from +16.4% above it on 9/23) · PCG 5.5 · VICI 5.0 · FISV 4.5 · PDD 4.5


Additions — 1 nomination, and a lot of screened-out noise

The five sleeve screens returned 125 rows. Exactly one survived the coverage check and a health sanity-pass.

✅ Nominate — AMP (Ameriprise Financial) → 💰 Yield-Today / 🏛 Evergreen

NOT COVERED. $493.00, $43.6B cap. 12.35x ttm / 9.54x fwd, ROE 63%, net margin 20%, revenue +12% yoy, earnings +12% yoy, payout ratio 16%, current ratio 2.18. A wealth/asset manager compounding at double digits on a 12x multiple with a 16% payout — the payout leaves room for the dividend-growth arithmetic the Yield-Today sleeve is built on. ⚠️ Not a drawdown play — it is only 13.9% off its 52wk high ($572.56); the case is the multiple, not the discount. ⚠️ P/B 6.85 against 63% ROE — verify the equity base before trusting either. Weakest current Yield-Today member it would displace: VICI [5.0], which is in zone only because conviction is 5.0. → /analyze AMP

⏳ Re-test, don't nominate — AKAM (event-driven)

AKAM is not in Watchlist/Positions.md and carries a 46-day-old WATCH [4.5] (8/11). That verdict now faces a materially different company: a 7-year, $11.6B contractual commitment with Anthropic, announced 9/25. Morgan Stanley lifted its revenue-growth estimate from 12.5% to ~16%; Guggenheim raised its target $190 → $225. At $113.94 that is 16.6x forward. This is a textbook /analyze-from-before candidate — a stale verdict against a new anchor contract — not a fresh nomination. ⚠️ Read the tape correctly: it opened $125.41, hit $128.46, and closed $113.94 (+3.20%) — it gave back nearly the whole gain. ⚠️ Total debt $9.34B against $3.36B cash, D/E 197, ttm op margin 7.6%. The contract is the thesis; the balance sheet is the risk.

⛔ Rejected, with reasons — so the next scan does not re-nominate them

  • The entire yield-tomorrow screen (20 names: XOM, CVX, MO, ADM, CL, BDX, PPG, GPC, SHW, AFL, DOV, DCI, AOS, SWK, BRC, CHD, ATR, BRO, FELE, MGRC). All fall inside Themes/defensive-income-fields.md — a field swept three times (Mar 19, Mar 28, Jul 29) and rejected by the user on business-model grounds, not on price. That note is explicit: "This is a preference constraint, not a valuation one, and it doesn't expire when prices move." Zero nominations from this sleeve screen. The screen is not wrong; the sleeve is already answered.
  • PSN (Parsons) — screened in on a −47.4% drawdown but fails the §1 health bar: revenue −1% yoy, operating margin 2%, net margin 3%, ROE 8%. The 12.6x fwd against 29.7x ttm is exactly the gap [[pitfall-vendor-forward-eps-is-the-wrong-fiscal-year]] warns about. Cheap on a falling E.
  • UI (Ubiquiti) — 36.1x ttm / 28.6x fwd, P/B 28.2, and a 4.22M-share float against 93% insider ownership. Not cheap and not liquid enough to size.
  • AMSC — already AVOID [3.5] (8/17). Correctly rejected; do not re-surface.
  • STX / SNDK / MU — +295% / +1,445% / +560% over 52 weeks. Memory/storage at a cycle extreme, not candidates. MU is already held in beta at TRIM [4.0] with a 9/30 print.
  • POOL (−47%, 15.2x) — genuine, but it is the same pool-destocking cycle as PNR, which is already in the book and in zone. The sleeve does not need a second expression of one cycle.
  • Sleeves 4 (AI capex), 6 (structural-risk), 7 (speculative) have no screen by design — their membership tests are thematic, legal and binary. Not fabricated.

Removals

None recommended. One piece of unfinished housekeeping carries over from 9/23:

🚩 FTNT is still filed in Watchlist/Graveyard.md with a stale $200-215 entry while trading at $173.46, +104.9% over 52 weeks and appearing in the evergreen screen at 61.3x PE. The 9/23 scan raised this and it was not resolved. A name cannot be both buried and screening into a sleeve. Either re-file it or record why it stays dead.


Conviction and zone drift — and why the first count was wrong

An initial pass reported "10 conviction mismatches and 3 zone mismatches" between Watchlist/Positions.md and the report frontmatter. That count was an artifact of the parser, and the real finding is different and more useful.

What was actually happening, in three layers:

  1. Layer 1 was stale, and Layer 1 is what the parser read first. Layer 1 is rewritten every scan; it was last written 9/23 and carried INTU [7.5] (report: 7.0), AVGO [8.0] (8.3), NVDA [6.5] (7.0), LULU [5.0] (3.5), ADBE [6.5] (6.8). Layer 2 — the durable database — had the right numbers all along. Rewriting Layer 1, which this scan does by definition, removes most of that class.
  2. A genuine parse bug on re-derived zones. Layer 2 records a re-derivation inline as entry $305-350 → $280-320. The regex took the first pair — the superseded one — so the scanner was fed zones the reports had already replaced: INTU $305-350 instead of $280-320, VEEV $155-168 instead of $195-215. This is the harmful direction: it makes a name look in-zone at a price its own report no longer endorses.
  3. One real un-re-derived zone: TGT, whose Layer 2 row marks $100-118 as "(41% below spot — stale)" and never replaced it. The 8/27 report says $118-138.

The fix is not a better regex. Widening the pattern to read Layer 1 tables promptly made it worse — it began pulling fair-value ranges out of prose notes as if they were entry zones (INTU read as $350-440, QLYS as $145-175, ZTS as $6.15-6.25). Prose is not a data format and should not be parsed as one.

tickers.py now takes entry: and conviction: from report frontmatter, which is structured, validated by kb.py check, and authoritative by the repo's own rules. The watchlist prose is used only as a fallback for names with no verdict-bearing report yet. Zone coverage 53/147 → 126/151. Remaining mismatches: zero by construction.

⚠️ The watchlist file should still be tidied — NOW, GLW, IBM, O carry entry rules never re-derived, and TGT's row still shows the stale pair. Those no longer mislead the scanner, but they still mislead a human reading the file. [[pitfall-stale-entry-zone-suppresses-a-name]]

The one that still needs a human decision — V

V carries [8.5] in the watchlist; its 8/27 report says [7.0] and TRIM. The re-analysis downgraded BUY→TRIM and retracted the original buy reason — "24.5x fwd, a discount to history" had inverted. Yet the file kept the second-highest conviction on the entire watchlist on a name its own report says to trim. Now $367.38, +11.3% above its $300-330 entry, with DOJ debit-suit fact discovery closing 10/16. The frontmatter fix corrects what the scanner sees; it does not decide the position.


🔧 Three tooling defects found and fixed during this scan

All three were silently degrading every scan and every /daily-brief, and each was found only because a number looked wrong.

1. fin.py --px reported wrong day changes. It used yfinance's fast_info.previous_close, which returned $133.21 for AKAM when the true prior close was $110.41 — turning a +3.20% day into a reported −14.47%. This scan opened on the belief that there was a broad CDN/security rout, partly on the strength of that number. Fix: use fast_info.regular_market_previous_close (verified against get_stock_info: previousClose $110.41, regularMarketChangePercent +3.20). The corrected sweep showed the real event was narrower and sharper than the corrupt one — ZS was −10.1%, not −6.4%. The bad data invented an event and hid a real one at the same time. → [[pitfall-yfinance-fast-info-previous-close-is-wrong]]

2. alerts.py was blind to two-thirds of the watchlist — and the blindness was not random. The entry-zone regex required the literal word Entry followed immediately by a digit, so it missed Entry **300-345** (bold markers) and every Layer 1 table form. The ticker-row pattern matched only Layer 2 list rows (- **BR**), never table rows (| **BR** |). Zone coverage was 53 of 147 names. The 94 invisible names included BR [8.5] and LDOS [8.0], the two highest-conviction names on the file.

This is the finding with the most direct cost. Two in-zone names had never been reported by any scan:

Ticker Conv Verdict Price Zone Fair value Gap
BKNG [7.0] ACCUMULATE (9/10) $163.95 ✅ IN $150-180 $195-245 +19% to +49%
MANH [8.5] WATCH (8/27) $206.03 ✅ IN $150-210 $195-250 ~7% under centre

BKNG is now the widest fair-value gap in the Shortlist and it has been in zone, unreported, since at least 9/10. MANH is tied for the highest conviction on the file. Both were unreachable because their zones exist only in report frontmatter, which nothing was reading. Also surfaced: ZVRA [6.0] in $10-13 and HLNE [5.5], which has fallen into $80-92 from +16.4% above it on 9/23.

This is the mechanical form of [[pitfall-stale-entry-zone-suppresses-a-name]] — the same failure the file already knew by name, arriving through the parser instead of through a stale number. A zone the scanner cannot read suppresses a name exactly as completely as a zone that is wrong, and it does so without leaving anything on the page to notice.

3. Re-derived zones parsed to the superseded value — see the drift section above. Fixed by making report frontmatter authoritative.

Checks left behind: python .mcp/tickers.py --selftest asserts the row and zone patterns against the four shapes that actually occur in Watchlist/Positions.md.


Sources