Version 1.8.4 - Fixed Income Data Integrity, Bulk Delete Reliability, ACF Compatibility & Standards Cleanup
- Reworked Fixed Income migration and synchronization to be idempotent and additive. Existing Market Research repeater rows and existing Fixed Income CPT posts are preserved; no destructive migration is performed.
- Added deterministic Fixed Income identity fingerprints and stable legacy row IDs so an existing instrument is matched and updated instead of creating another CPT.
- Added a short-lived synchronization lock to prevent concurrent admin requests from creating duplicate Fixed Income instruments.
- Reconciles Fixed Income records created by earlier plugin builds without deleting existing posts or repeater data. Existing duplicate CPT records are preserved but marked and excluded from public presentation.
- Added safe synchronization from linked dedicated Fixed Income CPT records back to their original legacy repeater row. Standalone CPT records are not copied into the legacy repeater automatically.
- Fixed bulk deletion for the Market Gainers and Market Losers ACF PRO repeater fields by delegating row removal to ACF's native remove-row control.
- Removed unsupported ACF JavaScript API assumptions and the misleading ACF PRO compatibility error.
- Removed direct DOM deletion, optimistic row hiding, global confirmation overrides, retry scaffolding, and MutationObserver-based repeater rescanning from the bulk-delete workflow.
- Bulk deletion is sequential and only reports a row as deleted after ACF has actually removed it. Failed rows remain visible for manual removal.
- Bulk-selection controls now synchronize through ACF's documented append/remove lifecycle actions.
- Preserved all existing market dashboard, ticker, chart, CSV importer, reports, research content, REST/live-metrics, Fixed Income, settings, shortcode, admin, frontend, ACF field keys, option keys, post types, and stored content.
- No unnecessary plugin files or third-party runtime assets were added.

Version 1.8.3 - Performance, Security & WordPress Standards Hardening
- Replaced frontend live-metrics polling with the WordPress REST API and reduced polling to once per 60 seconds.
- Added a 60-second live-metrics cache with five-minute stale retention and cache-refresh protection.
- Limited live polling responses to the gainers and losers data consumed by the dashboard.
- Added market-report save, trash, and delete cache invalidation so updated data is reflected promptly.
- Retained the historical AJAX action for backward compatibility, but its handler now uses the cached payload and a short per-client throttle.
- Added REST response schema, cache headers, input normalization, and safer public output handling.
- Improved WordPress PHP/HTML coding style in the hardened areas without changing existing data structures, ACF field keys, option keys, post types, shortcodes, charts, reports, or settings.
- Preserved existing stored content and database structures; no destructive migration is performed on upgrade.

- No database schema, post types, field keys, option keys, or stored content were removed or migrated. Existing plugin data is preserved on upgrade.

Spindle Market Research Hub 1.8.3

1.8.3 — REST live metrics and transient caching
- Replaced frontend live-metrics polling through `admin-ajax.php` with a lightweight public REST API endpoint at `/wp-json/spindle-market-research/v1/live-metrics`.
- Reduced live polling frequency from every 30 seconds to every 60 seconds.
- Added a 60-second WordPress Transients API cache for the live gainers/losers payload.
- Added a short cache-refresh lock to prevent a cache stampede when multiple visitors refresh at cache expiry.
- Limited the live endpoint to the gainers/losers data actually consumed by the dashboard instead of rebuilding the full analytics matrix.
- Kept the legacy AJAX endpoint registered for backward compatibility, but changed it to use the same lightweight cached payload.
- Added request de-duplication and hidden-tab protection in the frontend polling controller.
- Preserved the existing dashboard rendering, chart data, ticker, shortcodes, reports, and admin functionality.

Spindle Market Research Hub 1.8.2

1.8.2 — Homepage snapshot spacing refinement
- Tightened the desktop spacing between the NGX All Share Index, Top Gainer, Top Loser, and Market Turnover & Size sections on the homepage.
- Kept the complete market snapshot group centered beneath the market-data timestamp.
- Preserved the existing responsive breakpoints, market-data rendering, shortcodes, JavaScript behavior, and all report/dashboard functionality.

Spindle Market Research Hub 1.8.1

1.8.1 — Current release
- Added consistent spacing between the Research Categories icons and section names in the admin dashboard.
- Standardized report date-column alignment so date headings and populated dates share the same right edge across report directories.
- Replaced non-functional dashboard Analyst Resources links with working Research Hub destinations.
- Preserved existing report View/Download functionality and button labels.
- Restored report inner-tab presentation/interaction rules and standardized report action-button wrapping without removing existing report functionality.
- Removed the obsolete TradingView explanatory line from Market Data Search.
- Synchronized macro inner-tab active state and visible content.
- Hardened ticker fallback, initialization, continuous scrolling, short-list repetition, and responsive left anchoring.
- Added administrator-controlled ticker speed independent of the number of gainers or losers.
- Moved Ticker Speed into its own Ticker Settings section in Research Hub Settings; ticker behavior and saved values remain unchanged.
- Improved Google Fonts controls with Body / Text Font and Heading Font dropdowns plus independent admin-area toggles.
- Kept the general Heading Font default as Poppins while snapshot labels and values use the Body / Text family by design.
- Added and guarded the ACF PRO dependency notice and ACF-powered functionality when the dependency is unavailable.
- Centered the complete four-column market snapshot group on larger screens and reduced the gap between its sections while preserving responsive behavior.
- Removed the duplicate-looking divider around Market Turnover & Size and standardized the intended divider before that section.
- Reworked Volume, Value, and Cap as equal-width metric cells with responsive spacing to prevent overlap on inner pages.
- Kept Volume | Value | Cap on one line with the corresponding values directly underneath; unsupplied metrics are omitted without stray separators.
- Slightly reduced Top Gainer and Top Loser snapshot value font sizes.
- Standardized View Report and Download Report typography and kept both action labels on a single line.
- Tightened dashboard top-gainer/top-loser table spacing and isolated market-mover sizing and presentation styles.
- Extracted remaining dashboard/presentation inline CSS into scoped stylesheet classes without changing the underlying functionality.
- Updated the Settings page title to use the WordPress site title followed by “Research Hub Settings”, with “Market Research Hub Settings” as the fallback when no site title is available.
- Preserved existing shortcodes, report data handling, market-data processing, JavaScript behavior, and frontend/admin functionality.

Spindle Market Research Hub — Release History

1.8.0 — Research Hub dashboard refinement
- Refined the modular research dashboard and tabbed frontend navigation.
- Added the NGX All Share Index chart with 1D, 5D, 1M, and YTD views.
- Added sector performance visualization.
- Added market summary modules covering market capitalization, turnover volume/value, macroeconomic indicators, foreign exchange rates, fixed income, and recent dividends.
- Added price columns to top gainers and top losers.
- Separated frontend and admin JavaScript/CSS responsibilities.
- Added the [market_research_dashboard], [market_research_home_snapshot], and [market_research_price_ticker] shortcodes.
- Improved WordPress packaging, documentation, and release structure.

1.7 — Expanded market summary and research workflow
- Expanded the dashboard beyond reports to include market summaries and structured daily market information.
- Added fixed-income instrument presentation.
- Added macroeconomic indicator presentation.
- Added foreign-exchange rate presentation.
- Added recent dividend tracking.
- Added downloadable market summary and daily price-list resources.
- Expanded the Research Hub navigation to cover the growing research library.

1.6 — Live market data and TradingView integration
- Added live-market stock data presentation and market data search.
- Hooked supported market widgets and ticker displays to TradingView.
- Added dynamic TradingView symbols based on published market gainers and losers.
- Improved market-data discovery from the Research Hub.

1.5 — Research Hub dashboard
- Introduced the Research Hub administration dashboard.
- Added centralized navigation for daily market, equity, sector, macroeconomic, corporate-results, and dividend research.
- Added dashboard activity and research-management summaries.
- Added structured administration for the six core report types.

1.4 — Market ticker
- Added the market ticker experience.
- Improved presentation of market movement and selected market symbols.
- Added reusable market ticker output for frontend placements.

1.3 — Gainers and losers enhancement
- Added stock prices to top-gainer and top-loser displays.
- Improved percentage-change presentation for daily market movement.
- Expanded the daily market data structure for clearer equity snapshots.

1.2 — Six reports and downloads
- Expanded the research library to six report categories.
- Added downloadable research/report resources.
- Added structured report management for daily market, equity, sector, macroeconomic, corporate-results, and dividend content.

1.0 — Initial market reports
- Initial release focused on publishing and organizing market reports in WordPress.
- Established the foundation for structured financial research content.
