|
24 | 24 | from datetime import datetime, timezone |
25 | 25 | from pathlib import Path |
26 | 26 |
|
27 | | -VERSION = "2026-07-06.1" |
| 27 | +VERSION = "2026-07-10.1" |
28 | 28 | SCHEMA_VERSION = 1 |
29 | 29 | PROMPT_VERSION = 1 |
30 | 30 |
|
31 | | -DEFAULT_WATCHLIST = "AAPL MSFT NVDA GOOGL AMZN META TSLA BRK-B JPM BTC-USD" |
| 31 | +# Dow Jones Industrial Average constituents. |
| 32 | +# Source: S&P Dow Jones Indices; effective 2026-06-29 (GOOGL replaced VZ). |
| 33 | +# Reconcile against the official index — never a hand-maintained copy — when |
| 34 | +# the composition changes. Parity-tested against news_heartbeat.py |
| 35 | +# (Heartbeat/tests/test_watchlist.py). To add/remove a ticker, edit this |
| 36 | +# list and its TICKER_ALIASES entry (news_signals.py only; test-enforced). |
| 37 | +DOW_30 = [ |
| 38 | + "AAPL", "AMGN", "AMZN", "AXP", "BA", "CAT", "CRM", "CSCO", "CVX", "DIS", |
| 39 | + "GOOGL", "GS", "HD", "HON", "IBM", "JNJ", "JPM", "KO", "MCD", "MMM", |
| 40 | + "MRK", "MSFT", "NKE", "NVDA", "PG", "SHW", "TRV", "UNH", "V", "WMT", |
| 41 | +] |
| 42 | +# Non-Dow tickers FinSearch also tracks for its own community digests. |
| 43 | +WATCHLIST_EXTRAS = ["META", "TSLA", "BRK-B", "BTC-USD"] |
| 44 | +DEFAULT_WATCHLIST = " ".join(sorted(set(DOW_30) | set(WATCHLIST_EXTRAS))) |
32 | 45 | REQUIRED_FIELDS = ("guid", "title", "link", "source", "published", "score") |
33 | 46 | FIELD_CAPS = {"title": 500, "description": 5000, "link": 2000, "source": 200, |
34 | 47 | "guid": 200} |
@@ -196,21 +209,21 @@ def validation_gate(path, max_file_mb): |
196 | 209 | # Lowercase name tokens per ticker (union watchlist, spec D2). Symbols shorter |
197 | 210 | # than SYMBOL_MATCH_MIN_LEN rely on aliases alone. >>> OWNER-TUNED. |
198 | 211 | TICKER_ALIASES = { |
199 | | - "AAPL": ("apple",), "AMZN": ("amazon",), |
| 212 | + "AAPL": ("apple",), "AMGN": ("amgen",), "AMZN": ("amazon",), |
200 | 213 | "AXP": ("american express", "amex"), "BA": ("boeing",), |
201 | 214 | "BRK-B": ("berkshire",), "BTC-USD": ("bitcoin",), |
202 | | - "CAT": ("caterpillar",), "CSCO": ("cisco",), "CVX": ("chevron",), |
203 | | - "DIS": ("disney",), "GOOGL": ("google", "alphabet"), |
204 | | - "GS": ("goldman",), "HD": ("home depot",), "IBM": ("ibm",), |
205 | | - "INTC": ("intel",), "JNJ": ("johnson & johnson",), |
| 215 | + "CAT": ("caterpillar",), "CRM": ("salesforce",), "CSCO": ("cisco",), |
| 216 | + "CVX": ("chevron",), "DIS": ("disney",), "GOOGL": ("google", "alphabet"), |
| 217 | + "GS": ("goldman",), "HD": ("home depot",), "HON": ("honeywell",), |
| 218 | + "IBM": ("ibm",), "JNJ": ("johnson & johnson",), |
206 | 219 | "JPM": ("jpmorgan", "jp morgan"), "KO": ("coca-cola",), |
207 | | - "MA": ("mastercard",), "MCD": ("mcdonald",), |
| 220 | + "MCD": ("mcdonald",), |
208 | 221 | "META": ("meta platforms", "facebook", "instagram"), "MMM": ("3m",), |
209 | 222 | "MRK": ("merck",), "MSFT": ("microsoft",), "NKE": ("nike",), |
210 | | - "NVDA": ("nvidia",), "PFE": ("pfizer",), "PG": ("procter",), |
| 223 | + "NVDA": ("nvidia",), "PG": ("procter",), |
| 224 | + "SHW": ("sherwin-williams", "sherwin williams"), |
211 | 225 | "TRV": ("travelers",), "TSLA": ("tesla",), "UNH": ("unitedhealth",), |
212 | | - "V": ("visa",), "WBA": ("walgreens",), "WMT": ("walmart",), |
213 | | - "XOM": ("exxon",), |
| 226 | + "V": ("visa",), "WMT": ("walmart",), |
214 | 227 | } |
215 | 228 | SYMBOL_MATCH_MIN_LEN = 3 |
216 | 229 |
|
|
0 commit comments