Atlas Research Notebook: How a Source-Backed Quality Gate Governs 75 Symbol Pages
The Atlas research notebook now serves 65 of its 75 symbol pages only after each daily context clears a source-backed quality gate, and the remaining 10 stay out of runtime by design rather than by accident.
What the Atlas symbol surface ships today
The public symbol surface covers 75 instruments across eight asset classes. The static builder /root/Atlas_Backend/atlas_symbol_pages_build.py regenerates these pages and the sitemap, and the most recent full pass rebuilt 75 symbol pages before the asset-class hub work landed. Coverage spans equities, an ETF set (SPY, QQQ, DIA, IWM), crypto (BTC, ETH, SOL, XRP), forex (EURUSD, GBPUSD, USDJPY), commodities (GOLD, SILVER, COPPER, USOIL, UKOIL, NGAS), and indices (VIX, DXY, UK100, DE40, JP225). The full index sits at the Atlas symbol coverage landing page.
Six asset-class hub pages were added under /var/www/atlas/stocks/<class>/ for equities, etf, crypto, forex, commodity, and index, with peer cross-links on every symbol page and a hub bar on the /stocks/ landing. That expansion moved the sitemap from 67 to 73 URLs while leaving the 75 symbol count and the 66/9 index versus noindex split unchanged.
Service health is verifiable from outside the box. The public endpoint https://atlas.freedomcore.io/api/atlas/health responds with ok: true, and public HTML serves versioned assets such as /css/atlas.css and /js/atlas.js.
The daily context quality gate and what it rejects
Each symbol page is driven by a daily context file at /root/Atlas_Backend/cache/daily_contexts/{slug}.json, treated as the canonical master and immutable for the UTC day. Before any context can drive a public page, a runtime report, or an email receipt, it must pass /root/Atlas_Backend/daily_context_quality_gate.py. That gate enforces a current-date as_of value, fetched-URL source provenance (the published source manifest must be a subset of the sources actually stored in the database), an 8-class asset enum, balanced paragraph-tag HTML, no disallowed tags, and explicit advice-language rejection. Source manifests now carry source_manifest_source=fetched_news, meaning provenance comes from fetched headlines rather than model output.
The full 75-symbol run produced a concrete, auditable split: 65 of 75 contexts validated for runtime and serving. The builder then marked 66 pages index,follow (the 65 validated plus 1 already trafficked in Google Search Console) and 9 pages noindex,follow because they were both unvalidated and untrafficked. The gate rejected two symbols for cause, which is the fail-safe behaving as intended: XRP carried a disallowed <a> tag in a snippet, and MA carried advice language ("buy/sell now"). A further nine symbols (ABNB, AVGO, GOOGL, MU, NKE, SQ, TSLA, UKOIL, WMT) were skipped after an NVIDIA HTTP 429 rate-limit forced a fallback model that returned non-JSON; those skips preserved prior on-disk state rather than overwriting it.
Cross-asset source methodology and citation tiers
Source quality is treated as a first-class output, not a footnote. A render-time authority tiering pass in /root/Atlas_Backend/renderers.py orders citations official (tier 1) before reputable press (tier 2) before aggregator (tier 3), and labels each one. Because the tiering is additive at render time, it applies to the existing 65 validated contexts with no pipeline rerun and no change to the gate's required keys.
The tier-1 host list is explicit and public-facing: regulators and official statistics and central-bank bodies including fca.org.uk, esma.europa.eu, boj.or.jp, pbc.gov.cn, imf.org, worldbank.org, and bis.org, alongside BoE, Fed, ONS, BLS, and BEA. Tier-2 hosts include nikkei.com, scmp.com, nasdaq.com, and nyse.com. A verification on GBPUSD confirmed the serve order: official-first (BoE, Fed, ONS, BLS, BEA) ahead of FXStreet, ahead of DailyForex and Forex Factory.
For equities, the daily writer is being wired to read primary filings. Recent cache writes under /root/Atlas_Backend/cache/free_sources/ include SEC companyfacts and submissions pulls (for example CIK 0000320193 and CIK 0001045810), captured between 05:00 and 05:14 UTC on 2026-05-30. The methodology question Atlas is answering is whether macro, forex, and commodity contexts can be held to the same provenance standard as company filings. The DefiLlama and OpenBB style of open, documented data spines is the reference point for that work; see the OpenBB documentation and the DefiLlama site for the open-source primitives this surface treats as a baseline.
Crawl-budget signal from Google Search Console
The decision to gate breadth rather than chase it is grounded in indexing telemetry, not preference. Google Search Console coverage exports show that "Discovered, currently not indexed" dominates: Atlas at 61 URLs versus only 3 "Crawled, currently not indexed." Arena, a sibling surface, sits far higher at 439 discovered-not-indexed. Read together, that pattern points at crawl-budget and domain authority as the binding constraint, not raw content volume. A monitor at /root/Atlas_Backend/gsc_index_monitor.py parses the per-property Page-Indexing CSVs and reports reason deltas against a stored snapshot (gsc_index_snapshots.json), with a validated baseline of Atlas 61 and Arena 439 and zero delta on rerun. The measurement window for whether gating plus hubs moves the discovered-not-indexed count downward is the next GSC export, two to four weeks out.
Caveats: what is not proven, not live, not public
Several things are deliberately incomplete, and stating them plainly is part of the methodology.
key_levelsstays as an empty array[]on every context until a real price feed plus a levels source manifest exists. No price levels are asserted.- 10 of 75 symbols are not serving validated contexts: 2 were gate-rejected (XRP, MA) and up to 9 were skipped on rate-limit fallback (UKOIL appears in both the validated-set discussion and the skip list across runs, so treat per-symbol state as run-dependent until the next clean full pass).
- The redesigned email template lives at
/var/www/freedomcore/atlas_email_preview.htmlbut is not yet wired into the live send path; the worker still falls back to the older renderer. - The 75-symbol set has not been expanded to the broader universe. The stated sequencing is depth before breadth: upgrade the current 75 to world-class before wiring the universe adapter.
- This note is queued for operator review and is not auto-published. Figures here reflect the 2026-05-30 05:16 UTC source pack and may move on the next pipeline run.
Why the gate matters for the research surface
The wider FreedomCore stack runs separate, autonomous surfaces; the Maverick engine and the broader FreedomCore index are out of scope for this note. Atlas's own contribution is narrower and checkable: a research notebook where every served page can be traced back to fetched sources, ranked by authority tier, and held immutable for the trading day. The published methodology and dated build notes are the artifact, and the next Atlas notes entry will report whether the GSC discovered-not-indexed line bends. For the schema vocabulary these notes target, see the Schema.org BlogPosting type.
Browse the Atlas research notebook
FreedomCore Atlas Research →