# Changelog

All notable changes to the MarketPulse dashboard are documented in this file.

## [Unreleased]

### Added

- Multi-watchlist dashboard row with 3 independent watchlist cards.
- Per-card watchlist selectors with `None` option.
- Persistent card selections (`wl1`, `wl2`, `wl3`) in preferences.
- Expanded debug console messages for fetch lifecycle and card-level status.
- Built-in test utilities (`runSelfTests()`, `testApiCalls()`, `testWatchlistIntegrity()`).
- API Test symbol input support (uses typed symbol, not hardcoded value).
- Documentation set in `docs/`.
- New endpoint `api/getIndex.php` for endpoint-first index cards (`dji`, `nasdaq`, `sp500`, `vix`).
- Scraper button to open DJI raw JSON endpoint directly.
- Dashboard Preferences quick links for index JSON endpoints.

### Changed

- Refresh orchestration now reports partial success/failure with clearer detail.
- Watchlist logging includes selected list and card context.
- Defensive DOM checks added before UI writes.
- Index fetch flow now uses endpoint-first strategy for DJ/NASDAQ/S&P, with provider fallback on failures (including current VIX mapping gap).

### Fixed

- `setSt` / status update related runtime gaps.
- Storage fallback behavior under privacy/tracking restrictions.
- Null DOM write issues causing `Cannot set properties of null` errors.
- Watchlist selector persistence and undefined list selection edge cases.
- `prefs` initialization ordering issue affecting `debugLog`.
- API Test hardcoded `AAPL` fetch path.

---

## Versioning Notes

This project currently uses date/feature-driven updates. Consider semantic version tags once release packaging is introduced.
