# Downstream replication specification

## Scope and units

This specification describes the frozen **17 September 2026 checkpoint**, using market observations through **31 July 2026**. Replication means independent implementation from the inputs and rules. No research code is distributed. This pack creates no new fitted estimates.

The **CPIH-equivalent daily market series is a frozen input**. Reconstructing its statistical RPI–CPIH adjustment and prospective-reform correction is a separate exercise. Its upstream sources are identified without claiming that the downstream calculation independently reproduces that conversion.

All additive components use annual continuously compounded basis points: 100 bp is one percentage point. If `f` is an annual continuous decimal, continuous percent is `100*f`, basis points are `10000*f`, annual-effective percent is `100*expm1(f)`, and a semiannual-equivalent quotation is `200*expm1(f/2)`. Native survey percentages retain their original meaning until transformed. These conversions do not turn a coupon-bond forward into a zero-coupon forward.

Original downstream CSVs generally stored 12 significant digits. Byte copies retain their formatting; new numerical selections use 17 significant digits to preserve the parsed number. Extra digits do not add source accuracy. [The inventory](frozen_inputs_manifest.json) identifies copies and exports.

## 1. Calculation order and identity

Construct market forwards; fit independent expectation states; subtract expected real rates from foreign real forwards; form the fixed benchmark; allocate UK real compensation around it; then calculate isolated inflation sensitivities. Bond prices never enter the survey-state likelihood.

In continuous bp, let `N` be UK nominal 5y5y, `I` frozen CPIH-equivalent market compensation, `n` expected nominal policy and `pi` expected inflation, including any explicitly assumed index/horizon basis:

```
R  = N - I                     adjusted UK real-related forward
er = n - pi                    expected UK real-rate proxy
PR = R - er                    total UK real compensation
PI = I - pi                    UK inflation compensation
G  = sum_c w_c*(R_c - er_c)     foreign real-compensation benchmark
L  = PR - beta*G               UK-relative real compensation
N  = er + pi + beta*G + L + PI
```

The reference has `beta=1`. Weights are one third each for US/Germany/Australia, or one half each for the longest US/Australia history. Membership and weights stay fixed. No UK data enter `G`; no country mean is subtracted; missing members never cause reweighting.

The legacy fields `global_real_premium_bp`, `local_real_premium_bp` and `uk_inflation_premium_bp` are displayed as **global real compensation**, **UK-relative real compensation** and **UK inflation compensation**. Historical column names do not identify pure risk premia. `global_expected_real_bp` is diagnostic, not a sixth additive component. Each row must reconcile within `1e-6` bp.

## 2. Market measurements

### UK nominal and RPI

In each BoE archive workbook select the full spot worksheet, excluding the short sheet, and columns whose `Years:` headers equal exactly 5 and 10. Both endpoints must exist on the same actual date. Quotes are continuous annual percentages. Divide by 100, set `log D(T)=-T*z(T)`, and calculate

```
f = [log D(5) - log D(10)] / 5 = 2*z10 - z5
```

The RPI forward comes from the **published implied-inflation spot curve**, not an independent subtraction of separate nominal and real archive files. There is no instantaneous-forward substitution or filling of missing market dates.

[market_forwards_and_cpih.csv](inputs/market_forwards_and_cpih.csv) provides the actual matched UK/US grid used downstream: UK nominal, US real, raw UK RPI and three frozen CPIH variants. [cpih_equivalent_frozen_daily.csv](inputs/cpih_equivalent_frozen_daily.csv) supplies the standalone conversion input and audit fields. Its wider UK calendar must not replace the matched grid when reproducing this checkpoint.

### US TIPS

Select `Date`, `TIPSY05`, `TIPSY10` in Federal Reserve `feds200805.csv`; require the preamble to identify `TIPSYXX` as zero-coupon, continuously compounded. With source percentages, `100*(2*TIPSY10-TIPSY05)` gives bp. Drop missing endpoints. **`TIPS5F5` is coupon-equivalent and excluded.** Provider fitting, liquidity and indexation effects remain.

### Germany: real prices to discount factors

Use Finance Agency factsheets’ embedded `Price` histories: real clean prices per 100, around noon Frankfurt. [Terms](support/de_security_terms.csv) and [exact dated primary constituents](support/de_dated_security_membership.csv) are supplied.

1. Settlement is T+2 TARGET business days. Exclude weekends, 1 January, Good Friday, Easter Monday, 1 May, 25 and 26 December. Additional Clearstream Frankfurt closures were not independently reconstructed.
2. Annual coupons fall on 15 April. A regular cash flow per 100 equals the coupon percentage. Multiply the first coupon by the ACT/ACT ICMA fraction from accrual start to first coupon, using annual 15 April reference periods. Add 100 principal at maturity.
3. Accrued interest is coupon percentage times ACT/ACT ICMA from the previous coupon, or initial accrual start, to settlement. Dirty real price equals clean plus accrued.
4. Include due dates strictly after settlement. Move holiday payments to following TARGET business days without extra interest. Curve time is ACT/ACT ISDA from settlement to payment.
5. Sort maturities. Place one knot at each final payment. Keeping earlier knots fixed, solve the new log discount so `sum(CF*exp(interpolated_logD))=dirty_price`. Brent’s root bracket is `[-10,10]` in log discount, absolute tolerance `1e-13`. This is sequential exact repricing, not least squares.
6. Primary interpolation is linear log discount through `(0,0)` and solved knots. The alternative is linear continuous zero rates, holding the first zero flat towards zero. No extrapolation beyond the last knot and no monotonic-discount constraint are imposed.
7. Exclude bonds before accrual start or with less than one year remaining. Require at least two eligible bonds and actual maturity support on both sides of each endpoint. If `s` is quote-to-settlement ACT/ACT ISDA time, evaluate at `5-s` and `10-s`. The unknown quote-to-settlement discount cancels in the ratio.

The index is unrevised euro-area HICP excluding tobacco. Contractual reference indices interpolate months M−3/M−2 and divide by the bond base index. The calculation uses normalized real prices; it does not strip the nominal-principal floor or reconstruct every nominal index payment.

On **31 July 2026** the bonds were DE0001030559 (0.5%, April 2030), DE0001030583 (0.1%, April 2033), and DE0001030575 (0.1%, April 2046). The 5-year bracket is 2030/2033; the 10-year bracket is 2033/2046. Both interpolation methods and maturity-support diagnostics are in [de_real_forwards.csv](inputs/de_real_forwards.csv). Exact repricing does not resolve uncertainty caused by this sparse bracket.

### Australia: yields to normalized real prices

Use RBA F16 security yields and coupon/maturity metadata. Archive coupon decimals are multiplied by 100; current CSV coupons are already percentages. The RDP 2018-02 supplement supplies actual `RealDataAdj.csv` observations only where an admitted F16 observation is absent. Its published adjusted zero curve is not substituted.

[Dated securities](support/au_dated_security_membership.csv) and [terms](support/au_security_terms.csv) retain RBA `TI` identifiers. A verified ISIN crosswalk is unavailable in these frozen inputs and none is invented.

Work per 100 normalized indexed principal. Construct quarterly dates by recursively subtracting three calendar months from maturity. For annual coupon percentage `c`, regular payments are `c/4`, plus 100 principal at maturity. The record date is next coupon minus eight calendar days, moved backwards over weekends. Settlement strictly after it removes the next coupon, retaining principal. Public holidays are not included in this approximation.

With `f` days from settlement to next coupon, `d` days in that coupon period, and quoted annual percentage yield `y`:

```
P_norm = sum_j CF_j * (1+y/400)^(-(f/d+j)), j=0,...,n
P_cash = P_norm * K_next * (1+p/100)^(-f/d) / 100
```

`K_next` is the next indexed capital value and `p` the quarterly inflation adjustment. The common scale is divided out for the normalized bootstrap; bond-specific base-index histories are not estimated. CPI lag and floor effects remain embedded in the quote.

The reference uses quote-date settlement normalization and Actual/365.25 curve time. Retain unique maturities at least one year away, require at least three bonds and support below 5/above 10 years, then keep bonds only through the first maturity at or above 10. At least three must remain. Solve each maturity discount sequentially to exact normalized PV; Brent bracket `[-30,30]`, tolerance `1e-13`. There is no least-squares or monotonicity restriction.

Primary interpolation is linear log discount, including `D(0)=1`. The alternative is linear zero rates with the first zero flat towards zero. Calculate `z5=-logD5/5`, `z10=-logD10/10`, then `10000*(2*z10-z5)`. Endpoints require actual maturity brackets. Gaps wider than 5.01 years are flagged rather than excluded.

On **31 July 2026** the retained instruments were TI414 (0.75%, November 2027), TI408 (2.5%, September 2030), TI416 (0.25%, November 2032), TI410 (2%, August 2035), and TI413 (1.25%, August 2040). The 5-year bracket is TI408/TI416; the 10-year bracket is TI410/TI413. Linear-zero alternatives are daily. T+2/T+3 weekday settlement, Actual/365 and yield ±0.5 bp checks were calculated at source month-ends only.

[Endpoint cash flows](support/endpoint_real_cashflows.csv) give both countries’ deterministic schedules under these conventions on the last date. Their generation does not refit curves. [au_real_forwards.csv](inputs/au_real_forwards.csv) retains real observations independently of unrelated Australian nominal-data disputes.

## 3. HMT observations

Use the **published Independent average**, not a reconstructed contributor mean. For the June 2026 panel, strip whitespace and select `forecaster=Independent`, `variable` equal to `Official Bank rate (annual)` or `CPI (annual)`, and numeric `date_forecasted=year(date_publication)+4`. Require one aggregate per variable/round. Earlier PDF sources use M3/M4, with per-observation page locators. The May 2026 crosscheck is `M3 & M4!J28` for CPI and `X63` for Bank Rate, targeting 2030.

Missing contributor forecasts are not zero-filled or separately reweighted: their treatment is embodied in HMT’s aggregate. Exact constituents are unknown. Some submissions are stale or use alternative definitions, including three-month interbank rates; numerical contributor counts are diagnostic only.

There are 84 rounds, February 2005–May 2026. May 2017 and November 2019 are absent and remain missing. These are **terminal calendar-year annual averages**, not end-year values or observed years-5–10 averages. Convergence is the declared economic mapping.

Policy observations are `value_pct*100` bp. CPI observations are `10000*log1p(value_pct/100)`: log of an aggregate mean, not an identified expected log. The reference assumes zero expected CPIH-minus-CPI/horizon basis. [UK policy](inputs/n_uk_bp_observations.csv) and [inflation observations](inputs/pi_uk_bp_observations.csv) retain provenance.

Verified publication/index dates are used for 77 rounds. Seven use conservative month ends:

| Round | Update date |
|---|---|
| May 2010 | 2010-05-31 |
| August 2010 | 2010-08-31 |
| November 2010 | 2010-11-30 |
| February 2011 | 2011-02-28 |
| May 2011 | 2011-05-31 |
| August 2011 | 2011-08-31 |
| November 2011 | 2011-11-30 |

The database vintage remains retrospective. Calendar verification does not establish first availability of every saved historical value.

## 4. Local-level state estimator

Estimate each scalar state separately:

```
y_i = x_i + epsilon_i,  epsilon_i ~ N(0,R)
x_i = x_(i-1) + eta_i,  eta_i ~ N(0,q*Delta_i)
Delta_i = elapsed calendar days / (365.25/12)
```

Fix observation SD at **50 bp policy / 25 bp inflation**. These are model choices, not survey standard errors. Initialize the first posterior mean at `y1`, variance `R`, under diffuse initialization; omit its constant likelihood contribution. No estimate precedes the first observation.

```
P_minus = P_previous + q*Delta
S = P_minus + R
K = P_minus/S
m = m_previous + K*(y-m_previous)
P = (1-K)*P_minus
negative_log_likelihood = 0.5*sum_{i=2..n}[log(2*pi*S_i)+(y_i-m_previous)^2/S_i]
```

Evaluate `q=0` and 161 geometrically spaced values from `1e-4` through `1e4` bp²/month. If a positive grid point wins, refine in log q with bounded scalar minimization between grid points two positions below/above, clipped to the positive grid. Compare the refined result, grid winner and zero. The frozen SciPy bounded defaults are log-parameter `xatol=1e-5`, `maxiter=500`; the library version is recorded in JSON. Fixed-q cases skip estimation.

Filter the union of survey dates and actual requested market dates chronologically. Between observations, mean stays constant and variance grows by `q*Delta`. Query dates do not change the survey likelihood. Primary paths are **filtered**, but full-sample q estimation remains retrospective. RTS smoothing is a separate sensitivity: backward gain `A_i=P_i/P_(i+1)_minus`; smoothed mean `m_i+A_i*(m_(i+1)_smooth-m_i)` and variance `max(0,P_i+A_i^2*(P_(i+1)_smooth-P_(i+1)_minus))`.

| State | Observations | Fitted q, bp²/month |
|---|---:|---:|
| UK HMT policy | 84 | 180.856191 |
| UK HMT CPI | 84 | 0 |
| US dealer policy | 114 | 50.480632 |
| US SPF CPI | 84 | 2.097599 |
| ECB policy | 42 | 88.501718 |
| ECB HICP | 42 | 0 |
| Australian neutral policy | 10 | 0 |
| Australian inflation | 45 | 4.750745 |

At q=0, filtering gives an equal-precision expanding mean. The last HMT inflation forecast has weight 1/84. The reference inflation component’s limited movement depends strongly on this specification.

State variances condition on q and R; cross-state covariance is not identified by separate fits. Grid support within 1.92 negative-log-likelihood units is a diagnostic, not a calibrated confidence interval. It omits source, mapping and structural uncertainty.

## 5. Foreign expectation anchors

### Recent surveys

- **US:** median Primary Dealer longer-run policy forecast, percentage ×100, minus filtered SPF `CPI05YF05` mean under the log conversion. Dealer dates are fieldwork ends; SPF dates are response deadlines. Policy history begins June 2012. Median modes, calendar-deferred forecasts and longer-run levels require mappings to rolling expected interval means.
- **Germany/euro area:** ECB SMA `measure=MEDIAN`, `date_descr=long run`, `area=U2`; DFR reference, ESTR alternative, HIC inflation. Policy units must be I, inflation Y. Use submission deadlines; keep publication dates. The survey concerns headline HICP, while German bonds reference HICP excluding tobacco.
- **Australia:** J1 provider means `JSVNNIREMN` and `JSVIEXPMN`, with both replaced by `JSVNNIREMED`/`JSVIEXPMED` in the median case. Neutral history begins February 2024 and deferred inflation May 2015. Reference-month ends proxy unknown historical release dates. The 28 August 2026 CSV update is not each historical release date; August observations are outside the cutoff.

Apply the local-level model above. It has no hard age exclusion; ages are retained. Neutral/long-run policy approximates years-5–10 policy after convergence. UK expectations remain HMT throughout, including this recent comparison.

### Longer macro histories

US/euro-area anchors use one-sided HLW 2023 COVID-adjusted r-star in the **2026Q1 historical vintage**, associated with scheduled release on 1 June 2026. Multiply real percent by 100. Assign values to reference-quarter ends and carry the last value for at most **270 calendar days**. No extra local-level fit is applied.

Australia uses the 26 March 2026 speech workbook, Data Graph 3 columns **H/I/J**, all labelled “Semi structural”. Mean the three nominal-neutral values and subtract assumed **250 bp** target inflation. Do not subtract time-varying J1 inflation from this history. Alternatives use each column separately or `10000*log(1.025)=246.926126` bp. The RBA does not document an exact additive 2.5% construction; this is the study’s mapping.

Exact H/I/J locations identify the variants; unique names are unavailable in the captured workbook. Market columns K/L and VAR columns M–O are excluded. Quarter-end carry is capped at 270 days. July 2026 uses Australia’s December 2025 quarter (212 days old) and HLW March 2026 (122 days). These retrospective quarter assignments are not claims about historical release availability. Later revised HLW is a named sensitivity.

## 6. Exact-horizon MPS conversion

All 27 March 2023–June 2026 releases use the same seven CPI bins: **≤1.00; 1.01–1.40; 1.41–1.80; 1.81–2.20; 2.21–2.60; 2.61–3.00; >3.00 percent**. [Native bins](inputs/mps_native_bins.csv) and JSON retain every release’s edges, inclusivity, cells and original probabilities.

Require seven unique bins, finite probabilities in [0,100], and a sum within 0.35 percentage points of 100. Normalize `p_j=a_j/sum(a)`. Replace only the first lower and last upper bounds with supports **[-1,5]**, **[-2,6]** or **[-5,10]** percent. Retain native interior endpoints; set `m_j=(lo_j+hi_j)/2`.

```
expected_log_bp = 10000*sum_j p_j*log1p(m_j/100)
arithmetic_mean_pct = sum_j p_j*m_j
```

Use the first formula, not the log of the second. Support bounds substitute lower/upper bin endpoints inside the log; they condition on finite tails and within-horizon mapping. The annual-average-rate outcome is treated as constant through the interval to map to log growth. The source does not identify the missing Jensen/path term.

Update on **publication dates** and carry the last published observation without smoothing or backfill, for at most **180 days**. July uses the 19 June 2026 release, 42 days old. CPI-to-CPIH and exact daily-horizon mappings remain assumptions. MPS is not spliced into the long HMT reference.

## 7. Date matching and aggregation

Start from actual dates in the matched UK/US input, after UK anchors start. Intersect exact calendar dates with every selected foreign real curve and supported anchor path. This aligns days, not intraday fixing times.

For months, use the last shared observation no more than **seven calendar days** before month-end. Gaps remain. The macro three-market history starts 22 March 2012: 159 retained months, 14 missing/stale. US/Australia starts 22 August 2005: 239 months, 13 missing/stale. The three-market survey panel starts 29 February 2024: 30 months through July 2026.

Quarterly inflation comparisons average actual daily observations. Require at least **80% of reference UK dates** and at least **30 reference dates**, with quarter end by the cutoff. Multi-quarter windows require every specified quarter and equal-weight quarter means. The **30 December 2019–31 July 2026 daily endpoint change** differs from the **2019 Q4–2026 Q2 quarter-average change**. Monthly correlations use adjacent months only.

## 8. Scenario and field dictionary

[Expanded global scenarios](support/global_scenarios_expanded.json) explicitly describe all **41 cases**:

| Field | Meaning |
|---|---|
| `scenario` | Stable case identifier |
| `members`, `weights` | Fixed country set and level weights |
| `UK_loading` | Assumed beta multiplying foreign compensation |
| `anchor_family` | Survey or macro; no time splice |
| `market_curve_methods` | Per-country zero-curve choice |
| `expected_real_anchor_gap_bp` | Add to expected real; lowers compensation |
| `unallocated_real_market_basis_bp` | Add to market real; raises compensation |
| `state_override` | Statistic, instrument, noise or filtering change |
| `AU_macro_variant` | Mean or H/I/J, labelled model_1/2/3 |
| `AU_target_deflation` | Arithmetic or log target |
| `HLW_variant` | Reference or post-cutoff revised vintage |
| `daily_rows`, `first`, `last` | Actual daily coverage before monthly gate |

Cases include memberships, US-heavy weights, UK loadings 0.5/1.5, PCA weights, expected-real gaps ±50 bp, curve and market-basis allowances, survey statistics/instruments, macro model choices and vintage. AU/DE noise/smoothing cases alter only those states; frozen US/UK states stay fixed.

PCA is retrospective: standardize monthly country-compensation levels, take the leading covariance eigenvector, orient its sum positive and require every loading positive. Convert `v_c` to original-level weights `(v_c/s_c)/sum(v_j/s_j)`. Require at least 12 common months. Primary weights remain equal.

[The 21 UK cases](support/uk_scenario_menu.csv) cross seven belief paths with three frozen CPIH mappings:

| Belief path | Rule |
|---|---|
| HMT reference | 25 bp measurement SD; estimated q; filtered |
| HMT responsive | 12.5 bp measurement SD; estimated q; filtered |
| HMT fixed innovation | 25 bp measurement SD; q=25 bp²/month; filtered |
| Latest HMT | Last publication-dated observation; maximum age 550 days |
| Three MPS paths | Finite supports above; maximum age 180 days |

Mappings are `policy_adjusted`, `statistical_only`, `us_only`, all from the frozen market input. With belief change `delta` and market-inflation change `b`, hold UK expected nominal and the foreign benchmark fixed: `er_new=er-delta`, `PI_new=PI+b-delta`, `L_new=L-b+delta`. The identity is preserved.

The 21 UK cases crossed with three reference foreign histories give **63 five-part cases**. Envelopes are unweighted minima/maxima over the declared menu. An additional ±25 bp change in the comparison-window expected CPIH/CPI/horizon gap is an illustrative stress, not a calibrated bound.

The JSON field dictionary defines actual dates, source hashes, native/transformed units, observation ages, conditional variances and component fields. Native metadata retain the provider definitions; missing metadata are not fabricated.

## 9. Reproducibility and open problems

Hashes, schedules, exact repricing and add-up checks establish inspectable numerical construction. They do not assign residual compensation uniquely to risk, investment or fiscal credibility. A foreign liquidity shock raises the benchmark and lowers UK-relative compensation mechanically.

Unknowns include historical publication/retrieval timestamps, Australian ISIN/base-index histories, uniquely named RBA variants, complete real-time vintages, and unconditional component uncertainty. Exact columns and normalized cash-flow conventions permit the stated computation without claiming those gaps are resolved.

[specification.json](specification.json) contains all parameter values, release-specific bins, seven date proxies, expanded scenarios, fit diagnostics and runtime versions. [sources.json](sources.json) records provider URLs and original hashes. [frozen_inputs_manifest.json](frozen_inputs_manifest.json) records downloadable files. Original text, charts and research outputs by Russ Oxley are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). Third-party inputs remain subject to their publishers’ terms; this licence does not relicense third-party documents or databases. [Read the licence](https://creativecommons.org/licenses/by/4.0/).
