Repository navigation
Description
Summary
At main commit 151349d1bb960d8902fe2991afdfc59d83b8fb44, a long-lived editable installation can reuse a cached stochrsi_fastk_numba specialization compiled before the RSI missing-observation fix. One missing close then produces finite zero StochRSI values through the end of the series instead of values consistent with the corrected RSI implementation.
Public API reproduction
Using a deterministic 2,000-row OHLCV frame and compute_features(frame, ["stochrsi"], assume_sorted=True):
- insert one null close at row 500;
- compare the final 200 clean and holed StochRSI values at
rtol=1e-6; - 150 values disagree;
- every holed tail value is
0.0.
The existing public behavior contract fails consistently:
uv run pytest tests/features/test_missing_observation_handling.py::test_one_missing_bar_is_never_silently_absorbed --override-ini='addopts=' -q -k stochrsi-close
The same test passes with NUMBA_DISABLE_JIT=1.
Evidence
The checkout contains stochrsi_fastk_numba cache artifacts from 2026-08-08, before the RSI gap fix at 62ce7b8, while current RSI cache artifacts were rebuilt on 2026-08-11. stochrsi_fastk_numba calls rsi_numba inside a cached compiled function, so the caller can retain the old embedded callee behavior when only the callee source changes.
Expected behavior
StochRSI must consume the current RSI implementation after an upgrade. A stale transitive JIT cache must not change public results.
Acceptance criteria
- The deterministic missing-close public API reproduction passes with JIT enabled in the previously affected checkout.
- StochRSI keeps TA-Lib parity and its current public function signatures.
- Focused StochRSI, missing-observation, lint, type, and package tests pass.
- The pull request closes this issue and the complete repository gates pass before merge.
Activity