Benchmark-sourcing discipline
US equity index closes (S&P, Dow, Nasdaq, Russell, VIX), commodity closes (WTI, Brent, gold), rate closes (10Y, 2Y, DXY), and pipeline-name closing prices live in one place per trading day: 13-Research/Daily-Scans/YYYY-MM-DD-closes.md.
The PM scan writes the file. The portfolio-daily and the next-morning AM scan read it. No other task pulls benchmark closes from the web independently.
This rule exists because the audit log shows seven recurring failures (entries #003, #005, #006, #007, #008, #009, #010) when multiple tasks pulled the same data independently and disagreed. One source of truth removes the surface where the disagreement lives.
The closes file
Path: 13-Research/Daily-Scans/YYYY-MM-DD-closes.md
Written by: alphasteve-daily-deep-value-scan-pm as its first action, before the Market close context section.
Read by:
alphasteve-portfolio-dailyfor SPY close, pipeline-name closes, alpha computationalphasteve-daily-deep-value-scan(next morning) for prior-day closes in the Market context section
Structure:
---
date: YYYY-MM-DD
status: settled | partial | not-yet-settled
written_by: alphasteve-daily-deep-value-scan-pm
retrieved_at: HH:MM ET
sources_used: [source-A-name, source-B-name]
---
# Closes — YYYY-MM-DD
## Indices, rates, commodities
| Instrument | Close | Day Δ | Day Δ % | Source A value | Source B value | Status | Notes |
|---|---|---|---|---|---|---|---|
| S&P 500 | 7,563.63 | +43.27 | +0.58% | 7,563.63 (Yahoo) | 7,563.63 (CNBC) | settled | |
| Nasdaq | 26,917.47 | +242.73 | +0.91% | 26,917.47 (Yahoo) | 26,917.47 (CNBC) | settled | |
| Dow | ... | | | | | | |
| Russell 2000 | ... | | | | | | |
| VIX | ... | | | | | | |
| WTI | ... | | | | | | |
| Brent | ... | | | | | | |
| Gold | ... | | | | | | |
| 10Y yield | ... | | | | | | |
| 2Y yield | ... | | | | | | |
| DXY | ... | | | | | | |
## Pipeline names (watchlist + portfolio + recent thesis folders)
| Ticker | Close | Day Δ % | Source A | Source B | Status |
|---|---|---|---|---|---|
| SPY | 754.66 | +0.56% | 754.66 (Yahoo) | 754.66 (Google) | settled |
| PLTR | 141.51 | -1.39% | 141.51 (Yahoo) | 141.51 (Google) | settled |
| CAG | 12.68 | +0.79% | 12.68 (Yahoo) | 12.68 (Google) | settled |
| ... | | | | | |
## Discipline used
- Each row cross-verified against two independent sources (within 0.05%)
- Sign of day's change checked against today-vs-yesterday arithmetic in the same source
- Pulled at HH:MM ET, after 4:30 PM cash settlement
- Status `partial` if only one source available; status `not-yet-settled` if pulled before 4:30 PM ET
The two rules for the writer (PM scan)
1. Cross-verify against two independent sources
Every row needs two independent values that agree within 0.05%. If they disagree, the row gets status partial, both values are logged, and an explanatory note names what conflicted.
Acceptable source pairs:
- Yahoo Finance + CNBC same-day market wrap
- Trading Economics + Investing.com daily close
- WSJ market data + Yahoo Finance
- Official CME settlement + TradingEconomics
Not acceptable as a source: live aggregator widgets without date confirmation, social media reports.
2. Direction sanity check before publishing each row
For every instrument, compute today_close - yesterday_close explicitly and verify the sign matches the % change shown in the source. If they disagree, the source has stale data — find a different source.
The two rules for readers (portfolio-daily, AM scan)
3. Do not pull benchmark closes from the web independently
If the closes file exists for today, read it. Do not duplicate the work. Do not "double-check" with a fresh web pull — that re-introduces the disagreement the closes file exists to prevent.
4. Handle missing or partial data explicitly
If the closes file is missing for the date you need, or a row is marked partial or not-yet-settled, use the previous trading day's close as the reference value and explicitly note the gap in your output. Do NOT fabricate today's close from a fresh web pull.
Audit-log entries this closes
Entries #003, #005, #006, #007, #008, #009, #010 — all the same fault, all on the surface where multiple tasks pulled the same data independently. One canonical closes file removes that surface.
Linked
- sources-policy — citation tiers (this file extends the tier policy to benchmark closes)
- voice-and-style — sentence-level discipline
- audit-log — the failure record this file is designed to close