Runir publishes scored numbers. When the math behind those numbers changes — even by a thresholding decision or a denominator pick — the change has to be visible. Otherwise a reader who compares yesterday's rate to today's can't tell whether a movement is real or methodological. This page is the log.

The rule: any change that moves a previously published number gets a dated entry here, naming the change, the affected surfaces, and the direction the number moves. If a change leaves no published number affected, it still gets a line so a future auditor can confirm.

2026-05-30 — Math-audit remediation batch (A-8, A-9, A-13, A-15)

Four corrections from the math audit shipped together as one disclosure event. None are data migrations — the underlying classifications and OHLC measurements were always banked correctly; the changes are at the aggregation / display layer.

A-8 — Covered-call yield now divides by spot, not strike

What changed. The yield shown on the Premium board for covered calls now divides the contract premium by SPOT (the capital you actually have committed in shares), not by the strike. Cash-secured puts continue to divide by strike (cash collateral equals strike). Both are now true return-on-capital, so the board ranks CC and CSP plays on comparable economic terms.

Why. A covered call requires you to hold 100 shares per contract — capital committed is roughly spot, not strike. The prior /strike basis understated CC yields, especially on out-of-the-money calls where strike > spot. A wheel-seller comparing two plays on the Premium board needs them quoted on the same denominator to compare apples-to-apples.

Number movement. Published CC yields rise. The magnitude is roughly proportional to how far out-of-the-money the call is (e.g., a call with strike 10% above spot lifts the published yield by about 10% of its prior value). CSP yields unchanged.

A-9 — Fibonacci confluence is now swing-direction-aware

What changed. The Fib retracement levels Runir checks for confluence with a published wall now depend on which extreme of the trailing window is more recent. Up-swings continue to measure from the low; down-swings measure from the high.

Why. The previous implementation always measured from the swing low. On an up-swing that's the conventional chartist read. On a down-swing it isn't — a level the code tagged as 0.786 on a down-swing was actually at the 0.214 position from the high, which isn't a standard down-swing retracement. The fix makes the tag match what a reader cross-checking against a chart platform would draw.

Number movement. On tickers in a down-swing, confluence tags shift to different fib labels and may fire on different walls. The window stays ~60 sessions; tolerance stays 0.5% — nothing cherry-pickable changes about how confluence is detected, only the anchoring direction.

A-13 — Persistence is fixed-anchor (clarified)

What changed. No code change — a documentation + invariant clarification. Wall persistence (the "held N sessions" count) compares each prior session's wall to today's published level, not to the immediately prior day's wall. The implementation always did this; the audit asked us to pin the definition explicitly so the upcoming v3-atr migration carries it forward without drifting.

Why it matters. Under rolling day-over-day comparison, a wall that drifts 0.9% a day would stay "persistent" indefinitely — cumulative drift could exceed 10% in a couple of weeks while the count keeps climbing. Under fixed-anchor against today's wall, the streak breaks the moment cumulative drift exceeds the band — which means "the wall at $X has held N sessions" stays literally true. The v3-atr migration replaces the current 1.0% tolerance with 0.25·ATR but keeps the fixed-anchor rule unchanged.

Number movement. None today.

A-15 — Zero-gamma scan finds all flips, reports the nearest

What changed. The routine that finds the gamma flip level now does a coarse grid scan across the search band, identifies every spot where dealer-net gamma crosses zero, and reports the flip closest to current spot. The previous implementation used a single bisection across the band and could return null in two cases: (a) when the band's endpoints happened to have the same sign even though a flip existed inside, and (b) on barbell chains where two flips exist in the search range — only the first bracket got found.

Why. A real options chain can produce a gamma profile with two zero-crossings (a "barbell" of heavy OI at two distant strikes pushes the dealer net through zero twice). The flip that matters is the one price actually interacts with — the nearest to spot. Reporting only one of multiple flips, or nulling when a flip exists inside the band, both silently mis-represented dealer positioning.

Number movement. Tickers whose gamma flip was previously reported as null may now publish a level. Tickers with barbell chains may see their published flip move — from whichever flip happened to be bracketed by the prior single-bisection to the one closest to current spot. Single-flip tickers (the common case) unchanged.

How to cross-check any of these

Every change above lands as a separate commit referenced in the repo log, with unit tests that lock the new behavior against regression.