# Rates339 — catalogue integration and standard outputs

Baseline source2350912e0fe661d09c492750f19b4f32b9775d61 (served version338, plus post-publication evidence). Existing public audience preserved.

## Navigation
Removed the top-of-Quant-Lab rates338 promotional block. Added one first-class workbench link immediately after Hull–White in the existing family-filtered model catalogue. Visible after selecting Taux/Rates/利率 or All methods; searchable across title and keywords, including TARN and Bermudan; hidden in other families. Search-only matches no longer attempt to activate a nonexistent model panel. Deep link `quant-lab.html?lang=fr&family=rates` opens the selected family. Three contextual links from Hull–White, Swaption and Cancellable Swap retain the current language and relevant workbench anchor. Return link opens family rates with Hull–White selected. Research Library contains a documentation link alongside model-review material, not a newly claimed publication.

## Standard output contract
Added a presentation-only normalizer, schema `ahs.rates.outputs/1`, with36 metrics and explicitly typed series. No pricing engine changes. Primary results: tree Bermudan price EUR, held-out LSM price EUR, central value change for a+1bp parallel zero-rate move EUR. Money displayed to two decimal places; prices relative to notional in%; statistical uncertainty shown separately as SE and approximate95% bounds. A difference between tree and LSM is labeled a difference, not a pricing error.

Common summary tables: Metric / Value / Unit / Method or convention. Curve leg PVs in EUR; zero-coupon price and uncertainty on the trade notional in EUR, with separate per-unit values; TARN paid/cumulative coupon scenarios in EUR and cumulative/notional in%. Raw rate tables explicitly identify% or decimal rate. Variances and tiny curve-fit residuals use scientific notation. TARN amounts are coupon scenarios, not a full trade price.

CSV is now a long-form output contract: record_type, section, metric, point, column, value, unit, method, engine, valuation_date, output_schema. Metrics and each series column have explicit units. Numbers remain unrounded/invariant; display rounding does not alter exports. Input, market, trade and exercise provenance included as JSON context rows. This intentionally changes the prior24-row nested-JSON CSV layout; consumers should use output_schema, not fixed row positions. Underlying API/COM/Excel formats are unchanged.

Stale inputs clear displayed outputs and disable CSV. Recorded automated test evidence now remains visible after edits/recalculation.

## Checks executed
- New outputs/catalogue suite:41 checks,36 normalized metrics, CSV round trip5803 records for the test configuration. Covers idle/rates/equity/all, a workbench-only TARN search, empty search, language links, money/percentage/scientific formatting, exact metric values and byte-identical scientific engine.
- Existing browser pricing suite:126 checks, including27 Python/JS tree comparisons and existing Quant HTML preservation after removing the added navigation elements/cache version.
- Python engine/API suite:12 tests passed; numerical case and existing scope unchanged.
- Chrome: workbench invisible at initial idle catalogue, visible next to Hull–White after Rates selection, hidden after Credit selection, found alone by TARN search, clicked through to the calculation. FR/EN/中文 result labels checked. Sigma0 edit hides results and disables CSV; recalculation observed tree23447.213615300374EUR and LSM23447.213615299268EUR; downloaded CSV4315 records,36 metrics, currency and schema checked independently with Python csv parser.
- Chrome mobile390px iframe:375px usable width, scrollWidth375px,11 charts, zero unlabelled form fields. Cards stack in one column. Return link observed Rates aria-pressed=true, workbench visible, Hull–White active.
- Build integration and local anchors checked. No physical iPhone/Safari or Windows COM/Excel testing added in this change.

## Files
Main additions: dist/assets/rates339-output.js, dist/assets/rates339-integration.css, tools/integrate-rates339.py, tests/rates338/test_outputs339.cjs and this report. Changed: dist/quant-lab.html, dist/assets/quant-lab.js (catalogue UI only), dist/rates-workbench.html, dist/assets/rates338-ui.js, dist/assets/rates338.css, tools/build-rates338-page.py, dist/articles.html (one contextual documentation link), preservation test, recorded downloadable validation evidence. Scientific core, Worker, Python engine and C++ kernel unchanged.

## Remaining limits
The API remains local, with no hosted Python service. Windows COM/Excel integration remains unverified. One-curve Hull–White with user-supplied a/sigma; no automatic volatility calibration. TARN is a coupon-leg scenario. Recorded tests and manual checks do not constitute production certification. Version338 evidence is historical; version339 tests are identified separately.
