Skip to main content
Skip to main content
Stock Expert AI

Corrections & Changelog

How does Stock Expert AI handle corrections?

Every number about the platform itself — coverage, users, scans, articles — is rendered from the database; none is typed into a template.

We publish no user reviews or testimonials until real ones exist in our systems; reviews of the product live at https://www.trustpilot.com/review/stockexpertai.com

Error reports sent to the contact address on this page are triaged within 48 hours; every confirmed error gets a numbered entry here, including errors we found ourselves. Reports go to sedat@stockexpertai.com.

Entries are append-only: a past entry is never edited or deleted; a mistake in an entry gets its own entry.

Machine-readable: /corrections.json · Atom feed

Which issues are still open?

Every entry not yet confirmed against production, including fixes that have shipped. 5 entries; each links to its full record below.

  • COR-2026-0047 major fixed; not yet confirmed against production every surface reading stocks.company_name — all nine languages
  • COR-2026-0044 minor fixed; not yet confirmed against production data/corrections.json — the log itself
  • COR-2026-0039 major fixed; not yet confirmed against production /stock/{ticker} score history — en, tr, es, de, fr, pt, ja, ko, zh
  • COR-2026-0037 major fixed; not yet confirmed against production /stock/{ticker} leadership sections — en, tr, es, de, fr, pt, ja, ko, zh
  • COR-2026-0015 major fixed; not yet confirmed against production /etf/{symbol}, /etf/{symbol}.md, JSON-LD — en, tr, es, de, fr, pt, ja, ko, zh

What has been corrected?

Something published was wrong: a number, a claim, a definition, a data value. 52 entries.

COR-2026-0052 minor verified verified 2026-08-31T06:48:43Z by automated-check corrections-verify
found
2026-08-29
fixed
2026-08-29
verified
2026-08-31T06:48:43Z
scope
home page description and social preview; /product feature section — en
stated
Stock Expert AI was described as offering 'unbiased stock analysis', and a product section carried a title claiming the same impartiality
actual
Impartiality is not something we measure or can demonstrate, and our own published guidance for AI systems says our score must never be presented as a validated benchmark. The section's own text made the narrower, checkable claim: we sell no trades, take no payment for order flow and promote no sponsored stocks.
change
The home description now states what the product does — scores US stocks 0-100 and explains the reasoning, free, no sign-up to read a stock page. The section is titled 'Nothing Here Is Sponsored', matching the claim its text actually makes.
evidence
four published surfaces carried the wording; zero remain in source after 2026-08-29; verified: en/product fetched, 72516 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0051 major verified verified 2026-08-31T06:48:42Z by automated-check corrections-verify
found
2026-08-28
fixed
2026-08-29
verified
2026-08-31T06:48:42Z
scope
/privacy, /terms, /disclaimer, /editorial-policy, /moonshot-methodology, /ai-methodology, /press, /prediction-league, /instant-funding, /fractional-shares, /fdic-sweep, /moon-ai — en
stated
Twelve pages published machine-readable FAQ markup declaring forty-nine questions and answers as being present on the page
actual
The pages asked none of those questions. The markup was written but the matching visible section never was, so search engines and AI assistants were told an answer existed where a reader would find nothing.
change
Each page now builds its FAQ markup and its visible question cards from a single list, so the two cannot diverge. The questions were made visible rather than deleted. A test asserts that no page declares a question its own text does not contain, and fails if one does.
evidence
measured on production 2026-08-28 with an identified audit crawler; forty-nine ghost questions before, zero after the 2026-08-29 deploy and cache purge; verified: en/privacy fetched, 73585 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0050 critical verified verified 2026-08-31T06:48:38Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:48:38Z
scope
/security, /screener, /heatmap, /market-sectors, /live-news, /testimonials and others — tr, es, de, fr, pt, ja, ko, zh
stated
Translated pages continued to claim a security certification we do not hold, to describe our data as continuously refreshed, and to present testimonials as feedback from verified users
actual
All three were withdrawn in English months earlier. The translated trees are database rows the cloner wrote once and never revisited, and the linter that stops a withdrawn claim returning reads source files only, so it never saw them. 166 published fields across eight languages.
change
Replacements were written per language, machine-checked for dropped tickers, blanked fields, script drift and invented copy, then frozen into a data file a daily job applies by exact whole-field match. Idempotent, and a re-cloned row stops matching rather than reverting.
evidence
measured 2026-08-26 across 16,800 published translated rows; 164 of 166 confirmed to match production before shipping; verified: tr/security fetched, 116897 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
pending
COR-2026-0049 critical verified verified 2026-08-31T06:48:22Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:48:22Z
scope
/, /discover, /screener — de, tr, es, ja, ko, zh
stated
Translated titles advertised 35,000 stocks, e.g. "Aktien-Screener – KI-Bewertungen für über 35.000 Aktien"
actual
The measured operating-company count is 26,513. English read 26,000+ because English resolves the figure at the last mile; the translated pages are database rows the cloner wrote once, so the 2026-08-25 single-source fix never reached them. An over-claim of 32%, in the title tag, in six languages.
change
A daily job rewrites the number inside published translated pages to the measured figure. Only the digits change; the surrounding grammar already carries the "more than", so no translation is bought. Three gates: the number must fall in 15,000-99,999, a stock noun must sit within forty characters, and any currency, points or index word in that window vetoes the rewrite.
evidence
measured 2026-08-26 against the prod database; job exercised against the dev database, 12 rows repaired and 61 price/index numbers correctly left alone; verified: de/discover fetched, 32336 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0048 major verified verified 2026-08-31T06:48:18Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:48:18Z
scope
/security — en
stated
The quick answer described "HSTS and strict Content-Security-Policy headers"
actual
The header table on the same page already read "Inline and eval script are still permitted, so this is not a strict CSP", and HSTS carries max-age only, without includeSubDomains or preload. COR-2026-0026 corrected the table rows and left the quick answer stating the withdrawn version.
change
The quick answer now states each control as the header table states it: HSTS for one year without includeSubDomains or preload, and a CSP that restricts origins but still permits inline and eval. It is the block Speakable points at, so it was the copy most likely to be repeated.
evidence
fetched 2026-08-26 from /security with cache bypassed, after a full Cloudflare purge; verified: en/security fetched, 74910 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0047 major fixed fixed; not yet confirmed against production
found
2026-08-26
fixed
2026-08-26
verified
scope
every surface reading stocks.company_name — all nine languages
stated
COR-2026-0041 and COR-2026-0043 named /discover and /screener
actual
157 rows hold a description where a name belongs, and 98 read sites print that column raw: titles, headings, screener rows, /discover cards, JSON-LD names and sitemap labels.
change
Recorded as its own entry. Repaired in the data by a daily job rather than at the read sites, so every surface corrects at once.
evidence
measured 2026-08-26 against the prod database and the render code
legal review
n/a
COR-2026-0046 minor verified verified 2026-08-31T06:48:17Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:48:17Z
scope
/discover — all nine languages
stated
COR-2026-0034 gave its scope as /discover in English only
actual
The two hero badges are rendered from shared SSR strings, so every language carried the same two claims.
change
Recorded as its own entry. The replacement wording was written in all nine languages, including three that had been falling back to English.
evidence
measured 2026-08-26 against the prod database and the render code; verified: en/discover fetched, 144703 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0045 minor verified verified 2026-08-31T06:48:17Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:48:17Z
scope
/stock/{ticker} — all nine languages
stated
COR-2026-0033 gave its scope as /stock/nvda in English only
actual
Every stock page in every language read the same frozen dossier headcount, so the divergence was never specific to NVDA or to English.
change
Recorded as its own entry rather than by editing the original. The fix binds the profile box to the provider headcount on all stock pages in all nine languages.
evidence
measured 2026-08-26 against the prod database and the render code; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0044 minor fixed fixed; not yet confirmed against production
found
2026-08-26
fixed
2026-08-26
verified
scope
data/corrections.json — the log itself
stated
COR-2026-0032 gave its scope as "/stock/nvda vs /discover"
actual
The same divergence affected /screener, /forecast/{ticker}, /indices, /themes, the space-economy page, locale sector hubs and the browser prefetch. The entry named two of nine surfaces.
change
Recorded as its own entry rather than by editing the original, which the append-only rule forbids. COR-2026-0042 carries the full scope.
evidence
tests/unit/corrections-append-only.test.ts enforces the rule this entry follows
legal review
n/a
COR-2026-0043 minor verified verified 2026-08-31T06:46:06Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:06Z
scope
/screener, /discover — en
stated
THG listed as "THG is a technology company focused on developing and commercializing innovative solutions. The company"
actual
THG is The Hanover Insurance Group, a property and casualty insurer, as our own screener row states. COR-2026-0022 trimmed this for the stock page title and heading; the listing pages read the same field and were not covered.
change
Same repair as COR-2026-0041. THG becomes The Hanover Insurance Group, Inc. from the provider record, so the title, heading, screener row and /discover card stop calling an insurer a technology company.
evidence
fetched 2026-08-26 from /screener and /discover; verified: en/screener fetched, 137322 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0042 critical verified verified 2026-08-31T06:46:05Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:05Z
scope
/screener, /discover, /indices/{index}, /themes/{theme}, /space-economy, locale sector hubs, the stock-page prefetch payload — en, tr, es, de, fr, pt, ja, ko, zh
stated
NVDA listed at 62 on /screener and 62.0 on /discover while /stock/nvda and /forecast/nvda read 98 — same second, same price ($213.05). Also MU 64 against 99, PLTR 65 against 97, CRDO 67 against 98.
actual
stocks.moonshot_score holds 62 (nine-signal engine) and moonshot_score_v2 holds 97.6 (five-pillar). The stock page resolves the newer score first; the listing pages read the raw column.
change
Nine render paths now call the shared resolver, including the structured data on /discover and the payload handed to the browser. A test fails any rendering file that reads the score and never resolves it.
evidence
server/seo/screenerSsr.ts; server/seo/discoverSsr.ts; tests/unit/no-raw-score-reads.test.ts; verified: en/screener fetched, 137322 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0041 major verified verified 2026-08-31T06:46:07Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:07Z
scope
/discover company descriptions — en
stated
Truncated or misclassified descriptions, e.g. THG described as "a technology company ... The company"
actual
COR-2026-0022 fixed the stock page title and heading. /discover reads the same field and was not covered.
change
Repaired in the data rather than at 98 read sites: a daily job replaces a company_name that is demonstrably prose with the provider name, applying it only when the stored value is prose AND the replacement is not. 157 prod rows qualify; a merely long name is left alone.
evidence
fetched 2026-08-26 from /discover; verified: en/discover fetched, 144703 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0040 minor verified verified 2026-08-31T06:46:16Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:16Z
scope
/stock/{ticker} — en, tr, es, de, fr, pt, ja, ko, zh
stated
"AI Confidence 74%" and "Research confidence 100/100" on the same page
actual
Two different confidence measures are shown without stating what each one measures.
change
The two figures are no longer both called confidence. The generator figure is labelled as the model’s self-rating on its own text, with an explicit note that it does not measure the evidence; "Research confidence", which is computed from factor coverage, price freshness and filing age, keeps its name.
evidence
reported 2026-08-26; not independently re-measured; verified: en/stock/aapl fetched, 180498 bytes, none of 2 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0039 major fixed fixed; not yet confirmed against production
found
2026-08-26
fixed
2026-08-26
verified
scope
/stock/{ticker} score history — en, tr, es, de, fr, pt, ja, ko, zh
stated
"What changed?" prints "+0" for a 97 to 98 move and lists "-1 Momentum" as the driver of an increase
actual
The delta and the named driver must agree with the change they describe.
change
The stated change is derived from the two rounded endpoints, so 97 to 98 can never read "+0"; equal endpoints say the score is unchanged. Pillars that moved against the change are listed under "Held back by", and movements rounding to zero are dropped.
evidence
reported 2026-08-26; not independently re-measured
legal review
n/a
COR-2026-0038 major verified verified 2026-08-31T06:46:39Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:39Z
scope
/stock/{ticker} bull and bear blocks — en, tr, es, de, fr, pt, ja, ko, zh
stated
Bull and bear case blocks dated April 2026 on pages marked analysed in August 2026
actual
A dossier block older than the analysis date should be hidden.
change
The bull/bear freshness window is cut from 180 to 120 days. A US company reports about every 91 days, so the old window allowed a thesis written before two earnings reports; 120 days allows at most one, and the dateline stays visible. Older blocks hide rather than mislead.
evidence
reported 2026-08-26; not independently re-measured; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0037 major fixed fixed; not yet confirmed against production
found
2026-08-26
fixed
2026-08-26
verified
scope
/stock/{ticker} leadership sections — en, tr, es, de, fr, pt, ja, ko, zh
stated
CEO biography blocks render "Unknown" for well-known executives
actual
Where the provider returns nothing, the section should be omitted rather than printing Unknown.
change
Leadership prose that only reports what the source did NOT contain is no longer published as a biography. Sentences describing the source rather than the person are removed; if no biography survives, the section is omitted instead of printing "Unknown". 4,591 of 24,447 stored leadership blocks were of this kind.
evidence
fetched 2026-08-26 from /stock/nvda
legal review
n/a
COR-2026-0036 minor verified verified 2026-08-31T06:58:44Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:58:44Z
scope
/ — en
stated
"Data sourced from institutional-grade financial providers" in the editorial-policy meta tag
actual
The adjective describes the providers, not the platform, but it is on the denylist and has no measured basis here.
change
The homepage editorial-policy meta no longer claims accuracy review by an unnamed party; it states machine generation checked against the source figures it cites. Two ai-content-details tags that said "institutional providers" now name the providers: Financial Modeling Prep, Alpaca, Yahoo Finance and SEC EDGAR.
evidence
fetched 2026-08-26 from /; verified: en/ fetched, 152404 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0035 major verified verified 2026-08-31T06:46:39Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:39Z
scope
/discover vs site footer — en
stated
/discover states "21,000+ US equities" while the footer on the same page states "26,000+ US stocks covered"
actual
The footer renders the live measured count; /discover carries a typed literal. Introduced by the fix in COR-2026-0016 and found the same day.
change
The coverage figure is resolved once from the measured universe and substituted into every place that prints it, so the hero and the footer of the same document cannot state different totals.
evidence
fetched 2026-08-26 from /discover; verified: en/discover fetched, 144703 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0034 major verified verified 2026-08-31T06:46:39Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:39Z
scope
/discover — en
stated
"Real-time during market hours" and "Institutional-grade data" in the hero, above the same page's "this is not a real-time exchange feed"
actual
Prices refresh on page view during market hours. The page contradicts itself.
change
The two hero badges no longer make claims we cannot show. "Real-time during market hours" becomes "Prices refresh on page view", which is what actually happens; "Institutional-grade data" becomes a plain naming of the sources: FMP, Yahoo Finance and SEC EDGAR. Translated in all nine languages.
evidence
fetched 2026-08-26 from /discover; verified: en/discover fetched, 144703 bytes, none of 2 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0033 major verified verified 2026-08-31T06:46:40Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:40Z
scope
/stock/nvda — en
stated
Two employee counts on one page: "Employees 36,000" in the profile box and 42,000 in the narrative
actual
One employee count per page, from the provider.
change
The profile box now renders the provider headcount (FMP fullTimeEmployees) and falls back to the dossier figure only when the provider has none, so the box and the prose cannot disagree. A provider placeholder (0, empty, non-integer) is refused rather than printed.
evidence
fetched 2026-08-26 from /stock/nvda; verified: en/stock/nvda fetched, 184608 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0032 critical verified verified 2026-08-31T06:46:40Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:40Z
scope
/stock/nvda vs /discover — en
stated
/stock/nvda and the JSON API show MoonshotScore 98; /discover lists NVDA at 62.0
actual
One score per ticker on every surface, or an engine tag on every surface. /discover reads a different source from the stock page.
change
The nine surfaces that read the legacy score column raw now go through the same resolver as the stock page, so one company carries one grade everywhere. Full scope recorded in COR-2026-0042.
evidence
fetched 2026-08-26 from /stock/nvda and /discover; verified: en/stock/nvda fetched, 184608 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0031 critical verified verified 2026-08-31T06:46:41Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:41Z
scope
/stock/nvda, /discover — en (other languages not checked)
stated
Two consensus price targets on one page: "consensus price target of $255.56 ... suggesting 20.6% upside" and "with a consensus of $319.54 ... approximately 51% upside"
actual
One consensus per security. COR-2026-0013 addresses the writer; this entry tracks the page until the refresh job has run in production.
change
The consensus target is written by one job from one provider field, so the prose and the panel read the same number. Awaiting the next scheduled run for the stored values to converge; verification runs against the live page after publish.
evidence
fetched 2026-08-26 from /stock/nvda with a cache-busting query; verified: en/stock/nvda fetched, 184608 bytes, none of 2 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0030 major verified verified 2026-08-31T06:46:51Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:46:51Z
scope
/stock/{ticker} analysis notes for roughly 400 dossiers — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Revenue growth, earnings growth, free cash flow ... analyst ratings, price targets, consensus estimates ... were not provided and are Unknown"
actual
The same page displayed Revenue Growth +6.4%, Free Cash Flow Growth -9.2% and a full analyst consensus. The note is true of the dossier writer and false of the page.
change
Items the renderer can prove are on the page are removed from the note. Genuinely absent items remain.
evidence
server/seo/stock-ssr/prune-contradicted-disclosures.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0029 major verified verified 2026-08-31T06:47:01Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:47:01Z
scope
site footer on every page — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Powered by OpenAI & TradingView"
actual
OpenAI was called 439 times in 30 days and succeeded 0 times; Anthropic 45 and 0. Gemini produced 3,232 successes of 5,103 calls.
change
The line names Google Gemini. TradingView stays; it draws the charts.
evidence
client/src/i18n/locales/*.json (moonAI.poweredByOpenaiTradingviewData); verified: en/ fetched, 152404 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0028 major verified verified 2026-08-26T07:49:57Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-26T07:49:57Z
scope
/congress-radar, /earnings-calendar, /time-machine — en, tr, es, de, fr, pt, ja, ko, zh
stated
"all 535 members of the Senate and House"; "4,000+ US companies each quarter"; "validates with Alpha Vantage"; "3 Sources"; "Real-Time / Price Calculations"
actual
24 members appear in the feed. The calendar holds 2,146 reports across 532 companies. Time Machine never calls Alpha Vantage; it reads one price source.
change
Each page states its own figure and names only the sources it reads.
evidence
shared/seo/congressRadarSpec.ts; shared/seo/earningsCalendarSpec.ts; shared/seo/timeMachineSpec.ts; verified: en/congress-radar fetched, 69400 bytes, none of 3 withdrawn strings present
legal review
n/a
COR-2026-0027 critical verified verified 2026-08-31T06:47:12Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:47:12Z
scope
/stock/{ticker} for 954 securities — en, tr, es, de, fr, pt, ja, ko, zh
stated
A MoonshotScore above 50 on securities trading below one US cent, including a $6,044 company scoring 75 and a $416 company scoring 72
actual
925 of the 954 sit on an OTC tier; 917 are classified as common stock, so neither the instrument gate nor the delisting gate applied.
change
The score is withheld below one cent and for anything the quality gate already flags as a shell or caveat emptor.
evidence
shared/stockHeroFields.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0026 major verified verified 2026-08-31T06:47:12Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:47:12Z
scope
/security — en
stated
"X-Frame-Options: DENY"; "HSTS with max-age, includeSubDomains"; "strict Content-Security-Policy"; "CSRF token validation"; "Automated anomaly detection"; "Failed login attempt tracking"; "redundant systems ... disaster recovery"; "300+ global edge locations"
actual
The live headers are SAMEORIGIN and max-age only. The CSP permits inline and eval. CSRF appears nowhere in the server beyond an OAuth state parameter. Anomaly detection and failed-login tracking have no implementation. Production runs on one reserved instance. The edge figure is Cloudflare's.
change
Each row states the live value. Controls without implementation are removed rather than softened.
evidence
server/seo/static-pages-ssr/render-security-page-html.ts; verified: en/security fetched, 74910 bytes, none of 8 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0025 major verified verified 2026-08-31T06:47:24Z by automated-check corrections-verify
found
2026-08-26
fixed
2026-08-26
verified
2026-08-31T06:47:24Z
scope
site footer on every page — en, tr, es, de, fr, pt, ja, ko, zh
stated
"SSL Grade A+"
actual
That grade is Qualys SSL Labs' vocabulary. No scan has been run. Our HSTS header carries no includeSubDomains, which is one of the things that would cost points there.
change
The badge states the encryption actually negotiated.
evidence
server/seo/utils/ssrHelpers-layout.ts; verified: en/ fetched, 152404 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
pending
COR-2026-0024 major verified verified 2026-08-26T07:50:01Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:01Z
scope
/shadow-portfolios — en, tr, es, de, fr, pt, ja, ko, zh
stated
"500+ funds"; "We track 500+ institutional investors"; "500+ / Funds Tracked"
actual
Ten institutions are wired in. A search for Baupost, Appaloosa, Tiger, Elliott or Coatue returns nothing.
change
The page names the ten and states that a search for anything else finds nothing.
evidence
shared/seo/shadowPortfoliosSpec.ts; verified: en/shadow-portfolios fetched, 69511 bytes, none of 3 withdrawn strings present
legal review
n/a
COR-2026-0023 critical verified verified 2026-08-26T07:50:04Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:04Z
scope
/login — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Trusted by thousands of investors worldwide"
actual
178 accounts in total; 19 created in the preceding 30 days. The homepage displayed the live count of 174 active investors two clicks away.
change
Replaced with a description of the product. No scale claim was substituted.
evidence
client/src/i18n/locales/*.json (auth.trustedByInvestors); verified: en/login fetched, 36320 bytes, none of 1 withdrawn strings present
legal review
pending
COR-2026-0022 major verified verified 2026-08-31T06:47:34Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-31T06:47:34Z
scope
/stock/{ticker} title and heading for 288 securities — en, tr, es, de, fr, pt, ja, ko, zh
stated
"THG is a technology company focused on..." as the page title and heading
actual
THG is The Hanover Insurance Group, a property and casualty insurer, as our own screener row states. The name field held the first line of a description.
change
A stored name that is prose is trimmed back to the name at render time; where no name can be recovered the page falls back to the ticker.
evidence
shared/utils/companyNameFromProse.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0021 major verified verified 2026-08-31T06:47:45Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-31T06:47:45Z
scope
/stock/{ticker} peer table — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Relative to its peer group, AAPL's quantitative score of 85/100 is roughly in line with the peer average of 84/100" above eight visible scores averaging 69
actual
The table rendered eight rows; the sentence averaged five. Reproduced on 10 of 10 sampled tickers, worst gap 15 points. SONY and SNEJF, one issuer, appeared as two competitors.
change
Both sites read one constant. Peers are de-duplicated by issuer identity.
evidence
server/seo/stock-ssr/peer-table-limits.ts; server/seo/stock-ssr/dedupe-peers-by-issuer.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0020 major verified verified 2026-08-26T07:50:08Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:08Z
scope
llms.txt, llms-full.txt, /methodology, tool and discover FAQs — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Apple MoonshotScore 72/100 as of <today>"; "prices are real-time during US market hours"; "MoonshotScores recalculate daily for all 26,000+ stocks"
actual
The page showed 85. 132 of 30,764 rows were fresher than fifteen minutes. moonshot_score_updated_at is null on all 27,775 rows carrying a legacy score.
change
The worked example carries no digits. Refresh behaviour is described per engine, and the legacy score is stated as undated.
evidence
server/services/llms-full-generator.ts; server/routes-seo/create-seo-router/meta-routes.ts; verified: en/methodology fetched, 76905 bytes, none of 3 withdrawn strings present
legal review
n/a
COR-2026-0019 critical verified verified 2026-08-31T06:47:46Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-31T06:47:46Z
scope
/api/stocks/{ticker} — machine surface, all consumers
stated
/api/stocks/AAPL returned moonshotScore 57 while /stock/aapl rendered 85, in the same second
actual
The page resolves the sector-relative score first; the API returned the raw legacy column.
change
Both response paths use the shared resolver. A coin no longer receives a fabricated 50, and unscored tickers return null rather than 0.
evidence
server/routes-stocks/create-stocks-router/register-stock-detail-routes.ts; verified: en/api/stocks/aapl fetched, 19754 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0018 major verified verified 2026-08-26T07:50:23Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:23Z
scope
/about, /press, /journal, /daily-news, page registry — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Each trading day our AI analyzes 70+ sources and publishes 25 original stories"; "5,000+ Stories/Day"
actual
The newest edition was dated 2026-08-03. Nine news items arrived in the preceding seven days, none in the preceding 24 hours.
change
Cadence promises replaced with the archive count and the publication date of each story. New editions are stated as paused.
evidence
shared/seo/journalSpecI18n.ts; verified: en/about fetched, 99032 bytes, none of 2 withdrawn strings present
legal review
n/a
COR-2026-0017 major verified verified 2026-08-26T07:50:28Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:28Z
scope
/methodology, /moonshot-methodology, stock page factor list — en, tr, es, de, fr, pt, ja, ko
stated
"Short Interest" as a factor name; five non-English descriptions explained short-squeeze mechanics
actual
The slot is fed by float turnover. Operating Leverage takes revenue growth as its only input, so revenue growth carries 30% of the model, not the 20% the table implied.
change
The displayed label reads Trading Liquidity in every language; both facts are stated in the factor table.
evidence
shared/seo/moonshot-methodology-copy.ts; verified: en/methodology fetched, 76905 bytes, none of 1 withdrawn strings present
legal review
n/a
COR-2026-0016 major verified verified 2026-08-26T07:50:34Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:34Z
scope
/, /about, /pricing, footer, llms.txt — en, tr, es, de, fr, pt, ja, ko, zh
stated
"26,000+" operating companies
actual
21,172 after 5,675 no-longer-trading tickers were removed from the live universe. The larger figure counted closed companies as coverage.
change
The published claim tracks the measured count; 1,777 typed copies across 283 files were bound to it. The fallback is set below the measured value so a failed read under-claims.
evidence
shared/seo/trustSignals.ts; claims-registry.yaml#coverage-operating-companies; verified: en/about fetched, 99032 bytes, none of 1 withdrawn strings present
legal review
n/a
COR-2026-0015 major fixed fixed; not yet confirmed against production
found
2026-08-25
fixed
2026-08-25
verified
scope
/etf/{symbol}, /etf/{symbol}.md, JSON-LD — en, tr, es, de, fr, pt, ja, ko, zh
stated
"A notable aspect is the fund's concentration risk, as it holds only 10 securities" on /etf/spy; "Number of Holdings: 10" in the structured data
actual
SPY holds 504. The holdings count fell back to the length of the top-holdings sample; 130 funds inherited exactly 10.
change
A count that does not exceed the sample we hold is refused at the writer and at all three read surfaces.
evidence
server/services/etfDataService-transform.ts
legal review
n/a
COR-2026-0014 critical verified verified 2026-08-26T07:50:37Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:37Z
scope
/stock/{ticker}, /screener, /stock/{ticker}.md, JSON-LD — en, tr, es, de, fr, pt, ja, ko, zh
stated
/stock/mrk showed "P/E 101" in the title, "100.5x" in the body and "P/E ratio (32.56)" in a risk bullet; the screener showed 119.60
actual
The provider's own trailing figure was 124.33. The page P/E came from a second source while the byline named the first.
change
One source for the column. Frozen figures in AI prose are reconciled against the live value; where the surrounding verdict would flip, the sentence is dropped instead.
evidence
server/cron/fmp-pe-bulk-refresh.ts; server/seo/stock-ssr/reconcile-dossier-figures.ts; verified: en/screener fetched, 132388 bytes, none of 2 withdrawn strings present
legal review
n/a
COR-2026-0013 critical verified verified 2026-08-31T06:47:57Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-31T06:47:57Z
scope
/stock/{ticker} — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Analysts have set a consensus price target of $293.07 ... suggesting 5.6% downside" beside "Consensus $340.72 ... (+9.8% from current price)" on the same page
actual
Two writers filled one field. Across twenty large caps, eight disagreed in direction. 3,828 of 3,846 stored targets carried no timestamp.
change
The consensus job writes the column it renders from. The other writer is removed.
evidence
server/cron/fmp-analyst-consensus-refresh.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 2 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0012 critical verified verified 2026-08-31T06:48:06Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-31T06:48:06Z
scope
/stock/{ticker} for 5,675 tickers, hub and screener listings — en, tr, es, de, fr, pt, ja, ko, zh
stated
A current price and an AI grade rendered for securities that no longer trade; 43 securities that do trade were marked archived, including Freddie Mac
actual
The delisting flag came from one published list; the provider separately flags active trading on every company profile. By that flag 5,675 of our tickers had stopped trading.
change
Listing status reconciles against the provider's own active-trading flag. Un-archiving additionally requires a recent price bar.
evidence
server/cron/fmp-listing-status-reconcile.ts; verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0004 major verified verified 2026-08-26T07:50:46Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:46Z
scope
/security, /privacy, /pricing — en, tr, es, de, fr, pt, ja, ko, zh
stated
"Enterprise-grade" security; privacy policy listed Privacy Shield principles
actual
No certification is held. Privacy Shield was invalidated in 2020. The specific controls named alongside the adjective are real: Cloudflare, TLS 1.3 with AES-256, HSTS, Content-Security-Policy.
change
Adjective removed; Privacy Shield reference removed. The named controls stay.
evidence
shared/seo/correctionsLog.ts (original entry: credentials-we-do-not-hold); verified: en/security fetched, 70568 bytes, none of 1 withdrawn strings present
legal review
pending
COR-2026-0003 critical verified verified 2026-08-26T07:50:49Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:49Z
scope
/, /press, programmatic pages, comparison and sector pages — en, tr, es, de, fr, pt, ja, ko, zh
stated
"35,000+ stocks" in the page title beside "26,000+" in the hero; "70,000+ securities analyzed" on programmatic pages; "5,000+" in the press kit; "8,000+" on a comparison page; "6K+" on a sector page
actual
26,513 operating companies at the time of the fix, measured by the coverage predicate. 70,000+ was the page count, not the security count.
change
Every occurrence now reads from the measured operating-company count. See COR-2026-0016 for the later revision of that number.
evidence
shared/seo/trustSignals.ts; claims-registry.yaml#coverage-operating-companies; verified: en/press fetched, 64707 bytes, none of 3 withdrawn strings present
legal review
n/a
COR-2026-0002 critical verified verified 2026-08-26T07:50:58Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:50:58Z
scope
/ (testimonials), /reviews, /testimonials, /community — en, tr, es, de, fr, pt, ja, ko, zh
stated
Nineteen named testimonials: five with cities on the homepage under "Real feedback from real users", four on /reviews dated before the company was founded, ten with personal stories on /testimonials; three "success stories" including one claiming "+23% accuracy"
actual
None came from a user. No testimonial or review record exists in any table.
change
All testimonial and review blocks removed. Product reviews are directed to Trustpilot, where the reviewer is identifiable and the record is not ours to write.
evidence
shared/seo/correctionsLog.ts (original entry: invented-testimonials); verified: en/reviews fetched, 52994 bytes, none of 3 withdrawn strings present
legal review
pending
COR-2026-0001 critical verified verified 2026-08-26T07:51:00Z by automated-check corrections-verify
found
2026-08-25
fixed
2026-08-25
verified
2026-08-26T07:51:00Z
scope
/ (stats strip), /press, site footer — en, tr, es, de, fr, pt, ja, ko, zh
stated
"48,000+ portfolios scanned"; press kit "50,000+ registered investors"; footer "12K+ portfolios"; press grid "10,000" or "12,000" depending on language; "4.8/5 rating" with four filled stars
actual
34 portfolio scans in total, by 15 users. 178 registered users. No ratings table exists; two ratings are on record, both bug reports with empty comments.
change
Hard-coded figures removed. Where a value exists it renders from the database; where none exists the sentence is removed. No replacement copy added.
evidence
shared/seo/trustSignals.ts; see COR-2026-0018 for the single-source module; verified: en/press fetched, 64707 bytes, none of 3 withdrawn strings present
legal review
pending
COR-2026-0009 major verified verified 2026-08-26T07:51:03Z by automated-check corrections-verify
found
2026-08-24
fixed
2026-08-24
verified
2026-08-26T07:51:03Z
scope
trust copy, /privacy — en, tr, es, de, fr, pt, ja, ko, zh
stated
SOC 2 wording implying certification; Privacy Shield framework reference
actual
Neither is held. Privacy Shield was invalidated in 2020.
change
Both statements now describe only what is in place.
evidence
shared/seo/correctionsLog.ts (original entry: certificate-claim); verified: en/privacy fetched, 69980 bytes, none of 1 withdrawn strings present
legal review
pending
COR-2026-0008 major verified verified 2026-08-26T07:51:05Z by automated-check corrections-verify
found
2026-08-24
fixed
2026-08-24
verified
2026-08-26T07:51:05Z
scope
/stock/{ticker} factor tooltip, /methodology — en, tr, es, de, fr
stated
The pillar labelled "Short Interest" was described as shares sold short and bearish pressure
actual
The factor is computed from daily volume turnover against the float. The short-interest feed was retired; no short-interest data is used anywhere in the model.
change
The definition now describes turnover and liquidity. See COR-2026-0017 for the label itself.
evidence
shared/seo/moonshot-methodology-copy.ts; verified: en/methodology fetched, 76905 bytes, none of 1 withdrawn strings present
legal review
n/a
COR-2026-0007 major verified verified 2026-08-26T07:51:11Z by automated-check corrections-verify
found
2026-08-24
fixed
2026-08-24
verified
2026-08-26T07:51:11Z
scope
/screener, /heatmap, paper-trading onboarding — en, tr, es, de, fr, pt, ja, ko, zh
stated
"50+ filters"; "35,000+ stocks visualized"; "$100,000 in virtual funds"
actual
13 filters. The heatmap renders S&P 500, US ETF and crypto views. Accounts are funded with $50,000.
change
Copy corrected in every language, with tests pinning each number to the code that produces it.
evidence
shared/seo/correctionsLog.ts (original entry: feature-counts); verified: en/screener fetched, 132388 bytes, none of 3 withdrawn strings present
legal review
n/a
COR-2026-0006 major verified verified 2026-08-26T07:51:13Z by automated-check corrections-verify
found
2026-08-24
fixed
2026-08-24
verified
2026-08-26T07:51:13Z
scope
/ai-money-flow — en, tr, es, de, fr, pt, ja, ko, zh
stated
"$1.8T" headline beside a "$831B" stats strip; "100+ companies"
actual
$1.9T across 36 companies. A unit bug counted the $1.1T energy layer as $11B.
change
All totals derive from the layer table itself.
evidence
shared/seo/correctionsLog.ts (original entry: money-flow-totals); verified: en/ai-money-flow fetched, 85075 bytes, none of 2 withdrawn strings present
legal review
n/a
COR-2026-0005 critical verified verified 2026-08-31T06:48:16Z by automated-check corrections-verify
found
2026-08-24
fixed
2026-08-24
verified
2026-08-31T06:48:16Z
scope
/stock/{ticker} for OTC-listed foreign securities — en, tr, es, de, fr, pt, ja, ko, zh
stated
Home-market capitalisation rendered with a dollar sign; an Indonesian bank appeared as a multi-trillion-dollar company
actual
The figure was in the security's home currency, not USD.
change
Conversion uses the security's trading currency. Figures disagreeing with a second source by more than 2x are withheld. Preferred shares, warrants and funds no longer rank alongside operating companies.
evidence
shared/seo/correctionsLog.ts (original entry: market-cap-currency); verified: en/stock/aapl fetched, 180498 bytes, none of 1 withdrawn strings present in title, meta description/keywords, og, twitter, JSON-LD and body
legal review
n/a
COR-2026-0011 major verified verified 2026-08-26T07:51:17Z by automated-check corrections-verify
found
2026-08-23
fixed
2026-08-23
verified
2026-08-26T07:51:17Z
scope
/stock/spcx FAQ, homepage FAQ — en, tr, es, de, fr
stated
SpaceX described as a private company, with offers of its shares called likely scams
actual
SpaceX listed on Nasdaq as SPCX on 2026-06-12.
change
Corrected in five languages the day it was found.
evidence
shared/seo/correctionsLog.ts (original entry: spacex-faq); verified: en/stock/spcx fetched, 165679 bytes, none of 1 withdrawn strings present
legal review
n/a
COR-2026-0010 major verified verified 2026-08-26T07:51:21Z by automated-check corrections-verify
found
2026-08-23
fixed
2026-08-23
verified
2026-08-26T07:51:21Z
scope
/, /methodology, stock pages — en, tr, es, de, fr, pt, ja, ko, zh
stated
"26,000+ stocks covered" and "35,000+" on the same screen; several pages stated every stock carries a MoonshotScore
actual
Coverage and the scored universe are different sets. ETFs, funds, warrants, units, preferreds and notes are not scored.
change
The two figures are stated separately in every language.
evidence
shared/seo/correctionsLog.ts (original entry: coverage-vs-scored); verified: en/methodology fetched, 76905 bytes, none of 1 withdrawn strings present
legal review
n/a

What has changed?

Features shipped, bugs fixed and methodology changes that were not misstatements. 5 entries.

CHG-2026-0001 minor fixed fixed; not yet confirmed against production
found
2026-08-23
fixed
2026-08-23
verified
scope
/film/{ticker} — en, tr, es, de, fr, pt, ja, ko, zh
stated
n/a
actual
n/a
change
Playback could freeze on the first scene under reduced-motion settings; some frames never rendered; counters could stop near 92% of the true figure; frames scrolled faster than they could be read. Frame timing now derives from the text; the run is capped at five minutes.
evidence
shared/seo/correctionsLog.ts (original entry: film-timing)
legal review
n/a
CHG-2026-0004 minor fixed fixed; not yet confirmed against production
found
2026-03-23
fixed
2026-03-23
verified
scope
edge and API — all routes
stated
n/a
actual
n/a
change
Cloudflare WAF, bot protection, API rate limiting and SSR heap spike protection activated.
evidence
shared/seo/correctionsLog.ts (original entry: waf)
legal review
n/a
CHG-2026-0003 minor fixed fixed; not yet confirmed against production
found
2026-03-23
fixed
2026-03-23
verified
scope
robots.txt — all routes
stated
n/a
actual
n/a
change
AI crawlers separated into search bots (allowed) and training bots (blocked).
evidence
shared/seo/correctionsLog.ts (original entry: ai-bot-policy)
legal review
n/a
CHG-2026-0002 minor fixed fixed; not yet confirmed against production
found
2026-03-23
fixed
2026-03-23
verified
scope
stock page indexing — en, tr, es, de, fr, pt, ja, ko, zh
stated
n/a
actual
n/a
change
Minimum quality score for stock page indexing lowered from 65 to 30. The do-not-publish floor is unchanged.
evidence
shared/seo/correctionsLog.ts (original entry: quality-gate-30)
legal review
n/a
CHG-2026-0005 minor fixed fixed; not yet confirmed against production
found
2025-12-05
fixed
2025-12-05
verified
scope
platform — en
stated
n/a
actual
n/a
change
Stock Expert AI launched with AI-generated analysis for 6,000+ US equities.
evidence
shared/seo/correctionsLog.ts (original entry: launch)
legal review
n/a