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:26 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).