JCN Financial

About Pearlfolio

Version & release information β€” so you always know what you're looking at.

v2.9.0production
Commit
d29fa38
Branch
main
Last commit
feat(reliability): shared EODHD parser, blocking NDX gates, schema guard, dead-collector lint Completes the 4-item reliability hardening menu from this morning's core-membership idempotency fix. 1. api/_eodhd_parse.py: single shared parse_eodhd_components() implementation for EODHD's Components JSON shape (value's Code field, not the dict key). constituents_ndx_diff.py and core_membership_refresh.py both now import it instead of maintaining independent parsing logic -- exactly the drift that caused the 2026-09-21 junk-symbol incident. 2. constituents_ndx_diff.py: magnitude/count gates now actually block event emission on failure (return events=[] immediately, before the second dual-confirm API call), instead of WARN-only logging that let bad diffs through anyway. Dual-confirm can't catch a systematic parsing bug where both fetches are wrong identically -- only a blocking gate can. 3. api/db_schema_guard.py: checked-in manifest of 26 tables' expected PRIMARY KEY/UNIQUE constraint
Page rendered
2026-09-29 13:32:24 UTC

Release history

v2.9.0Pearl gets the internet + the app's own wiki Β· 4 new tools Β· Grok search Β· reliability pass

2026-09-05
  • Pearl now has genuine open-web search and page-fetch (no domain restriction) plus a second, independent xAI/Grok search engine with real live X/Twitter access β€” it was previously (correctly) telling users it had no internet access.
  • Pearl's reasoning-based retrieval now covers this app's own /wiki (107 sections) as well as the finance encyclopedia β€” ask it how any page or its own tools work.
  • Full accuracy pass on the wiki while wiring it in: fixed a structural TOC/sidebar bug, corrected several factor-score sections that still described pre-CORE-cutover formulas, fixed stale database/universe statistics.
  • 4 new tools: get_sec_filings (real EDGAR document links + full-text read via web_fetch), get_macro_breadth_signal, get_risk_snapshot, get_new_factors.
  • Adaptive thinking enabled; added Opus 5 and Sonnet 5 to the model picker (default flipped to Sonnet 5 for cost during active development).
  • Found and fixed 5 real bugs during a systematic live capability review: a ~3x cost-tracking overstatement, a production crash for any question routed to the fast/cheap model once web search was added, a sentiment-question misroute that could drop a source's own "unverified" hedge, a hallucinated code-execution capability claim, and an oversized risk-tool payload (trimmed ~16% with no quality loss).

v2.8.0Screener Elite Β· Pearl reasoning-based retrieval Β· nightly anomaly engine

2026-09-04
  • New PROD_SCREENER_SNAPSHOT precompute (84,683 Γ— 1,075, nightly): universe flags, liquidity + market-cap tiers, all JCN scores, and 347 factors as raw + percentile + decile.
  • Screener gained liquidity filtering (30-day average dollar volume) β€” it previously had no volume data at all β€” plus a market-cap tier filter and a new "New Factors" tab with 15 headline growth/quality/risk factors.
  • All factor percentiles are direction-normalized: 100 is always best, even for beta, drawdown and volatility where lower is better.
  • New /api/screener/registry publishes metadata for all 365 screenable factors, so the remaining ~330 can be exposed without bespoke UI per factor.
  • Pearl Phase 3: vectorless PageIndex-style retrieval β€” Pearl reads the encyclopedia's table of contents and reasons to the right section, finding methodology that keyword matching missed entirely.
  • Pearl Phase 4 (step 1): nightly deterministic anomaly engine over holdings, watchlist, and CORE-4 top ranks β€” score breakdowns, momentum roll-overs, analyst downgrades, insider clusters, sentiment flips, new candidates β€” surfaced via a new get_anomalies tool.
  • Insider signal correctness: restricted to open-market sales, excluding automatic tax-withholding and option-exercise transactions that were creating false bearish signals on ~a third of the universe.
  • Watchlist now mirrors server-side; it was previously browser-only and invisible to Pearl and every nightly job.
  • Fixed duplicate report emails (one-time reports never closed out, plus a confirmed double-send from a non-exactly-once cron) and a production build failure from overlapping Vercel function patterns.
  • FINNHUB_API_KEY wired in production β€” analyst recommendations, insider transactions/sentiment, and company news now sync nightly.

v2.7.0Instant-load rollout complete Β· CORE-4 data-integrity pass Β· Pearl precompute foundation

2026-09-04
  • Instant-load (born-populated) rollout finished on all 7 heavy pages β€” market-analysis, sector-analysis, screener, stock-analysis, olivia-growth, persistent-value, pure-alpha.
  • Re-gated 7 investor-profile scoring tables to CORE-4 (were still on the legacy top-3000 universe) β€” fixed a real app-wide data inconsistency, verified before/after.
  • New Pearl precompute foundation: PROD_PEARL_HOLDINGS, PROD_PEARL_STOCK_CONTEXT, PROD_PEARL_WATCHLIST_SYNC, plus new Finnhub-sourced datasets (analyst recs, insider activity, company news).
  • Screener: Core 4 toggle, column projection for edge-cache eligibility (12MBβ†’3.3MB), pagination.
  • Factor Models: surfaced all 14 backtested JCN models (gallery + rail picker + tearsheet), not just the 2 production models.
  • Fixed the stock-analysis page silently ignoring the ?symbol= deep link from the screener/watchlist.
  • Pearl: context editing (Phase 0) + a new fast per-stock context-card read path (Phase 1).
  • Factor Lab handoff: root-caused the composite performance gap to value_score being anti-predictive on CORE-4 large-caps.
  • docs/DATA_SCALING_STANDARD.md β€” precompute/paginate/project/filter/Blob policy so new features don't hit cache-size walls.

v2.6.0CORE-cutover audit complete Β· SEC EDGAR Β· Pearl caching Β· mobile + instant-load

2026-09-03
  • Page-by-page CORE-cutover audit complete (all 17 pages) β€” honest NULL/"not in CORE scoring universe" handling everywhere.
  • SEC EDGAR filing/event history for the CORE-4 universe: 2.71M filings across 1,488 validated symbols (1993β†’present), daily incremental sync + health-email alerting.
  • Risk-management holdings unified to a single source of truth (api/jcn_global_portfolio.json); analytics now match the displayed $93.0M book.
  • Pearl Chat prompt-caching (frozen system + tools) β€” ~90% input-cost cut on multi-step chats (verified 92% cache hit).
  • iPhone mobile foundations: safe-area insets, dynamic viewport height (dvh), no zoom-on-input, larger tap targets.
  • Instant-load pilot: market-analysis now born-populated (RSC server-preload + ISR) β€” kills the ~8s cold spike and the fetch-flash.
  • data-sync fixes: PROD dedup NameError, CORE-4 coverage denominators, removed a mislabeled 'Dry Run' write button.

v2.5.0CORE-4 universe migration (LIVE)

2026-09-02
  • Scores gated to the 4-index CORE universe (S&P 500 + MidCap 400 + SmallCap 600 + NASDAQ-100), PIT, foreign/ADR excluded.
  • Momentum v2 (nearness-based) is ground truth and in the composite; moat fixed into composites.
  • ~656 new factors across the OBQ_* wide metric tables; composites rebuilt full-history CORE.

v2.4.0Factor-model engine Β· screener Β· reports command-center

2026-08
  • Scalable quarterly-append factor-model backtest engine; 14 JCN models seeded.
  • Screener presets un-broken (arg_max latest-non-null fundamentals).
  • Reports feed expanded into a freshness-gated reporting command-center.

What's New in v2.9.0

Full inventory of this release's upgrades, broken out by category β€” new datasets, data recalculations & integrity checks, app/UI changes, and Pearl (AI analyst) upgrades.

Pearl gets real internet access + a second search engine

  • Pearl was previously (correctly) telling users it had no internet access β€” its only external data was curated Finnhub/EODHD feeds. It now has genuine open-web search and page-fetch (no domain restriction), with an explicit rule to prefer JCN's own data for anything about our own scores/screens/portfolios and reach for the web only for macro context, general news, or anything our data doesn't cover.
  • Added a second, independent search engine β€” xAI/Grok β€” specifically for its live X/Twitter access, which the primary web search doesn't have. Verified live: a sentiment question genuinely triggered X/Twitter search and returned real x.com citations.
  • Pearl can now open and read actual SEC filings in full (not just metadata) β€” ask it to pull the 10-K risk factors for any tracked stock and it fetches and summarizes the real document, verified against Apple's actual FY2025 filing.

Pearl's knowledge base doubled β€” now includes the app itself

  • Pearl's reasoning-based retrieval ("PageIndex") previously covered only the finance methodology encyclopedia. It now also covers this app's own /wiki user guide (107 sections) β€” ask Pearl how any page, module, or its own tools work, and it reasons through the same table-of-contents mechanism used for methodology questions.
  • Full accuracy pass on the wiki while wiring it in: fixed a structural bug where 35 "Investor Profiles" subsections were declared in one place in the sidebar but rendered in the wrong physical location with a dead link; corrected several factor-score sections that were still describing pre-CORE-cutover formulas instead of what's actually live; fixed stale database/universe statistics throughout.

Four new tools wired to data that already existed

  • get_sec_filings β€” real EDGAR document links for 8-Ks, 10-Ks, Form 4s and more, for any of the 1,488 CORE-4 symbols with SEC history back to 1993.
  • get_macro_breadth_signal β€” the Bull Power / Bear Pressure market-breadth indicator behind the Macro Models page, now askable directly.
  • get_risk_snapshot β€” portfolio concentration, beta, and scenario-shock analytics (2008 GFC, COVID, rate shocks, etc.) behind Risk Management, now askable directly.
  • get_new_factors β€” a cheap, narrow pull of the ~25 headline factors (Sharpe, Sortino, growth consistency, CAGR percentiles) from the screener's ~347-factor library, for any single stock.

Smarter, cheaper, and more reliable

  • Adaptive thinking enabled for every model except the simple-lookup fast path β€” better multi-step reasoning on real research questions.
  • Added Opus 5 and Sonnet 5 to the model picker; default flipped to Sonnet 5 for cost efficiency during active development (Opus 5 stays one click away).
  • Found and fixed a real cost-tracking bug: interaction cost logging had stale pricing for the production default model, overstating every logged cost by roughly 3x.
  • Found and fixed a live production bug where any question routed to the fast/cheap model would hard-fail once web search was added β€” was silently broken for a window before being caught and fixed same-day.
  • Found and fixed a subtler bug where sentiment/social-media questions were also being routed to the fast path and could drop a source's own "this is unverified" hedging language, presenting a rumor as a stated fact.
  • Corrected a self-description bug where Pearl claimed to have a sandboxed code-execution tool that was never built.
  • Trimmed the portfolio risk tool's payload to cut its token cost ~16% with no loss of answer quality, and extended prompt-cache lifetime to better match real conversation pacing.

Pearlfolio Β· JCN Financial β€” data as of the latest nightly sync. Full change detail in the repo (docs/DEPLOY_*.md, docs/PAGE_AUDIT_LOG.md).