You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
I Luk Kim cffb8d872d Add three-tier VIX/FRED fallback to paper trader (strict-conservative)
On 2026-05-08 19:45 UTC a transient Oracle FRED-proxy 5xx storm caused
paper_engine_vix_fred_unavailable to fire (3 sequential 500s; the 4th
attempt returned 200 OK with VIX=17.08). The pre-fix engine just left
VIXCLS missing from the macro dict, which the selector at
libs/backtest/selector.py:1171-1173 already treats strict-conservatively
(None → veto). So the 5/8 incident vetoed v7.356 PEAD candidates for
~1 minute with no money-loss exposure. But:

  - Log severity was thin (info-level "unavailable", no escalation).
  - No tolerance for short outages — every 500 cost the gate's signal.
  - EventDetector PostgreSQL rows do not pre-populate macro_vix per
    engine.py:2810-2812 comment, so live trading depends entirely on
    the FRED fetch path.

Fix: in-memory session-scoped cache + 3-tier fallback in
PaperTradingEngine._fetch_macro:

  Tier 1  fetch ok          → cache (value, now_utc), log ..._ok (info)
  Tier 2  fail, cache <24h  → return cached value, log ..._stale_fallback
                              (warning) with staleness_sec
  Tier 3  fail, cache stale → None, log ..._unavailable_blocking (error)
                              with reason={no_cache,cache_too_stale}

The None-veto path through the selector is preserved exactly, so no
silent-pass on unknown VIX. Empty/0 observations now treated as outage
to defend against an upstream regression flipping "missing→veto" into
"0→always-pass".

The thin libs/oracle_client/fred.py is intentionally untouched — fallback
policy belongs in the engine, not the generic client.

6 new tests in tests/unit/paper_trader/test_vix_fred_fallback.py
(success/cache-write, 500+stale-<24h, 500+stale->24h-blocks,
no-cache+500-blocks, empty-observations-blocks, recovery-refresh).
All 18 tests in -k "vix or fred" pass; full paper_trader suite 45/45.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3 months ago
..
backtest Add reaction_close salvage variant to PeerSympathy engine 3 months ago
intraday Clean up superseded configs and commit accumulated R&D infrastructure 4 months ago
orb_trader Investigate compound mode: V23 is absolute champion in all modes 4 months ago
paper_trader Add three-tier VIX/FRED fallback to paper trader (strict-conservative) 3 months ago
tools Remove momentum breakout sleeve (overfitting, valid -31%) and revert related code 4 months ago
web Investigate compound mode: V23 is absolute champion in all modes 4 months ago
__init__.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_config.py feat: PEAD mid-cap strategy + pipeline hardening + README cleanup 5 months ago
test_continuation_snapshot.py Update tests for pipeline, backtest engine, paper trader, and new modules 5 months ago
test_db_models.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_enrich_catalyst_persistence_features.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_enrich_earnings_history_features.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_enrich_peer_surprise_features.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_enrich_tier2_features.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_ensemble_overlay_backtest.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_event_features.py feat: PEAD mid-cap strategy + pipeline hardening + README cleanup 5 months ago
test_file_store.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_financial_features.py implement Phase 2 gap items: backfill CLI, retry, financial features 5 months ago
test_fred_service.py test: Phase 1/2 체크리스트 재작성 및 Oracle 실연동 통합 테스트 5 months ago
test_ids.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_labeler.py Fix label_price_unavailable: preserve future entry_dates as pending 3 months ago
test_llm_cache.py feat: implement Phase 3 -- LLM enrichment, labeler, review queue, dataset export 5 months ago
test_llm_client.py fix: disable Qwen3.5 thinking mode and switch OllamaClient to sync httpx 5 months ago
test_llm_parser_stub.py test: Phase 1/2 체크리스트 재작성 및 Oracle 실연동 통합 테스트 5 months ago
test_logging.py test: Phase 1/2 체크리스트 재작성 및 Oracle 실연동 통합 테스트 5 months ago
test_market_features.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_merged_snapshot.py Update tests for pipeline, backtest engine, paper trader, and new modules 5 months ago
test_merger.py feat: implement Phase 3 -- LLM enrichment, labeler, review queue, dataset export 5 months ago
test_oracle_client.py Add paper trader improvements, web GUI updates, and experiment registry cleanup 4 months ago
test_retries.py test: Phase 1/2 체크리스트 재작성 및 Oracle 실연동 통합 테스트 5 months ago
test_review_queue.py feat: implement Phase 3 -- LLM enrichment, labeler, review queue, dataset export 5 months ago
test_rule_parser.py Harden 8-K item-code classifier against dirty input strings 3 months ago
test_schema_validator.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago
test_snapshot_export.py Add ownership/risk-off sleeves, v17-v19 experiments, and web app restructure 4 months ago
test_text_normalizer.py Update tests for pipeline, backtest engine, paper trader, and new modules 5 months ago
test_time_utils.py feat: implement ACE-F v1 Phase 1 -- Stock Oracle 기반 이벤트 파이프라인 5 months ago