=== Artur Opportunity Radar ===
Contributors: basicus
Tags: opportunity discovery, equities, bitcoin, market data, decision support
Requires at least: 7.0
Tested up to: 7.0
Requires PHP: 8.0
Stable tag: 0.1.42
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A private, source-aware market opportunity radar for human investigation.

== Description ==

Artur Opportunity Radar runs bounded market scans and records normalized observations, reproducible evidence, and Opportunity Cards. Cards explain why an instrument surfaced, show coverage and limitations, and hand the operator off to a governed TradingView symbol for manual chart inspection.

Authenticated administrators can review the Current Recommendation Set in the native WordPress Opportunity Radar screen. A terminal scan of every enabled Feed Module publishes its quality-gated cards when the shared interpretation capability is available, while retaining bounded source or evidence errors; a shared capability failure remains diagnostic and does not replace the last valid set. Bounded or source-specific smoke scans retain their diagnostic evidence without replacing it. Anonymous frontend requests are redirected to WordPress authentication, and the site emits deny-all crawler guidance and no-index headers.

The plugin does not execute trades, provide target prices, or treat missing market coverage as a neutral result.

The enabled Feed Modules cover Bitcoin on Binance, the EIA's daily Henry Hub natural-gas spot price, and listed-company disclosures from the SEC in the United States, the FCA National Storage Mechanism in the United Kingdom, JPX/TSE TDnet in Japan, HKEXnews in Hong Kong, Financial Supervisory Service DART for KOSPI-listed South Korean equities, and bounded issuer sets on Oslo Børs and Nasdaq Stockholm through authorized public issuer channels. The Oslo set includes Equinor through its official stock-market announcements. The Bitcoin screen evaluates completed Binance BTC/USDT daily periods and displays the completed close in its source-native USDT quote unit without currency conversion. The Henry Hub screen evaluates completed EIA daily prices in source-native USD/MMBtu and uses the same completed observations for its local chart. The shared equity-disclosure recommendation Module reads bounded source document text, while every regulator, exchange, or issuer channel retains its own discovery, identity, URL-validation, and provenance Adapter. EIA, Equinor, DART, and both Nordic issuer feeds require no API key.

Feed providers register complete Feed Modules through the `artur_opportunity_radar_feed_modules` Interface. Each module owns bounded Instrument discovery, its Source Adapters, and its Screen Families. Administrators enable installed modules under Opportunity Radar > Feeds, so the scan core, scheduler, repository, and presentation do not change when another provider module is installed.

Opportunity Cards preserve the real market pair and its source-native quote unit. Values, returns, and volatility remain attached to the actual opportunity pair; the plugin does not convert one pair into another for display.

== External services ==

Listed-equity chart snapshots use Yahoo Finance's public chart data without an API key. The plugin sends the mapped market symbol, the site server's IP address, and its plugin user agent to Yahoo Finance during a Scan Run; it does not send WordPress user or visitor data. See Yahoo's [Terms of Service](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html) and [Privacy Policy](https://legal.yahoo.com/us/en/yahoo/privacy/index.html).

Bitcoin chart snapshots reuse the completed Binance BTC/USDT observations already acquired by the enabled Binance Feed Module.

Henry Hub chart snapshots reuse the completed daily spot-price observations acquired from the U.S. Energy Information Administration's public HTML table without an API key. During a Scan Run the plugin sends the site server's IP address and plugin user agent to EIA; it does not send WordPress user or visitor data. See EIA's [Privacy Program](https://www.eia.gov/about/privacy_policy.php).

== Installation ==

1. Install and activate the plugin on a private WordPress site.
2. Run a bounded scan with `wp artur-radar scan`.
3. Open Opportunity Radar in WordPress administration to review the cards and their TradingView inspection mappings.

== Changelog ==

= 0.1.42 =
* Keep Scan Runs single-flight and recover orphaned runs after process termination.
* Finalize interrupted scans without publishing partial Current Recommendation Sets.
* Keep Artur on the permanent managed updater channel.

= 0.1.41 =
* Notify the site administrator once per new shared ChatGPT provider outage and re-arm the alert after a healthy authoritative Scan Run.

= 0.1.40 =
* Keep a complete Scan Run from replacing the Current Recommendation Set when the shared WordPress AI interpretation capability is unavailable.
* Persist the terminal publication decision and retain the diagnostic errors without creating fallback recommendations.

= 0.1.39 =
* Validate the requested Favorite state at the native WordPress Admin Adapter.

= 0.1.38 =
* Replace the internal Source filter with a company-name filter across asset and Favorites tabs.
* Expose one capability-checked, idempotent user-Favorite operation through the managed WordPress ability seam.

= 0.1.37 =
* Keep Favorites filtering in one fixed prepared database query for bounded per-user instrument lists.

= 0.1.36 =
* Add Equinor to the bounded Oslo equity set through its official keyless stock-market announcements.
* Add private per-user Favorites with a nonce-protected card action and a dedicated Favorites tab.
* Redirect authorized users directly to Opportunity Radar after login while leaving other roles on their normal destination.

= 0.1.35 =
* Populate asset classes for existing Opportunity Cards during upgrade so every asset tab works before the next scan.

= 0.1.34 =
* Add Henry Hub natural gas as a default commodity asset from the official keyless EIA daily spot-price table.
* Preserve USD/MMBtu, location-specific limitations, and a verified `FRED:DHHNGSP` TradingView handoff.
* Reuse completed scalar daily prices for the card's local chart without treating them as OHLCV candles.
* Add top-level tabs for all assets, equities, crypto, and commodities while retaining the detailed filters.

= 0.1.33 =
* Prefer an issuer's common-share SEC identity over warrant identities when the official ticker file lists both.
* Keep chart snapshots attached to the same primary listed Instrument represented by the disclosure.

= 0.1.32 =
* Replace exchange-restricted TradingView embeds with local six-month SVG chart snapshots on every Opportunity Card.
* Reuse completed source-native OHLCV observations and acquire keyless listed-equity chart data only during Scan Runs.
* Verify explicit Yahoo Finance symbol mappings for the United States, London, Tokyo, Hong Kong, KOSPI, Oslo, and Stockholm.

= 0.1.31 =
* Show an official TradingView Mini Chart for each Opportunity Card using its governed TradingView symbol.
* Load each display-only chart only when its card approaches the viewport.

= 0.1.30 =
* Show the Feed Module's readable market label on every Opportunity Card while retaining the stable Source ID for filtering and provenance.
* Show a Source-Adapter-owned readable Instrument name alongside the stable market key.
* Read DART's official English company name without an API key and preserve the original Korean name in evidence.

= 0.1.29 =
* Add keyless Nasdaq Stockholm coverage for Atlas Copco, Investor, Ericsson, Sandvik, and Skanska through authorized issuer regulatory RSS newsrooms.
* Preserve `OMXSTO:*` ticker identity and distinguish the bounded issuer set from complete Nasdaq Stockholm coverage.
* Reuse one Cision RSS acquisition and provenance Adapter across the Oslo and Stockholm market modules.

= 0.1.28 =
* Publish valid quality-gated recommendations from a complete active-market scan even when individual documents are rejected or a source reports a bounded error.
* Keep those errors visible in Scan Run status instead of turning valid recommendations from every other market into an empty view.
* Record the real terminal completion time for each Scan Run.

= 0.1.27 =
* Keep the Current Recommendation Set anchored to the latest successful complete scan of every enabled market.
* Record bounded and source-specific smoke scans as diagnostic history without replacing or emptying recommendations from other markets.
* Invalidate the recommendation cache when a scan finishes, including complete scans that produce no cards.

= 0.1.26 =
* Add keyless Oslo-listed equity coverage for Aker BP, Kongsberg Gruppen, Orkla, Gjensidige, Storebrand, and Veidekke through their authorized regulatory RSS newsrooms.
* Preserve OSL ticker identity and clearly distinguish the bounded issuer set from complete Oslo Børs coverage.

= 0.1.24 =
* Follow each DART filing's declared document type instead of forcing an incompatible viewer format.
* Decode DART's declared Korean CP949/EUC-KR document text to UTF-8 before evidence extraction.

= 0.1.23 =
* Add keyless official FSS DART coverage for bounded KOSPI-listed equity disclosures.
* Preserve KRX ticker identity and read the complete official DART document through the shared source-grounded recommendation seam.

= 0.1.21 =
* Read JPX and HKEX PDFs through the bounded self-hosted document-text Adapter Interface.

= 0.1.20 =
* Add independent official FCA UK, JPX/TSE Japan, and HKEX Hong Kong equity disclosure Feed Modules.
* Generalize Luna's source-grounded equity recommendation seam so every regulator retains its own Adapter without duplicating recommendation policy.
* Extract bounded JPX and HKEX PDF text through the self-hosted Poppler runtime before Luna evaluates the disclosure.

= 0.1.19 =
* Express Bitcoin drawdowns as positive fall magnitudes in the Norwegian rationale.

= 0.1.18 =
* Present deterministic Bitcoin rationale, metrics, limitations, next inspection, and coverage labels in Norwegian Bokmål.

= 0.1.17 =
* Replace the admin table with full-width responsive recommendation cards and adaptive filters and actions.

= 0.1.16 =
* Keep every Luna explanation paragraph, evidence item, and label at 18px/400 despite WordPress table typography overrides.

= 0.1.15 =
* Increase the complete Luna explanation body to 18px while retaining its lighter weight.

= 0.1.14 =
* Use a lighter recommendation weight and enlarge the equally light recommendation-details label for easier scanning.

= 0.1.13 =
* Generate Luna recommendation explanations, risks, and next inspections in Norwegian Bokmål while preserving official evidence quotes verbatim.

= 0.1.12 =
* Increase Luna recommendation text to 18px and expanded recommendation details to 16px with more readable line spacing on the Opportunity Radar screen only.

= 0.1.11 =
* Add a source-grounded Ask Luna MCP Interface over current recommendations for comparison, follow-up questions, uncertainty, and exact evidence references.
* Keep raw SEC document text internal and return a compact recommendation read model through MCP.

= 0.1.10 =
* Expose latest Scan Run status and current quality-gated Luna recommendations through read-only managed MCP abilities.
* Return complete recommendation evidence and model provenance without requiring WordPress dashboard navigation.

= 0.1.9 =
* Let the managed scan Interface bound Instruments per Feed Module for short operator smoke scans while scheduled scans retain the complete configured universe.
* Let Luna classify SEC events by investigation priority and suppress filings it finds non-actionable instead of presenting every filing as an opportunity.
* Suppress low-confidence recommendations and reserve Investigate now for high-confidence, source-grounded events.
* Require each surfaced recommendation to explain why the newly disclosed timing or consequence matters now rather than merely restating the filing.

= 0.1.8 =
* Keep Luna generation bounded by the filing package and strict output schema without sending the unsupported max-output-token parameter.

= 0.1.7 =
* Resolve SEC inline-XBRL viewer links to their canonical document inside the same official accession directory.

= 0.1.6 =
* Use the connected ChatGPT provider and GPT-5.6 Luna explicitly for SEC filing interpretation.
* Expose Luna through the provider's public model-catalog filter without silently selecting another provider or model.

= 0.1.5 =
* Read a bounded official SEC filing package, including relevant exhibits, before producing an Opportunity Card.
* Interpret filing content through the WordPress AI Client with structured, source-grounded evidence and explicit risks.
* Preserve fetched source observations when interpretation fails and never show older cards as current after a failed scan.

= 0.1.3 =
* Follow and display Binance BTC/USDT directly in USDT without BTC/EUR or currency-conversion requests.
* Keep the early-development release line in 0.1.x.

= 0.6.2 =
* Show monetary evidence in USD without presenting USDT as US dollars.
* Explain SEC filing items from source-native Item metadata instead of a hardcoded event taxonomy.
* Group Opportunity Cards by priority, filter them by Source or Instrument, page beyond 50 results, and collapse detailed evidence for faster scanning as the list grows.

= 0.5.3 =
* Expose the existing Scan Run through the WordPress Abilities API for managed operation.
* Share one configured Scan Service between WP-CLI and Abilities API Adapters.

= 0.5.1 =
* Add the configuration-driven Feed Module Registry and native feed settings screen.
* Limit crypto discovery to Bitcoin on Binance and remove superseded crypto and foreign-exchange behavior.
* Add bounded official SEC 8-K discovery for Nasdaq and NYSE issuers with direct filing evidence links.
* Let provider modules supply their own Instrument discovery and Screen Families without scan-core changes.

= 0.4.0 =
* Add Source-owned bounded Instrument discovery with EUR provenance.

= 0.3.1 =
* Keep EUR conversion failures fixed to their owning Source Adapter context.

= 0.3.0 =
* Use EUR as the sole Reporting Currency for displayed monetary amounts.
* Preserve each opportunity's real pair and pair-native return and volatility evidence.
* Attach source-specific EUR conversion provenance to every displayed base value.

= 0.2.3 =
* Complete quality-tool documentation for the versioned schema change.

= 0.2.2 =
* Document the owned one-time schema migration for WordPress database quality tooling.

= 0.2.1 =
* Complete the versioned Observation-table migration for scalar evidence without legacy OHLCV values.

= 0.2.0 =
* Store source-native Completed Observations without representing scalar evidence as OHLCV candles.
* Keep coverage, evidence, peer comparison, and card limitations scoped to each Screen Family.
* Render screen-specific evidence through one authenticated Opportunity Card presentation.

= 0.1.2 =
* Show only the most recent Scan Run in the authenticated Opportunity Radar screen.

= 0.1.1 =
* Add direct-access protection to internal plugin files.
* Cache the authenticated Opportunity Card read model and invalidate it after new cards are stored.
* Keep Source transport errors useful without exposing upstream response details.

= 0.1.0 =
* Add the first crypto market-state scan through public market data.
* Persist Scan Runs, normalized completed observations, Derived Evidence, and Opportunity Cards in plugin-owned tables.
* Add the deterministic `wp artur-radar scan` Interface.
* Add the authenticated native WordPress Opportunity Radar screen and private-site crawler controls.
