Changelog

GEO v2 — schema endpoints, machine feeds, and citation API

Added breadcrumb + HowTo JSON-LD across all marketing pages, Dataset schema on /engine, RSS + JSON Feed for the blog, /api/cite/<id> for BibTeX/CSL-JSON/RIS citations, oEmbed endpoint, and security.txt. Companion to the /q, /changelog, and /e pages in this release.

Engine provenance — dynamic engine_version, metrics_ci persistence

Receipts now carry a live engine_version field pulled from the running batter instance rather than a static string. metrics_ci (bootstrap confidence interval on Sharpe) is persisted to the receipt row and surfaced with a badge on the receipt page.

batter engine wired via Fly HTTP shim

The batter Python execution engine is now called via a Fly.io HTTP shim from the Next.js worker. All seven MCP tools that trigger a backtest run route through the live batter@0.4.2 runtime instead of the previous in-process JS fallback.

materialize_evidence_dataset — 7th MCP tool

New tool: materialize_evidence_dataset derives a ready-to-run EvidenceDataset from a canonical pool dataset and a strategy spec, without requiring the agent to upload rows manually. Closes ADR-0033 (materialize gate).

Blog — three launch posts

Published /blog/why-we-built-pancake, /blog/verification-boundary-what-pancake-actually-verifies, and /blog/100-percent-win-rate-was-fake. RSS and JSON Feed available at /blog/feed.xml and /blog/feed.json.

Engine determinism — Python 3.12 ULP investigation

Deep-dive page on why batter requires Python 3.12+ and permanently excludes 3.11. Root cause: CPython gh-100946 changed sum() for homogeneous float lists, producing a 1-ULP difference that propagates through bootstrap CI into a different result_hash.

Glossary — 10 metric explainers

Added /glossary hub + individual explainer pages for Sharpe, Sortino, CAGR, Max Drawdown, Win Rate, Wilson CI, Bootstrap CI, Brier Score, Permutation Test, and PCG64. Each page has a formula, citations, caveats, and a real receipt link.

Strategy versioning — version_of_strategy_id

Strategies can now declare a version_of_strategy_id to link a refinement to its predecessor. The SummaryStrip on the receipt page shows the version chain. Enables before/after comparison across runs.

Launch-critical pages — Quickstart, About, Terms, Privacy

Published /quickstart (full MCP + OAuth + first backtest walkthrough), /about, /terms, and /privacy. Four hidden comparison pages also shipped: QuantConnect, Composer, Alpaca Paper Trading, and Jupyter notebooks.

Engine page — batter 0.4.2 documentation

Published /engine: pip install batter, the 12 verified formulas table, byte-stable result_hash guarantee, BibTeX citation, and the Python 3.12 requirement. The page is an LLM citation target for the batter package.

batter 0.4.0 — bootstrap CI on receipts

Bootstrap CI (10,000 PCG64 resamples of the trade P&L series) added to receipt output. Abbreviation hover component added to receipts for glossary cross-links.

GEO v1 — crawler manifest, comparison pages, cite button

Tier A: llms.txt + llms-full.txt, sitemap enhancements, robots.txt tuning. Tier B: /compare hub + 4 hidden comparison pages (QuantConnect, Composer, Alpaca, Jupyter). Tier C: cite button on /r/<id> for BibTeX citation.

Small-N suppression on receipt render

Metrics requiring N ≥ 10 trades now display "insufficient_data (N=X < 10)" in the receipt card rather than a blank or zero. Ensures agents read the honest framing on small backtests.

batter engine 0.1.x — compiler concurrency fix + golden fixtures

Fixed a compiler concurrency rejection in the batter engine spec compiler, added frictionless settlement handling, 1-bar rejection, and an always-on drawdown note. Golden fixtures for toy, jakarta_temperature, rapture_family, and btc_pred_hedge added for 50-iteration determinism verification.

Receipt pages — /r/<short_id> rendered from ResultEnvelope

Public receipt pages at /r/<short_id> now render from the full ResultEnvelope schema: metrics block, verification boundary 3-tuple, strategy spec viewer, and share UI. Result visibility (public / unlisted / private) enforced per ADR-0005.

OAuth 2.0 — Pancake-issued tokens + MCP integration

Pancake now issues its own OAuth 2.0 tokens (PKCE flow). The MCP endpoint at mcp.usepancake.com accepts Pancake tokens for all tool calls. RFC 7591 Dynamic Client Registration supported.

MCP endpoint — 6 tools + JSON-RPC dispatcher

Initial MCP surface: search_strategies, search_datasets, get_strategy, register_evidence_dataset, run_evidence_backtest, get_backtest_result. Streamable HTTP transport. Authenticated app shell at /app/results + /app/settings.