{
  "generated_at": "2026-06-13 01:59 EDT",
  "incidents": {
    "OVERALL": [
      {
        "incident_id": 128,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "S-tier/A-tier score-band tiles on /audit/ are survivorship + fixed-TP-labeling artifacts (intrabar-true WR ~34-38%, 0% for S in replay)",
        "description": null,
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "audit_dashboard scoring + resolver",
        "reported_by": "grok-4.3 (deep-dive 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "Keep/enhance DISPUTED banners (already in index.html + pick_funnel); add intrabar warning to S-tier tiles; do not size on score-bands (per pf_registry policy-clean ~33-39% WR). Cross-ref INCIDENT #18 swarm.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 18:12:07",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 18:12:07",
        "resolved_at": null,
        "link_md_path": "reports/money_ready_bridge_summary_2026-06-09.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 127,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Non-crypto asset classes (FOREX/COMMODITY/ETF/FUTURES) stuck at sub-coinflip WR (25%/22%/21%/33%) with low n, negative expectancy and policy frozen",
        "description": null,
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "emission/quality_gates/strategies/non-crypto",
        "reported_by": "grok-4.3",
        "assigned_to": null,
        "recommended_fix": "Hard non_crypto_edge_guard in passes_active_gate (block unless proven carry/COT/seasonal/risk_parity/proxy sources); banned etf_all_strategies/multi_asset_cot/futures_connors_rsi2 etc in PERMANENTLY_KILLED; tightened MIN_ELITE_SCORE_BY_CLASS (ETF 50, FOREX 65, COMMODITY 40); promote class-specific sleeves and proxies. See worktree fixes + 2026-06-09 non-crypto report.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 18:05:02",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 18:05:02",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 110,
        "asset_class": "OVERALL",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Resolver-version selection bias: same data yields 4-6x PF spread -> no class has a defensible edge",
        "description": "Adversarial re-measurement of at_pick_outcomes shows the apparent per-class edge is a function of WHICH resolver version ran, not alpha. CRYPTO June n=867: universal_v2 WR 63.8%/PF 3.03 vs newest v2.2_sync_2026-06-05 (n=172) WR 33.1%/PF 0.51 -- a verdict inversion on the SAME data. Class-wide per-resolver PF spread 0.51->2.15 (~4-6x). Resolved-only CRYPTO WR 51%/PF 1.02 = coin flip; PF never clears 1.5 in any full month. All 7 classes downgraded to NO_EDGE/INSUFFICIENT after verification.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "resolver/measurement layer",
        "reported_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Quarantine backfill rows + run a single canonical intrabar resolver; re-baseline every class on the clean forward cohort (>=3 months n>=30/mo PF>1.5) before ANY sizing.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 13:33:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 13:33:04",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 111,
        "asset_class": "OVERALL",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "70-95% TIME_EXPIRED across all classes invalidates the resolved-outcome dataset",
        "description": "Expiry rates: CRYPTO 55.8%, EQUITY 81.1%, FOREX 84.1%, COMMODITY 84.4%, ETF 80.1%, BOND 81.3%, FUTURES 93.6%. Two mechanisms: (1) no intrabar OHLC replay -> picks marked flat-at-horizon instead of TP/SL-first-touch (expired buckets sit at ~0% pnl, COMMODITY 4916/4944 exactly 0.0); (2) TP/SL ~5x realistic intra-horizon moves. No walk-forward/DSR/SPA is defensible until fixed. tools/validate_intrabar_fills.py exists but isn't the production resolver.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "resolver/measurement layer",
        "reported_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Make intrabar OHLC replay the production resolver for ALL classes; propagate picks_now_professional.py per-class TP/SL caps into production_scanner emitters.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 13:33:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 13:33:04",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 112,
        "asset_class": "OVERALL",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Backfill contamination: forward_test_only=0 on ALL crypto+equity rows; 68-100% backfill resolver labels",
        "description": "Retroactive backfill_* resolver passes wrote TP_HIT/SL_HIT never validated against live price: CRYPTO 68.8% of resolved, FOREX 90.7%, COMMODITY 92%, BOND 100%, FUTURES 96%. forward_test_only=0 on every CRYPTO (14721) and EQUITY (2153) row -- not one genuine forward test exists. Verdict math must exclude resolver_version LIKE 'backfill%' and resolved_at IS NULL.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "resolver/measurement layer",
        "reported_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Exclude backfill + NULL-resolved_at rows from all WR/PF/DSR/stability; patch shadow_pilot_verdicts so EXPIRED rows are not counted as resolved (FUTURES currently shows pf_ok:true on 378 expired rows).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 13:33:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 13:33:04",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 94,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "TIME_EXIT resolver writes pnl_pct=0 on 99.9% of expiry closes (33172/33213 rows)",
        "description": null,
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine outcome_resolver TIME_EXIT path; need mark-to-market price at expiry timestamp",
        "reported_by": "claude /loop 2026-06-04",
        "assigned_to": null,
        "recommended_fix": "Resolver currently writes pnl_pct=0 for all status=TIME_EXIT closures instead of computing (exit_price - entry_price)/entry_price * direction_mult. Affects 33,172 rows. Impact: forward-test promotion gate (n>=100 decisive) can never count TIME_EXIT picks, so b_flip n=40 actual but tracker sees n=0; inverse_ml RENDERUSDT 1h has n=57 forward picks invisible. Fix: at TIME_EXIT closure, fetch last OHLC bar's close price from the strategy's universe-bar source (alpha_engine/data/ohlc/<symbol>.json or yfinance/binance), compute pnl, write. Affected ALL strategies; 14 anomalously have non-zero values (vix_reversal n=4, forex_rsi2_mean_reversion n=2, etc.) \u2014 those should be examined as known-good path.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-04 ~13:00 UTC: writer fix shipped (commit c7cfa69b2d, alpha_engine/mysql_trading_sync.py adds close_price/closePrice fallbacks). One-shot backfill ran (commit 575b5b6153, tools/backfill_time_exit_pnl.py), fixed 32473/33157 rows. Post-state: 1326 still pnl=0 (delisted symbols, no yfinance/Binance data), 31990 now have real pnl, 6 null. TIME_EXIT decisive subset shows +0.039% avg pnl with 53.5% positive \u2014 strategies had slight hidden edge throughout. UNLOCK: verified-strategy forward n jumped from 5 to 258 across 6 sleeves. inverse_ml_ADAUSDT_15m emerges as strongest (PF 1.73, n=36). Bootstrap-forward tracker can now see real numbers. Refs: reports/verified_strategies_unlock_2026-06-04.md, ENHANCEMENT #116 (kill RENDER_4h dead strategy), ENHANCEMENT #117 (promote ADAUSDT).",
        "duplicate_of": null,
        "created_at": "2026-06-04 12:23:12",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 14:34:16",
        "resolved_at": "2026-06-04 14:34:16",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 91,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "alpha_engine writes 8-43x duplicate rows to at_signal_outcomes",
        "description": null,
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "audit_trail/backfill_local_sources.py:194,295,380 + tools/repair_data_integrity.py:278",
        "reported_by": "claude /loop 2026-06-04",
        "assigned_to": "operator-review",
        "recommended_fix": "Add UNIQUE INDEX on (symbol,opened_at,strategy,direction,source_system) OR fix writer idempotency. Evidence: reports/crypto_alpha_engine_bleed_2026-06-04.md showing CRYPTO 43x, EQUITY 15.75x, FOREX 8.33x duplication",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "WRITER-FIX VERIFIED 2026-06-04 11:00 UTC: 0/606 new alpha_engine rows leak NULL opened_at (was 98.2%). Future duplicates blocked by idx_dedup. ROOT CAUSE addressed at audit_trail/backfill_local_sources.py:194 (commit b34bee477b). Code-side fix complete. REMAINING (operator-only, optional): one-time backfill dedup of pre-fix 40K duplicates and optional idx_dedup_close secondary index for belt-and-suspenders. Closing OPEN portion \u2014 new writes are clean and verified.",
        "duplicate_of": null,
        "created_at": "2026-06-04 08:52:33",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 12:08:23",
        "resolved_at": "2026-06-04 12:08:23",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 89,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Live DB password stocks1234560 hardcoded repo-wide (rotate + scrub)",
        "description": "git grep finds the live DB_PASS_STOCKS value stocks1234560 committed in 5+ files on main + reproduce-blocks of open PRs #481/#482/#485. /updates docs publish to the public site. Pre-existing widespread leak.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "multiple (SKILL.md, alpha_engine/forward_test.py, rigorous_backtest_harness.py, +)",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "CODE-SIDE DONE 2026-06-04 (claude-opus-4-7): 26/26 .py files scrubbed; `git grep stocks1234560 -- '*.py'` returns 0. Forward-fence CI .github/workflows/db-password-leak-guard.yml prevents new additions. OPERATOR ACTION REMAINING: (1) rotate the ejaguiar1_stocks DB password, (2) update GH Secrets + ~/.bashrc env vars, (3) revoke the old credential at the DB. Session deliverables: reports/session_deliverables_2026-06-03_2026-06-04.md",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-03 02:27:13",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 02:09:14",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 81,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "P0: mutation_framework.py compute_pf() returns win-count ratio, not Profit Factor",
        "description": "compute_pf() at line 47-50 returned wins/losses (count ratio) with 999 fallback, not sum(pnl_wins)/abs(sum(pnl_losses)). All claimed PF 600+/400+/200+ from mutation scan were math artifacts. Fixed to gross_profit/abs(gross_loss).",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "verified_strategies/mutation_framework.py",
        "reported_by": "peer-broadcast-grok",
        "assigned_to": null,
        "recommended_fix": "Replace wins/losses with sum(positive_pnls)/abs(sum(negative_pnls))",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Fixed compute_pf() to use gross_profit/gross_loss. Committed 13e55abbb.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-02 14:36:14",
        "resolved_at": null,
        "link_md_path": "",
        "link_url": "https://github.com/eltonaguiar/findtorontoevents_antigravity.ca/blob/main/verified_strategies/mutation_framework.py",
        "link_github_ref": null
      },
      {
        "incident_id": 80,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "mutation_framework compute_pf used win/loss COUNT ratio, not Profit Factor (inflated INVERT mutations)",
        "description": "compute_pf returned wins_count/losses_count with 999 fallback when losses==0, not gross_profit/gross_loss. Inflated PF for many-tiny-wins vs few-losses series -> bogus PF 600+/400+/200+ on Mimo's 10 INVERT mutations (artifacts, not edge). Flagged P0 by peer gx10, verified on disk by claude-opus-4-8.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "verified_strategies/mutation_framework.py:47-50",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Replace with true PF = sum(pos)/abs(sum(neg)); keep 999.0 sentinel only for genuine no-loss case. Proof: 50x(+0.1)+1x(-10) -> 0.5 (was 50.0).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Fixed in PR #460 (branch fix/mutation-framework-pf-math). py_compile clean; all callers internal.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:31:59",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:31:59",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "460"
      },
      {
        "incident_id": 78,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Mutation framework compute_pf is broken: returns win/loss COUNT ratio, not Profit Factor",
        "description": "Mutation framework compute_pf is broken: returns win/loss COUNT ratio, not Profit Factor",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "verified_strategies/mutation_framework.py:48-50",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Replace compute_pf with sum(winning_pnl)/|sum(losing_pnl)|. All 10 'ADOPTED' INVERT mutations (PF 0.25 -> 600+) are math artifacts -- when losses==0 count-wise, function returns fallback 999. Do NOT ship inverted strategies until proper PF computation verified.",
        "target_release": null,
        "evidence": "{\"source\": \"Mimo v2.5 Pro EAGLE2_2026-06-02_MIMO_FINAL.MD\", \"buggy_line\": \"return wins / losses if losses > 0 else (999 if wins > 0 else 0)\", \"claimed_pfs\": [600, 400, 400, 200, 200, 2.12, 2.17, 1.7, 1.65, 1.08], \"correct_formula\": \"PF = sum(p for p in pnls if p>0) / abs(sum(p for p in pnls if p<0))\", \"affected_mutations\": [\"betting-against-beta INVERT\", \"stocks_rsi2_pullback INVERT\", \"regime_accumulation INVERT\", \"macd-hidden-div-scout INVERT\", \"rsi-divergence-scalp-scout SYMBOL_ROTATION\", \"unknown INVERT\", \"multi_period_rsi_confluence_eth INVERT\", \"bollinger-squeeze INVERT\", \"rsi-divergence-scalp-scout INVERT\", \"extreme_fear SYMBOL_ROTATION\"]}",
        "resolution_notes": "PR #469 merged: admissibility_pipeline+quant_monitor gross P/L PF. mutation_scan_honest_latest.json: no PF600+. inverted_strategies remain RESEARCH ONLY.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:25:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 18:43:13",
        "resolved_at": "2026-06-02 14:30:45",
        "link_md_path": "EAGLE2_2026-06-02_MIMO_FINAL.MD",
        "link_url": null,
        "link_github_ref": "updates/2026-06-02-mutation-framework-pf-fix.md"
      },
      {
        "incident_id": 73,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "Block-bootstrap MC null missing - all backtest null distributions suspect",
        "description": "rigorous_backtest_harness.py used bootstrap-with-replacement for PBO, destroying serial correlation. Momentum/trend strategies always appear insignificant. Fixed with moving-block bootstrap.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/rigorous_backtest_harness.py",
        "reported_by": "kilo-mimo-free",
        "assigned_to": null,
        "recommended_fix": "Implemented block-bootstrap in strategy_verification_engine.py.",
        "target_release": null,
        "evidence": "{\"new\": \"moving-block bootstrap\", \"old\": \"bootstrap-with-replacement\", \"ref\": \"Politis & White 2004\"}",
        "resolution_notes": "Created strategy_verification_engine.py with block_bootstrap_null().",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:19:37",
        "date_est": "2026-06-02",
        "time_est": "08:00",
        "updated_at": "2026-06-02 14:19:37",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE_SWARM_CONSOLIDATED_2026-06-02.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 74,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "DSR n_trials None - TypeError crash in rigorous_backtest_harness.py",
        "description": "DSR_PARAMS[\"n_trials\"] was None, _load_real_n_trials() never called. TypeError on n_trials <= 1 comparison.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/rigorous_backtest_harness.py",
        "reported_by": "kilo-mimo-free",
        "assigned_to": null,
        "recommended_fix": "Fixed: run_backtest() now calls _load_real_n_trials() as fallback.",
        "target_release": null,
        "evidence": "{\"error\": \"TypeError: '<=' not supported between NoneType and int\"}",
        "resolution_notes": "Changed to: n_trials = DSR_PARAMS[\"n_trials\"] or _load_real_n_trials().",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:19:37",
        "date_est": "2026-06-02",
        "time_est": "12:48",
        "updated_at": "2026-06-02 14:19:37",
        "resolved_at": null,
        "link_md_path": "alpha_engine/rigorous_backtest_harness.py",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 67,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Orphan test file blocking all PR CI: test_money_ready_capital_lock referenced symbols not on main",
        "description": "Orphan test file blocking all PR CI: test_money_ready_capital_lock referenced symbols not on main",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "tests/test_money_ready_capital_lock.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "PR #450 (merged): module-level conditional skip. Will auto-resume when tag_money_ready_capital_lock etc. land.",
        "target_release": null,
        "evidence": "{\"orphan_commit\": \"4d89d0e9\", \"missing_symbols\": [\"tag_money_ready_capital_lock\", \"_money_ready_capital_lock_reason\", \"_verdict_rows_cached\"]}",
        "resolution_notes": "Fixed via merged PR #450 \u2014 added module-level conditional skip; auto-resumes when tag_money_ready_capital_lock and related symbols land on main. Verified 2026-06-04 by claude.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 09:23:11",
        "resolved_at": "2026-06-04 09:23:11",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #450 (MERGED)"
      },
      {
        "incident_id": 49,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "money_ready=[] \u2014 no asset class passes production gate (2026-06-02)",
        "description": "money_ready_verdict 2026-06-02 10:19Z: every class NOT_READY/INSUFFICIENT. CRYPTO PF0.92/WR36%, EQUITY PF0.33/WR27%, FOREX PF0.48; ETF/COMMODITY 3-4 trades only; BOND n=0. Research/paper edge (ai-tournament deepseek_v4 PF3.46) does not survive into policy-clean layer.",
        "severity": "P0",
        "status": "TRIAGED",
        "affected_component": "audit_dashboard/data/money_ready_verdict.json",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Bonferroni/FDR pre-gate + hard-reject single-source artifacts + resolver hygiene + single walk-forward promotion path.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Methodology-gap stack shipped this session (PRs #466/#470/#475/#476/#477/#478): #64 Bonferroni/FDR pre-gate, #65 single-source-artifact gate, #66 unified promotion path + two-scoreboard drift detector, #67 shadow-size capital ladder, BONDS#7 data feed, #8 resolver-hygiene checker. NOT marking RESOLVED: money_ready is still [] (no class has deployable edge \u2014 a real-state finding, not a bug) and the FDR/single-source gates ship SHADOW (default OFF). Close condition: enable MONEY_READY_FDR_GATE=1 + MONEY_READY_SINGLE_SOURCE_GATE=1 after 1-2wk shadow review, then a class clears the unified harness.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:16:51",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 22:54:03",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 48,
        "asset_class": "OVERALL",
        "source_ref": "alpha_engine/outcome_resolver.py:300-313 _is_non_crypto",
        "title": "closed_picks.json: cross-asset symbol resolution corruption (e.g. SHIBUSDT resolved as SHIB stock)",
        "description": "21 picks across alpha_engine/data/closed_picks.json + sibling files show >100% pnl_pct calculation drift versus stored pnl_pct, driven by entry/exit/hwm values pulled from the wrong symbol's price tape. SHIBUSDT: entry=5.53e-06 (correct), exit=4100.97 (off by 9 orders of magnitude \u2014 likely SHIB-stock or contaminated cross-pick state). Concurrent finding in ejaguiar1_stocks.trading_picks: 34 rows with entry/exit ratio >100x; 2437 USDT/-USD symbols stored under non-crypto category (forex/equity/stocks); 8 Yahoo =X/=F symbols stored under crypto category. Root cause: alpha_engine/outcome_resolver.py:_is_non_crypto() trusts a corrupted category field before checking the symbol suffix, so SHIBUSDT (labeled COMMODITY) is fetched via yfinance instead of api_failover.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/outcome_resolver.py + alpha_engine/data/closed_picks.json + ejaguiar1_stocks.trading_picks",
        "reported_by": "claude-opus-4-7 (sub-agent, peer-discovery from gemini)",
        "assigned_to": null,
        "recommended_fix": "1) HARDEN _is_non_crypto(): test crypto-suffix BEFORE trusting category. If symbol endswith USDT/USDC/BUSD or -USD (and not =X/=F), route through _fetch_crypto_price unconditionally. Mirror inverse: if symbol endswith =X/=F/.SI/.HK/etc., route through yfinance even if asset_class==crypto.\n2) BACKFILL: re-derive correct exit/hwm/pnl for the 21 corrupted JSON rows and 34 DB rows with >100x entry/exit ratio. Source crypto prices via api_failover (Binance\u2192Bybit\u2192CoinGecko\u2192KuCoin); use yfinance OHLC for FX/equity.\n3) CATEGORY-INTEGRITY GUARD: add CHECK (in code, not DB) at pick-insert time that asserts symbol-suffix \u2194 category consistency, with an UNKNOWN bucket for ambiguous tickers \u2014 never silent-accept a mismatch.\n4) IMMUTABLE entry_price: once a pick's entry is recorded, never overwrite it from a resolver-fetch path. The SHIBUSDT entry=5.53e-06 is correct; the corruption is on the exit-side, suggesting the resolver mutates the wrong row when it can't find a price.",
        "target_release": null,
        "evidence": "{\"audit_date\": \"2026-05-31\", \"root_cause\": \"alpha_engine/outcome_resolver.py:_is_non_crypto() trusts pick['category']/['asset_class'] FIRST. When a crypto pick (e.g. SHIBUSDT) is mislabeled as COMMODITY, the resolver passes 'SHIBUSDT' to yfinance instead of api_failover. yfinance does not recognise SHIBUSDT as the SHIB-USD coin pair but appears to resolve it (or the surrounding loop carries contaminated price state) into a different asset's price tape \u2014 producing exit/hwm values that belong to other symbols (e.g. SHIBUSDT exit=4100.97 matches contemporary EURUSD=X hwm=4561.20 in the same JSON).\", \"report_path\": \"reports/symbol_resolution_corruption_audit_2026-05-31.md\", \"backup_table\": \"ejaguiar1_backups.INCIDENT_OVERALL_pre_symbol_resolution_corruption_incident_20260*\", \"files_scanned\": 21, \"secondary_bug\": \"Asset-class categorization upstream is broken: 2437 USDT/-USD picks in trading_picks are stored with category in (forex/equity/stock/stocks) \u2014 including 1754 rows of USDCAD=X labelled forex (correct) but 4 BCH-USD as equity, LINKUSDT/AVAXUSDT/BNBUSDT as stocks, EURGBP=X/SI=F/PL=F/USDJPY=X as crypto. Mislabeled rows poison the resolver lookup.\", \"example_smoking_gun\": {\"id\": \"vwap_rsi_confluence::SHIB-USD::2026-05-27\", \"symbol\": \"SHIBUSDT\", \"exit_price\": 4100.97, \"entry_price\": 0.00000553, \"price_ratio\": 824810161.9, \"stored_pnl_pct\": 0.074, \"high_water_mark\": 4561.2, \"asset_class_in_json\": \"COMMODITY\"}, \"picks_scanned_total\": 3307, \"crypto_suffix_severe\": 9, \"top_affected_symbols\": [\"JUPUSDT(5)\", \"USDJPY=X(2)\", \"ARBUSDT(2)\", \"NZDUSD=X(2)\", \"SHIBUSDT(1)\", \"SI=F(1)\"], \"severe_mismatch_count\": 21, \"db_rows_price_ratio_gt_100x\": 34, \"db_rows_price_ratio_gt_1000x\": 13, \"db_usdt_or_usd_miscategorized_as_noncrypto\": 2437, \"db_yahoo_suffix_miscategorized_as_crypto_sample\": [\"EURGBP=X=crypto\", \"SI=F=crypto\", \"PL=F=crypto\", \"USDJPY=X=crypto\", \"AUDUSD=X=crypto\"]}",
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #158 gives crypto-suffix detection precedence over corrupted category in the cross-asset resolver, fixing SHIBUSDT\u2192SHI-class corruption in closed_picks.json.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:58:17",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": "reports/symbol_resolution_corruption_audit_2026-05-31.md",
        "link_url": null,
        "link_github_ref": "PR #158"
      },
      {
        "incident_id": 46,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "29.2M open positions in bt_backtest_trades (NOT trading_picks); monitoring script miscounted",
        "description": "open_bloat check on 2026-05-25: db_health_check.py queried bt_backtest_trades (millions of backtest rows) and reported 29,254,204 OPEN rows. The incident was incorrectly attributed to trading_picks (which had ~46K rows at the time). info_schema estimate for bt_backtest_trades was 1,271,867 \u2014 the 23x divergence was itself a monitoring bug (COUNT(*) vs TABLE_ROWS sampling). The forward_validator was never frozen (alpha-engine-live ran green every ~2h); the actual freeze was the Outcome Resolver workflow (git-add on gitignored file). Fixed 2026-05-28: db_health_check.py now queries both tables independently + cross-validates against info_schema with >10x divergence detection.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "tools/db_health_check.py check_open_bloat() + outcome-resolver.yml",
        "reported_by": "qwen-code+buffy",
        "assigned_to": null,
        "recommended_fix": "Fixed: db_health_check.py now queries bt_backtest_trades and trading_picks independently with info_schema cross-validation (10x divergence detection). The 29.2M was a monitoring bug (COUNT(*) on backtest table, not trading_picks). Forward validator was never frozen \u2014 the actual freeze was the Outcome Resolver workflow. No further remediation needed for this incident.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-05-31 02:29:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 02:29:01",
        "resolved_at": null,
        "link_md_path": "updates/2026-05-28-forward-validator-outcome-resolver-remediation.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 24,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Profitable-but-filtered picks are not surfaced anywhere",
        "description": "The current audit pipeline shows rejects in aggregate but provides no durable lane for picks that failed gates and later would have won materially. That hides false negatives and prevents learning whether concentration, thin-sample, or quarantine rules are discarding real edge.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "audit_trail/quality_gates.py + dashboard_generator.py audit surfaces",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Add a profitable-but-filtered / profitable-but-quarantined audit lane with per-pick first-failed gate, later outcome, and asset-class rollups. Keep it observational first \u2014 do not weaken live gates in the first batch.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "OPERATOR-PENDING: New observational audit lane is a feature design decision (per-pick first-failed gate + later outcome + class rollups). Requires product scoping before agent implementation. Recommend: enumerate the gates currently in passes_smart_gate/active_gate, build a shadow log, then surface in dashboard once data shape proven.\n\n[MEGA_RECON 2026-05-31] Resolved via PR #136 (profitable-but-filtered observability lane shipped).",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 25,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "HC JS/Python parity drift can change eligibility by surface",
        "description": "The High Conviction decision path is split across audit_dashboard/hc_filter.js and tools/dashboard_hc_rules.py. EAGLE review found likely drift around confidence handling and small-sample relaxations, so the same pick can qualify differently depending on which surface evaluates it.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "audit_dashboard/hc_filter.js / tools/dashboard_hc_rules.py",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Create one canonical HC parameter contract and parity test corpus. Until parity is proven, treat HC disagreements as a first-class incident instead of silently trusting one implementation.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "tests/test_hc_js_python_parity.py + hc_parity_corpus.json \u2014 6/6 live-config parity pass",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:06:40",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 16,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Cherry-picked SUPREME EDGE stats (82% WR / PF 13+) surfaced without 'post-hoc segment search' caveat",
        "description": "Ring-2.6-1T noted these numbers come from cell-by-cell search across (confidence \u00d7 R:R \u00d7 strategy family) buckets \u2014 they are not actionable forward signals but the /audit SUPREME EDGE callout presents them as if they were. 3/3 swarm engines (deepseek + cerebras + gemini) confirmed REAL P0. Risk: a user could size real money based on this and discover the edge does not survive forward-testing.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/template.html SUPREME EDGE block",
        "reported_by": "opencode/ring-2.6-1t + 3-engine swarm",
        "assigned_to": null,
        "recommended_fix": "Add 'post-hoc segment search \u2014 not an actionable forward signal; for narrative only' caveat to every cell drawn from top_edges_per_class.json on the page. Pin the actual forward-test WR/PF alongside.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "POST-HOC SEGMENT WARNING banner live in audit_dashboard/template.html since 2026-05-26 (lines ~1342)",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:51:47",
        "date_est": "2026-05-24",
        "time_est": "23:51",
        "updated_at": "2026-05-31 02:20:55",
        "resolved_at": "2026-05-31 02:20:55",
        "link_md_path": "reports/2026-05-25_opencode_session_deep_scan.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 17,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "smart_picks_engine weights confidence-derived elite/quality at 35% \u2014 structurally inverts the ranker",
        "description": "Distinct from the known confidence-anti-predictive incident: the ranker formula itself bakes the inverted signal into the headline score with the largest weight. Downstream of the calibration bug but a separate fix (re-weight or invert at the engine level, not at the source).",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/smart_picks_engine.py",
        "reported_by": "opencode/ring-2.6-1t + 3-engine swarm",
        "assigned_to": "claude-opus-4-7 (wf wsymmxf5o leg #17)",
        "recommended_fix": "Either (a) invert confidence contribution for crypto in _single_signal_score, or (b) replace confidence with trust_score as the primary signal per the existing code comment. Quantify lift via paired-bootstrap on closed picks.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: VERIFIED LIVE in alpha_engine/smart_picks_engine.py:176-180 \u2014 CRYPTO weights (_w_ml=0.45, _w_trust=0.40, _w_fwd=0.15, _w_conf=0.00). Confidence weight = 0.00 for CRYPTO inverts the prior 0.35 weighting per recommended fix. PR #137 synced production_scanner ML weights.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:51:47",
        "date_est": "2026-05-24",
        "time_est": "23:51",
        "updated_at": "2026-05-31 05:28:35",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": "reports/peer_gemini-ml-fix-validation_2026-05-31.md",
        "link_url": null,
        "link_github_ref": "PR#137"
      },
      {
        "incident_id": 15,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "sync_active_mysql_picks_to_json upstream writer missing \u2014 root cause of 0.09% raw-pick outcome coverage",
        "description": "Opencode 2026-05-12 identified the missing upstream writer that should read ACTIVE at_raw_picks, detect TP/SL/time-exit per asset class, and feed new entries into closed_picks.json. Without it the signal_outcomes table has 0.09% coverage of raw picks \u2014 every forward-WR claim is built on 0.1% of the actual pick population.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine/active_picks_sync.py (proposed) + forward_validator.validate_picks()",
        "reported_by": "opencode/ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "New module alpha_engine/active_picks_sync.py invoked inline from forward_validator. Reuses existing failover price fetchers. Estimate 2-3h with tests. This is the upstream of the 'signal_outcomes 82d stale' incident already filed.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon (Grok-4 finding accepted): active_picks_sync writer LIVE in .github/workflows/outcome-resolver.yml \u2014 runs --apply across CRYPTO/EQUITY/FOREX/COMMODITY/ETF every cron. signal_outcomes has 114,540 rows. PR #87 widened resolver window 5000\u219220000.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:45:06",
        "date_est": "2026-05-24",
        "time_est": "23:45",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": "session-ses_1a2d.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 11,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "WON status rows show avg pnl_pct = -41.1%",
        "description": "won_pnl_contradiction check: 2,531 rows tagged status='WON' have avg_pnl=-41.13%, 9 with negative pnl. SL_HIT rows are all negative as expected (good); TP_HIT all positive (good); LOST rows mostly negative (correct). The WON status is a labeling bug, not a stats artifact \u2014 every claim using status='WON' as a win flag is corrupted.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "trading_picks.status='WON' rows",
        "reported_by": "qwen-code",
        "assigned_to": null,
        "recommended_fix": "Re-label legacy 'WON' rows by recomputing from pnl_pct sign + exit_reason. WON->TP_HIT where pnl>0, WON->LOST or EXPIRED where pnl<=0. Add a CHECK constraint going forward.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Re-verified 2026-06-04: WON rows (n=49,497) now average +10.95% pnl (range: 0.00% to 370,850%). The -41.1% average flagged in original incident is gone \u2014 fixed by prior PnL-integrity waves and resolver-direction fixes. Outlier max=370,850% logged separately as #92 (extreme outlier audit). Status close, but max outlier needs deeper investigation.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:23:46",
        "resolved_at": "2026-05-31 02:29:38",
        "link_md_path": "audit_dashboard/data/db_health.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 13,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "29.2M open positions in trading_picks; validator frozen 270h",
        "description": "open_bloat check: 29,254,204 open status rows. info_schema estimates 1,271,867 \u2014 actual count 23x the estimate. Last terminal write was 2026-05-12 23:42 (270 hours ago). The forward_validator is frozen \u2014 no picks have been closed in 11+ days.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/forward_validator + trading_picks open queue",
        "reported_by": "qwen-code",
        "assigned_to": null,
        "recommended_fix": "Restart forward_validator. Triage the 29M-row backlog: most are likely junk/expired and can be EXPIRED-stamped en masse. Check if validator process died vs is silently failing.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "FALSE ALARM (misread), verified by direct DB query + HOTWEATHER_CORRECTION.md: 29.2M is the row count of bt_backtest_trades (a backtest table), NOT trading_picks open positions. trading_picks=~44.6k total / ~3.1k OPEN, MAX(updated_at)=today -> live validator NOT frozen. 6 agents re-derived this from a db_health.json misread; check_open_bloat() already separates the two tables. Closing as not-an-incident.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-05-29 11:47:38",
        "resolved_at": "2026-05-29 11:47:38",
        "link_md_path": "audit_dashboard/data/db_health.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "5 FOREX rows have pnl_pct < -100% (one at -106,700%)",
        "description": "Unit-clamp bug commit #876 missed 5 rows. Distorts FOREX avg to -8% and rounds PF to 0.00, making the entire class look catastrophic even though baseline WR is 43.9% on n=1666.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "trading_picks.pnl_pct (FOREX category)",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "UPDATE trading_picks SET pnl_pct = -100 WHERE pnl_pct < -100 AND category='FOREX'. Investigate the 5 rows to see which strategy/script bypassed the clamp.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Re-verified 2026-06-04: no FOREX rows currently have pnl_pct < -100%. The 5 rows (including the -106,700% outlier) have been removed or recalculated since the incident was filed. Likely fixed via prior PnL-integrity cleanup waves.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:23:34",
        "resolved_at": "2026-05-31 02:29:38",
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 3,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "signal_outcomes table 82 days stale",
        "description": "Last resolved 2026-03-04. Outcome resolver pipeline appears dead. All forward-WR performance claims unverifiable because signal_outcomes has only 0.09% coverage of raw picks.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "at_signal_outcomes / outcome resolver pipeline",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Investigate why resolver stopped writing. Possibly tied to a broken cron, env-var rotation, or schema drift in the source table.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-04: at_signal_outcomes MAX(closed_at) = 2026-06-04 07:58:39 (today, hours-fresh). The 82-day staleness gap was fixed by the May 27 backfill_local_sources.py change that started writing closed JSON picks to at_signal_outcomes (see line 295 'Also insert into at_signal_outcomes for closed picks - MISSING before 2026-05-27').",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:38:24",
        "resolved_at": "2026-05-31 02:29:38",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 5,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "COT paper pilot over-emission",
        "description": "cot_paper_pilot.py counts the same weekly CFTC release as ~100 separate trades. Inflates n from ~5 real unique releases to 101. The DSR=1.0/WR=86.5% headline is therefore overstated. Three independent AI audits flagged this.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "cot_paper_pilot.py / cot_positioning strategy",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Deduplicate by CFTC release week. Recompute DSR + WR + PF on the deduped n. Re-evaluate whether COT still qualifies as the system's single SUPREME EDGE.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RE-VERIFIED 2026-06-04: COT over-emission confirmed at 18.2x ratio (237 raw picks / 13 unique by symbol+strategy+YEARWEEK over last 14d). CFTC publishes COT Tuesday COB; same Friday-release signal re-emits daily for ~2 weeks until next release. FIX: at COT emission site (likely alpha_engine/cot_*_strategy.py), add idempotency check: skip if INSERT...SELECT WHERE symbol AND strategy AND YEARWEEK(NOW()) already has a row. OR add UNIQUE INDEX uq_cot_weekly on trading_picks(symbol, strategy, YEARWEEK(created_at)) \u2014 though MySQL doesn't allow functional indexes on YEARWEEK pre-8.0.13; use a generated column instead. Recompute COT DSR/PF/WR on the deduped n=13 not raw n=237 to know the real edge magnitude.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 15:08:18",
        "resolved_at": "2026-05-31 03:58:59",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 6,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "ML calibration system-wide inverted",
        "description": "Confidence is anti-predictive: conf>=0.9 -> WR 14.4%, conf 0.5-0.6 -> WR 60.3%. The 5-factor Smart Picks engine weights quality/elite_score at 35% which is derived from confidence, so the top-of-funnel ranker is structurally flipped \u2014 at least for crypto.",
        "severity": "P0",
        "status": "TRIAGED",
        "affected_component": "smart_picks_engine.py / score derivation",
        "reported_by": "kimi/multiple",
        "assigned_to": null,
        "recommended_fix": "Invert the confidence contribution for crypto (or use trust_score as primary signal as code-comment already suggests). Validate across other classes \u2014 likely needs per-class inversion.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: Duplicate of OVERALL #17 \u2014 same root cause (confidence weight inversion for CRYPTO). Fix is live in smart_picks_engine.py:176-180. PR #137 synced production_scanner weights.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 8,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "smart_picks.json file 25 days stale",
        "description": "data/smart_picks.json last regenerated 2026-04-30T02:56. The dashboard reads smart_picks_feed which IS more recent (~1.5h), but the underlying picks may be cycled with stale entry prices.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "data/smart_picks.json / smart_picks_engine.py",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Re-run smart_picks_engine.py and wire to a daily cron. Confirm whether the dashboard actually reads this file or builds its own feed from trading_picks.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-04: alpha_engine/data/smart_picks.json mtime = 0.1d (hours-fresh). Was 25 days stale at incident filing. smart_picks_outcomes.json is still 9.5d old but not the file the incident named. Auto-resolved by ongoing pipeline.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:38:39",
        "resolved_at": "2026-05-31 02:10:32",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 139,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "hf_stats.concept_drift is 30 days stale (gen 2026-05-14) \u2014 the KS_D 'HALT' debate is moot; neither 0.313 nor 0.0498 is current drift",
        "description": "Verification of the KS_D fabrication-cascade (peer-Claude flagged freebuff's KS_D=0.313 phantom on branch feat/honest-kill-switch). CONFIRMED + ROOT-DEEPER: (1) live concept_drift.ks_D=0.0498 (1.08x critical, mild), NOT 0.313 \u2014 peer correct; (2) 0.313 has no JSON source (phantom); (3) the 3 reports carrying the 0.313 'HALT all real money' P0 are BRANCH-ONLY, not on main \u2014 so NOT a canonical-surface fabrication. BUT the decisive fact: hf_stats.generated_at=2026-05-14 (30d stale) inside a dashboard_data.json that is itself 2026-06-02 (11d stale). The concept_drift sub-computation hasn't refreshed in a MONTH \u2014 any halt/no-halt decision on EITHER number is reading month-old data. Real fix: regenerate hf_stats (concept_drift is computed in dashboard_generator.py but its sub-block is frozen at 05-14). Downgrade the 'HALT' P0 to 'drift status UNKNOWN \u2014 refresh hf_stats before deciding'.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_trail/dashboard_generator.py",
        "reported_by": "claude-fable-review",
        "assigned_to": null,
        "recommended_fix": "Find why the concept_drift/hf_stats sub-block stamps 2026-05-14 while the dashboard regenerates daily (cached input? a separate stale generator feeding hf_metrics?). Regenerate it; THEN read current ks_D. Do NOT halt deployment on the stale 0.0498 or the phantom 0.313. Report-text correction is freebuff's (branch-only files, mid-flight).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-13 05:34:35",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-13 05:34:35",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 135,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Blocklist pair-scope gap: C006 volume_spike kill only covers rapid_fire; alpha_engine emits same strategy live (+ regime_mild_bull unblocked bleeder)",
        "description": "Verified by direct SQL 2026-06-12 (3-way corroborated: hostile DB autopsy + grok 4h-sprint + this session). strategy_blocklist.py:314 kills the PAIR (rapid_fire, volume_spike_breakout) per C006, but at_signal_outcomes intrabar TP/SL shows alpha_engine x volume_spike_breakout n=117 WR 37.6% PF 0.917 avg -0.13%, with 19 NEW rows in 7d (latest 06-11 22:54). Worse: alpha_engine x regime_mild_bull n=37 WR 18.9% PF 0.21 avg -3.08%/trade, 27 NEW rows in 7d, NOT blocklisted anywhere. Related leak: regime_filter.py:474 allows unknown strategy types by default.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/strategy_blocklist.py",
        "reported_by": "claude-fable-watch",
        "assigned_to": null,
        "recommended_fix": "Run docs/STRATEGY_INVESTIGATION_BEFORE_KILL.md + MUTATION_THREE_AXIS_PROTOCOL on alpha_engine x {volume_spike_breakout, regime_mild_bull}; if kill confirmed, add the alpha_engine pairs (volume_spike investigation largely done via C006 \u2014 verify variant applicability); separately close regime_filter.py:474 default-allow.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-12: P0B central gate shipped \u2014 emitter_discipline.is_emission_allowed() (HARD_KILL + BLACKLISTED + BLOCKED_SOURCE_SYSTEMS, lazy/fail-open) wired into backfill_local_sources.insert_outcome (the ungated honest-ledger ingest path). Scanner already routes via apply_emitter_discipline. Remaining per-strategy kills (alpha_engine x volume_spike/regime_mild_bull) still require the investigation-before-kill protocol to ADD entries to the sets \u2014 the enforcement plumbing is no longer the blocker.",
        "duplicate_of": null,
        "created_at": "2026-06-12 07:14:27",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-12 19:23:20",
        "resolved_at": "2026-06-12 19:23:20",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 133,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Portfolio books: Sharpe/CAGR/MTD metrics mislabeled or miscomputed; pre-fix NAV history distorted by SHORT-sign bug",
        "description": "Portfolio-math audit (wf_c35c2f25, 2026-06-11): sharpe_30d is full-history (no window) annualized over irregular weekday-only snapshots; CAGR uses snapshot-count not calendar days; MTD is inception-to-date proxy. The P0 SHORT-sign NAV bug is FIXED (53982150) but PF_NAV_SNAPSHOT rows since 2026-05-29 carry the distortion for short-holding books. Remedy spec in docs/MONEY_READY_MASTER_LOOP_2026-06.md Addendum A.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/portfolios/run_daily.py",
        "reported_by": "claude-fable-masterloop",
        "assigned_to": null,
        "recommended_fix": "Window or relabel sharpe; calendar-aware CAGR; true MTD anchor; flag/recompute pre-fix snapshots; then the TWR/attribution module per the master-loop spec.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-11 23:41:26",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 23:41:26",
        "resolved_at": null,
        "link_md_path": "docs/MONEY_READY_MASTER_LOOP_2026-06.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 132,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Walk-forward verification 2 months stale (generated 2026-04-15)",
        "description": "dashboard_data.json::walkforward.generated_at = 2026-04-15 \u2014 all OOS verification per class predates the honest resolver, bleeder kills, and emission caps. Forward-tested verdicts cannot cite it. (money-maker-ready audit 2026-06-11)",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "walkforward_pipeline",
        "reported_by": "claude-fable-mmready",
        "assigned_to": null,
        "recommended_fix": "Re-run walk-forward per class on the post-PR2 honest cohort; add freshness check (>14d = stale) to the dashboard generator.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-11 21:46:03",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 21:46:03",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 130,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Backfill resurrected corrupt-exit rows; price-sanity guard added; exit-price corruption source still upstream",
        "description": "money-maker-ready audit 2026-06-11: the 06-10 NULL-pnl backfill recomputed pnl from corrupt exit_price values (wrong-symbol/stale prices: AUDUSD=X exit 663.13 on 0.70 entry = +93,965% TP_HIT; SOFI exit 381.67 on 16.03 = +2,280%; TRXUSDT exits pinned at stale 0.06697) \u2014 sign-coherence passed them because corrupt LOSSes are sign-coherent. 87 rows re-quarantined (backup tp_xsym_contam_q2_20260611T214419Z); guard added to backfill_resolved_pnl.py. REMAINING ROOT CAUSE: the resolver path that originally wrote these exit prices (regime_terminal + alpha_engine momentum_rider/ml_enhanced families) can still produce wrong-symbol exits \u2014 needs an ingest-time exit-price ratio guard mirroring the entry-price one (af1794dfc2).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_trail/universal_pick_resolver.py",
        "reported_by": "claude-fable-mmready",
        "assigned_to": null,
        "recommended_fix": "Add exit-price plausibility check at resolution-write time (ratio guard vs entry, per class) so corrupt exits are flagged NO_DATA instead of stored.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Guard shipped at the source (d7604370): duration-aware exit/entry ratio check on BOTH outcome_resolver write paths (delegation + fallback); implausible exits skip resolution + row stays OPEN for retry. Validated 15/15 incl. the AUDUSD +93,965% row. Defense-in-depth note: universal_pick_resolver price-lookup + mysql_close_trade remain as secondary sites if the class recurs.",
        "duplicate_of": null,
        "created_at": "2026-06-11 21:45:42",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 22:23:22",
        "resolved_at": "2026-06-11 22:23:22",
        "link_md_path": "reports/money_maker_ready_20260611.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 129,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "41 CI tests quarantined for code/test drift \u2014 need reconciliation",
        "description": "CI Tests gate was chronically red from 41 deterministic assertion failures (test/code drift, not flakes): category-case (CRYPTO vs crypto), FOREX_HARD_DISABLE default flip, money_ready_verdict M-070/M-105 rule changes, and the bb7fd2d740 portfolio-bloodbath commit changing TP/SL/drawdown/gross-cap semantics. Quarantined into a non-blocking visible warning step (commit 8149129a14) to restore the gate; the tests assert OLD behavior and must be reconciled to current production behavior.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tests/",
        "reported_by": "claude-fable-masterrun",
        "assigned_to": null,
        "recommended_fix": "Reconcile each quarantined test to current behavior (update assertions where the behavior change was intentional; fix code where it was a regression). bb7fd2d740 (portfolios) is the largest contributor. List embedded in .github/workflows/ci-tests.yml.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "DRIFT VELOCITY (2026-06-10 evening): 41 baseline -> +26 (EQUITY gate family ~21:00) -> +2 (phase1 dead-zone/time-of-day non-crypto gating ~22:30). ~69 quarantined total. OPERATOR CALL SUGGESTED: gate-behavior commits are landing without test updates faster than reconciliation; consider requiring test updates in the same PR for alpha_engine gate changes (or a brief gate-change freeze until the 69 reconcile).",
        "duplicate_of": null,
        "created_at": "2026-06-10 18:24:55",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-10 22:46:26",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "8149129a14"
      },
      {
        "incident_id": 124,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Money-Ready button shows forward-UNVALIDATED strategies as \"Tier-1 Renaissance\"",
        "description": "audit_dashboard/money_ready_filter.js SUPREME_EDGE_REAL hard-codes a list gated on HISTORICAL anti_overfit_audit DSR>=0.95, NOT forward validation. It surfaces ml_enhanced_INJUSDT/FETUSDT_1d_B_lightgbm (n=25-27, 100% WR, the file itself tags \"placeholder-stat suspect\" + 89% concentration), ml_enhanced_RENDERUSDT/DYDXUSDT ensemble_stack, stocks_rsi2_pullback (62.9% stale; actual 33.9% per incident #96), and cot_positioning (whose own caveat says COMMODITY class is NOT_READY). forward_paper_pilot (intrabar OOS) REFUTES historical clean-cohort edges (luxalgo 69->42%, claude_ml_moderate 39-43% PF<1); intrabar dry-run shows CRYPTO true WR 39.7% with 21.9% TP->SL reclass. So the button contradicts money_ready_verdict.json (0/9 money-ready) and edge_stability (CRYPTO DECAYING, EQUITY recent 36.8%).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/money_ready_filter.js",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Gate the Money-Ready filter on a forward_paper_pilot HOLD (n>=20, forward WR>=50, forward PF>1.5) NOT just historical DSR. Until a strategy forward-HOLDS, relabel the badge \"DSR-verified (HISTORICAL backtest only \u2014 NOT forward-validated)\" and drop the \"Renaissance-grade / safe to size\" framing. Small-n 100%-WR lightgbm sleeves should be removed pending 30d forward proof.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "money_ready_filter.js honesty relabel live (111a69ab + direct FTP): DSR_HISTORICAL_* tiers, NOT-forward-validated banner, 100%-WR placeholder sleeves (INJ/FET) + refuted stocks_rsi2 removed; template button aligned (be06dcd8).",
        "duplicate_of": null,
        "created_at": "2026-06-09 04:44:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 22:23:22",
        "resolved_at": "2026-06-11 22:23:22",
        "link_md_path": "updates/2026-06-09-forward-pilot-luxalgo.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 123,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Academic emitter mislabeled signal_type=SELL sleeves as LONG (direction-injection gap)",
        "description": "normalize_pick_for_emitter reads only the direction field (defaults LONG) and ignores signal_type. Any sleeve emitting signal_type BUY/SELL (TSMOM, CTA) had SELL picks silently relabeled LONG with backwards TP/SL when routed through academic_strategies_emitter.generate_academic_picks.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/academic_strategies_emitter.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Inject direction from signal_type in the emit loop before normalize_pick_for_emitter.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Found during tsmom_volscaled wiring; committed 42e403e79d 2026-06-09.",
        "duplicate_of": null,
        "created_at": "2026-06-09 04:19:57",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 04:19:57",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "42e403e79d"
      },
      {
        "incident_id": 122,
        "asset_class": "OVERALL",
        "source_ref": "reresolve_intrabar in-place overwrite 2026-06-09",
        "title": "Peer in-place intrabar --apply overwrote 2000 canonical trading_picks rows (restored 1921 from snapshot)",
        "description": "A pre-refactor in-place version of reresolve_intrabar.py --apply (run from the shared tree ~04:09 UTC, committed 4x500 chunks) overwrote 2000 canonical trading_picks.status/pnl_pct with intrabar verdicts + exit_reason=intrabar_reresolve markers. Originals were overwhelmingly TIME_EXIT (1867/1921). Cross-check (not exit code) caught it. Restored 1921 canonical rows from ejaguiar1_backups.trading_picks_20260605T123115Z (+06-06 snapshot); 79 newer picks unrecoverable (no snapshot) and left with intrabar verdict in canonical (0.17% of table). intrabar_* parallel columns (15027) preserved + correct.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "trading_picks + reresolve_intrabar.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Tool refactored to NON-DESTRUCTIVE parallel-column writes (commit 979b92a70b) so this cannot recur. Recovery snapshots: ejaguiar1_backups.reresolve_inplace_overwrite_recovery (current+restored) + reresolve_intrabar_backup. For the 79: acceptable (intrabar verdict is defensible) or restore from a future snapshot if needed.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 04:17:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 04:17:39",
        "resolved_at": "2026-06-09 04:17:39",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "979b92a70b"
      },
      {
        "incident_id": 118,
        "asset_class": "OVERALL",
        "source_ref": "GHA health audit w6gd2l9nj",
        "title": "GHA: MySQL Trading Picks Sync failing ~66x \u2014 alpha_engine import crash",
        "description": "Run by path -> top-level `from alpha_engine import config` (line 22) hit ModuleNotFoundError before the late sys.path.insert. CROSS-CHECKED: fixed to `python -m alpha_engine.mysql_trading_sync`; re-run 27181759347 = SUCCESS.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/mysql_trading_sync.py + .github/workflows/mysql-trading-sync.yml",
        "reported_by": "claude-opus-4-8 (GHA health audit + cross-check 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "Invoke as module (done). Verified green.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:31:11",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:31:11",
        "resolved_at": "2026-06-09 03:31:11",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "94726fbba4"
      },
      {
        "incident_id": 120,
        "asset_class": "OVERALL",
        "source_ref": "GHA health audit w6gd2l9nj",
        "title": "GHA: Unified Audit Dashboard failing ~60x \u2014 blueprint_generator None-sort crash",
        "description": "blueprint_generator.py:324 sorted on present-but-None fwd_total_pnl -> TypeError None<float (dict-get-default trap). This crash starved dashboard_data.json (stale since 06-03), cascading to ML Gatekeeper + Verified Pilots failures. Fix committed (None-safe `or 0`). STATUS: NOT yet confirmed green \u2014 newer dashboard runs cancelled by concurrency; last concluded run predates the fix.",
        "severity": "P1",
        "status": "IN_PROGRESS",
        "affected_component": "audit_dashboard/blueprint_generator.py",
        "reported_by": "claude-opus-4-8 (GHA health audit + cross-check 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "None-safe sort committed; confirm a clean post-fix dashboard run passes the blueprint step.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:31:11",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:31:11",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "94726fbba4"
      },
      {
        "incident_id": 117,
        "asset_class": "OVERALL",
        "source_ref": "GHA health audit w6gd2l9nj",
        "title": "CI Tests red on every push (28 fails): stale assertions vs intentional code changes",
        "description": "28 tests fail / 6127 pass for 3+ days -> zero merge protection. Largest cluster: test_mysql_sync_category_inference + test_stocks_7_classifier_override assert lowercase crypto but mysql_trading_sync.py:453-455 now uppercases to CRYPTO (canonical pf_registry bucket, intentional 2026-06-06). Other clusters: test_money_ready_verdict (NOT_READY vs WATCH), test_quality_gates + test_ns_c_e_exec_gate_filters (FOREX_HARD_DISABLE default flipped), test_m096_ctf_concentration_cap (4), test_pf_registry_tournament_db, test_equity_pead_strategy, test_eagle2_phase0_gates.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tests/",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "TRIAGE per cluster (not blind-fix): update CRYPTO-casing assertions to expect CRYPTO; reconcile FOREX_HARD_DISABLE/money_ready/m096/pf_registry tests against current intended gate behavior; restore green so CI provides merge protection again.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:22:41",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:22:41",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 115,
        "asset_class": "OVERALL",
        "source_ref": "OBS_FINDING_JUNE8 save-the-system",
        "title": "Copilot session audit (2026-06-09) promoted false FOREX 14d edge (64% WR / PF 2.43)",
        "description": "updates/2026-06-09-session-transcript-strategy-audit.md and low_hanging_fruit_report.md cite FOREX 14d 64.2%/PF 2.43 and GBPUSD 58.8%. Clean cohort 2026-06-09: FOREX 14d WR 5.0% (n=100). Refuted in UPDATED_MONEY_READY_RECOMMENDATION + OBS_FINDING_JUNE8.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "verdict/data-quality",
        "reported_by": "cursor-agent 2026-06-09 save-the-system audit",
        "assigned_to": null,
        "recommended_fix": "Do not re-emit from pick_summary_14d alone. Require clean-cohort + intrabar before any FOREX promotion. Annotate/supersede stale session doc.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:08:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:08:04",
        "resolved_at": null,
        "link_md_path": "reports/OBS_FINDING_JUNE8.MD",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 116,
        "asset_class": "OVERALL",
        "source_ref": "OBS_FINDING_JUNE8 save-the-system",
        "title": "Obsidian vault documents unvalidated T1/T2 edges (mega_mutation, fx_smart_carry, READY-TO-TRADE-NOW)",
        "description": "29 vault notes scanned. READY-TO-TRADE-NOW partially superseded but asset-class notes still cite mega_mutation T1, fx_smart_carry PF 1.85. Clean DB: 0 money-ready survivors. See reports/OBS_FINDING_JUNE8.MD.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "verdict/data-quality",
        "reported_by": "cursor-agent 2026-06-09 save-the-system audit",
        "assigned_to": null,
        "recommended_fix": "Add clean-cohort stamp to every strategy note; link OBS_FINDING_JUNE8; never cite vault WR/PF without clean re-verify.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:08:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:08:04",
        "resolved_at": null,
        "link_md_path": "reports/OBS_FINDING_JUNE8.MD",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 114,
        "asset_class": "OVERALL",
        "source_ref": "money-ready screen 2026-06-06",
        "title": "Clean-cohort money-ready screen: 0 confirmed edges (only luxalgo_confluence borderline, fails intrabar+sample scrutiny)",
        "description": "Applying ALL artifact filters (exclude backfill + NULL-resolved + banned + per-class sane-pnl guard, EXPIRED as non-win) and a mutual-fund bar (n>=50, >=3mo, PF>1.5, WR>52%), only luxalgo_confluence::crypto survives (n=73 WR63% PF5.35) \u2014 but that is 73 of 2040 rows (3.6% clean subset) vs its full-history WR 45.5%/PF 1.20, and is NOT intrabar-validated. No confirmed money-ready edge in any class. Filters removed ~78% of resolved rows as contamination, so the clean cohort is too small to confirm most strategies.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "verdict/data-quality",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Deepen OHLCV history -> reresolve_intrabar --apply -> re-screen on large clean+intrabar cohort -> paper-pilot survivors only -> real money after 4wk forward hold.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 21:13:22",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 21:13:22",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-06-money-ready-screen-clean-cohort.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 113,
        "asset_class": "FUTURES",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "FUTURES is a zombie/tagging artifact (PF 10.3 = one ES=F win; 6 real resolved trades)",
        "description": "Same ES/NQ/GC/CL symbols scattered across COMMODITY/INDEX/BOND/FUTURES labels; 93.6% expired; only 6 genuinely resolved trades. shadow_pilot falsely marks the class paper-tradeable. Risk: a zombie class graduates on artifact PF.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "resolver/measurement layer",
        "reported_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Fold ES/NQ/YM/RTY->EQUITY-INDEX, CL/GC/SI/HG->COMMODITY, ZN->BOND, or retire the standalone FUTURES verdict; normalize category case-mess (stock/stocks/equity).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 13:33:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 13:33:04",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 108,
        "asset_class": "OVERALL",
        "source_ref": "session 2026-06-06 baby-strategy CI fix",
        "title": "Baby-strategy mass-backtest CI broken: crypto_data.db never provisioned on runner",
        "description": "batch_backtest_all.py hard-requires gitignored crypto_data.db (SQLite klines); the Part-2 babies workflow had no step to create it, so every run died in ~22s (run 27055166676) and NONE of 220 baby strategies could backtest in CI.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "incubator/backtest_team + .github/workflows",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "(see resolution_notes)",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Added tools/build_crypto_data_db_from_mysql.py (materializes klines from MySQL crypto_ohlcv/stock_ohlcv/fx_prices) + a build step (env MYSQL_PASSWORD/AUDIT_DB_*) to both backtest workflows. Validated end-to-end locally: 720 BTC/USDT bars, sweep ran + recorded + dashboard regenerated.",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:24",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:24",
        "resolved_at": "2026-06-06 07:34:24",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "f5f96b0ee9"
      },
      {
        "incident_id": 99,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "FDR analysis stale since Apr 6 2026 \u2014 blocking all strategy graduation",
        "description": "FDR (False Discovery Rate) file at tools/data/fdr_results.json last run 2026-04-06. Only 3 of 56 strategies pass DSR+FDR (st_fear_greed_contrarian, unknown, st_rsi_vol_bounce). Strategies have accumulated 2 months of trades and likely now qualify. Re-running FDR is the single highest-leverage action to unblock the empty `proven` tier.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/data/fdr_results.json, tools/promote_strategy.py",
        "reported_by": "claude-sonnet-4-6 2026-06-06",
        "assigned_to": null,
        "recommended_fix": "Re-run FDR analysis script to refresh p-values with 2 months of accumulated closed trades. Then run python3 tools/promote_strategy.py --audit to catch newly eligible strategies.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 05:58:31",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 05:58:31",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 97,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Conflict signal: risk_parity BOND SHY has 6 models OPEN LONG and 4 models OPEN SHORT simultaneously",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tournament_picks aggregation at audit_dashboard/data/ai_tournament_*.json",
        "reported_by": "claude /loop 2026-06-05",
        "assigned_to": null,
        "recommended_fix": "risk_parity persona has 6 LONG models @ $81.05 and 4 SHORT models @ $81.88 currently open on SHY (1-3yr Treasury ETF) at near-identical entry prices. This is a directional split within the same persona \u2014 possibly correct (different sub-strategies) or possibly an emitter bug. Historical record on SHY shows LONG 66.7% WR (n=21) vs SHORT 80% WR (n=5). Recommend: verify whether the OPEN-LONG vs OPEN-SHORT models are using genuinely different sub-prompts, OR cap signed-net exposure to abs(longs-shorts) so the conflicting models cancel before sizing. Reference: tools/mlflow_high_quality_picks.py output 2026-06-05 00:51 UTC.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "STATUS UPDATE 2026-06-05 02:44 UTC: OPEN counts drifted to 8 LONG vs 5 SHORT (was 6L+4S at filing 24h ago). Closed history reveals SHORT is actually the empirically-better direction: SHY SHORT n=5 closed 4W/1L = 80% WR, vs SHY LONG n=21 closed 14W/7L = 66.7% WR. Despite the empirical edge being SHORT, models are tilting LONG (8 OPEN vs 5 OPEN). Either (a) regime shifted post-historical-window, (b) some models use stale rate-cut consensus, or (c) the persona prompt is biased LONG. Recommend: when these 13 OPEN positions resolve, attribute outcome by direction and reassess. No autonomous action this turn.",
        "duplicate_of": null,
        "created_at": "2026-06-05 00:52:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-05 02:44:26",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 96,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "stocks_rsi2_pullback edge claim stale \u2014 actual WR 33.9% (was reported 62.9%)",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "CLAUDE.md edge-sleeve note + at_signal_outcomes dup-row inflation",
        "reported_by": "claude /loop 2026-06-04",
        "assigned_to": null,
        "recommended_fix": "Re-verified 2026-06-04: 790 raw rows / 140 unique = 5.6x dup inflation. Real n=140 30d WR=33.9% avg=-0.007% (slightly losing). The 62.9% WR / 0.78% avg figure in CLAUDE.md is from raw rows pre-dedup. Update CLAUDE.md '/audit' notes + remove from 'real edge sleeves' list. Per-symbol: WMT n=220 avg -0.439%, KO -0.801%, COST -0.591%, CVX -0.588%, only C/AVGO marginally positive. Likely an artifact of the INCIDENT #91 NULL opened_at dup pattern. Reference: reports/deep_audit_high_wr_2026-06-04.md",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-04 16:39:10",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 16:39:10",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 95,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Resolver stamps price-fetch failures as flat closes (FORCE_CLOSED_TOXIC/RESOLVE_FAILED) polluting WR",
        "description": "176 non-crypto 'closed' rows have entry==exit/pnl=0 with exit_reason FORCE_CLOSED_TOXIC (113) or RESOLVE_FAILED_MAX_RETRIES (60), mostly multi_asset_copytrader+forex_copy_trader. FOREX: 94/138 toxic. These are price-fetch failures, NOT resolved trades; they crushed WR denominators (raw FOREX ~4% vs true ~39%). Dashboard now filters them (PR #521) but the resolver should not mark fetch-failures as closed.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/outcome_resolver.py (+ multi_asset_copytrader, forex_copy_trader)",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Resolver: on price-fetch failure, leave pick OPEN/UNRESOLVED (retry later) instead of stamping a flat FORCE_CLOSED_TOXIC close. Backfill: re-open or exclude existing toxic rows. Display fix shipped PR #521.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "WR pollution was DASHBOARD-ONLY: money_ready_verdict._resolved() requires WON/LOST status (these are CLOSED) so canonical verdict always excluded them; outcome_resolver.is_unresolved() already catches exit==entry rows. Dashboard fixed PR #521 (filter by exit_reason). Source now stamps explicit _wr_excluded flag PR (this). Downgraded from P1 - not a canonical-WR corruption. Optional future: aggregators adopt _wr_excluded predicate instead of exit_reason string-match.",
        "duplicate_of": null,
        "created_at": "2026-06-04 16:33:46",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 22:16:32",
        "resolved_at": "2026-06-04 22:16:32",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 93,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Sub-25% drift artifact: grok3 ETF 10/10 WR (residual mild-stale quotes IWM 20 vs 35, SPY 70 vs 95)",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/ai_tournament/price_tracker.py drift threshold; large-cap ETFs need 5-10% threshold not 25%",
        "reported_by": "claude /loop 2026-06-04",
        "assigned_to": null,
        "recommended_fix": "Lower RESOLVER_MAX_ENTRY_DRIFT_PCT for large-cap ETF/EQUITY universes from 25% to 5-7%. Microcaps/crypto can keep 25% because they have legit intraday volatility. Test query against grok3 ETF subset to validate threshold; then re-run audit. Affected picks (sample): id=18491, 28212, 28118, 28778, 29878, 30431, 29338, 19319, 18566, 18670.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-04 10:22:51",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 10:22:51",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 92,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Extreme PnL outliers in at_signal_outcomes from stocktwits historical-price ingestion",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "at_signal_outcomes ingest from stocktwits scraper",
        "reported_by": "claude /loop 2026-06-04",
        "assigned_to": null,
        "recommended_fix": "2 rows with absurd entry prices (BTC entry $20, BTC entry $1200) auto-resolved at current $74K = pnl 370850%, 6082%. Source: stocktwits scrapes from MisterGreen and HomelessDegenerate users with stale historical posts. Recommend filtering at scrape-time: if entry_price < 0.1 * current_market_price OR > 10x, flag as STALE_INGEST and skip. Or, cleanup: mark these 2 rows outcome='STALE_INGEST' so they drop from WR/PF math. IDs: 163761, 166225",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-04 09:24:03",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-04 09:24:03",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 90,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "AI-tournament headline edge (deepseek_v4 PF3.46) fails leakage-free attribution",
        "description": "Cross-sectional attribution probe (tools/attribution_probe.py): deepseek_v4 alpha t=1.74<2.0, crowd_beta 0.49; all large-n models crowd_beta 0.7-1.0; only tiny-n flukes pass. No model has adequate-n + surviving alpha. Edge is crowd/beta not skill.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/data/ai_tournament_picks_latest.json",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Stop citing deepseek_v4 PF3.46 as proven edge; require alpha t>=2.0+IR>=0.10 at n>=100 on out-of-cutoff data before sizing (gate #111). Also: resolved_at batch-stamped -> no time series; fix resolver to stamp real close times.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-03 14:28:36",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-03 14:28:36",
        "resolved_at": null,
        "link_md_path": "reports/attribution_probe_findings_2026-06-03.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 88,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE4_2026-06-03_CLAUDE_OPUS_4_7.MD",
        "title": "Category taxonomy case-mess: 23 'stock' + 590 'stocks' should be EQUITY; 4 'penny' + 4 'pennystock' should be EQUITY; ~394 UNKNOWN/NULL rows auto-taggable by symbol pattern",
        "description": "Category taxonomy case-mess: 23 'stock' + 590 'stocks' should be EQUITY; 4 'penny' + 4 'pennystock' should be EQUITY; ~394 UNKNOWN/NULL rows auto-taggable by symbol pattern",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "trading_picks.category field",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Backfill SQL: UPDATE trading_picks SET category='equity' WHERE LOWER(category) IN ('stock','stocks','penny','pennystock'). Then symbol-pattern auto-tag for NULL/UNKNOWN: BTCUSDT/ETHUSDT/etc -> CRYPTO, USD-JPY/USD-CHF -> FOREX, SPY/QQQ/XLK -> ETF, AMZN/GOOGL -> EQUITY.",
        "target_release": null,
        "evidence": "{\"penny\": 4, \"stock\": 23, \"source\": \"Live MySQL query 2026-06-03; parallel-agent session findings\", \"stocks\": 590, \"pennystock\": 4, \"null_or_empty\": 394}",
        "resolution_notes": "Normalization live at the ingest chokepoint (6dee0a3c; canonical UPPERCASE derived from dominant consumers; unknown aliases warn+passthrough) + one-shot backfill applied: 146 alias rows -> canonical (backup trading_picks_category_alias_backup_20260611_222218). Regrowth stops at insert-time.",
        "duplicate_of": null,
        "created_at": "2026-06-03 01:50:48",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 22:23:22",
        "resolved_at": "2026-06-11 22:23:22",
        "link_md_path": "EAGLE4_2026-06-03_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 82,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO directional bug: LONG 33% WR vs SHORT 67% WR in AI tournament",
        "description": "AI tournament data (5,492 picks, 3,692 resolved, top 5 T1 models) shows CRYPTO LONG has 33% WR / -0.49% avg PnL while SHORT has 67% WR / +3.74% avg PnL. Production scanner emits LONG when SHORT has edge.",
        "severity": "P1",
        "status": "IN_PROGRESS",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "mimo-v2.5-pro",
        "assigned_to": null,
        "recommended_fix": "Flip CRYPTO emission to SHORT-only. _EAGLE4_CRYPTO_FLIP_TO_SHORT flag already set True in production_scanner.py:365.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "PARTIAL FIX VERIFIED 2026-06-04: alpha_engine/production_scanner.py:422 implements _EAGLE4_CRYPTO_FLIP_TO_SHORT flag \u2014 converts CRYPTO LONG signals to SHORT before directional-kill check. Post-cleanup tournament_picks CRYPTO direction split: LONG 42.9% WR (n=259) vs SHORT 53.8% WR (n=158). 10.9pp gap (was 34pp). Flip is working for picks passing through production_scanner. REMAINING: trading_picks (live production) still shows 1078 long-side vs 596 short-side last 7d \u2014 other emitter paths bypass the flip. Need scan: grep -rln 'category.*=.*crypto.*direction.*LONG' alpha_engine/ to find non-scanner emit paths. Downgrade P0->P1 since gap closed by 23pp.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-04 15:08:54",
        "resolved_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null
      },
      {
        "incident_id": 83,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Quality gates filter 98.9% of picks: 2253 raw -> 25 active",
        "description": "98.9% of generated picks are filtered by quality gates. 203 strategies permanently killed. ml_crypto_predictor generates 492 picks with 0 surviving. This starves the system of trades.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_trail/quality_gates.py",
        "reported_by": "mimo-v2.5-pro",
        "assigned_to": null,
        "recommended_fix": "Recalibrate kill thresholds to require n>=100 + statistical test before any kill. Wire incubator pipeline for new strategies.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-02 14:36:14",
        "resolved_at": null,
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null
      },
      {
        "incident_id": 84,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "72% of systems (92/127) have zero resolved picks",
        "description": "92 out of 127 systems have never produced a single resolved trade. They either get filtered by gates, were killed before accumulating data, or have data feed issues.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "mimo-v2.5-pro",
        "assigned_to": null,
        "recommended_fix": "Wire outcome resolver to all systems. Create incubator pipeline with 30-trade protected runway.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-02 14:36:14",
        "resolved_at": null,
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null
      },
      {
        "incident_id": 85,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "EXPIRED picks mislabeled: 53.3% have positive PnL",
        "description": "53.3% of EXPIRED picks have positive PnL, suggesting resolver labeling issues. This inflates WR and makes strategies look better than they are.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/outcome_resolver.py",
        "reported_by": "mimo-v2.5-pro",
        "assigned_to": null,
        "recommended_fix": "Fix exit_reason logic in outcome_resolver.py. Separate EXPIRED stats from TP/SL stats.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Duplicate of #64 \u2014 same EXPIRED-mislabel mechanism, verified fixed (wf_3c3cdc16). See #64 resolution.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-10 18:39:49",
        "resolved_at": "2026-06-10 18:39:49",
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null
      },
      {
        "incident_id": 79,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Stale OPEN picks resolved: ~100k+ -> 3,806 (97% reduction) via controlled batch resolve",
        "description": "Stale OPEN picks resolved: ~100k+ -> 3,806 (97% reduction) via controlled batch resolve",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "tools/resolve_stale_open_picks.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "RESOLVED. Cursor session ran --execute --max-batches 5 --batch-size 500 across asset classes. Top cleared sources: non_crypto_consensus, ig_contrarian_sentiment, prediction_market_consensus, forex/commodity CTAs. Re-run with --max-batches 10 if stale_by_category still YELLOW.",
        "target_release": null,
        "evidence": "{\"source\": \"cursor session 2026-06-02\", \"open_after\": 3806, \"open_before\": 100000, \"command_used\": \"python3 tools/resolve_stale_open_picks.py --execute --max-batches 5 --batch-size 500\", \"reduction_pct\": 0.96}",
        "resolution_notes": "Workflow-verified FIXED (wf_3c3cdc16): stale-OPEN backlog reduction (~100k+ -> 3,806) completed via controlled batch resolution; this incident described work that finished \u2014 closing.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:25:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-10 18:39:49",
        "resolved_at": "2026-06-10 18:39:49",
        "link_md_path": "updates/2026-06-02-stale-open-picks-batch-resolve.md",
        "link_url": null,
        "link_github_ref": "PR #457 (resolver health fix)"
      },
      {
        "incident_id": 75,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "All strategies fail PBO threshold (PBO > 0.20) across ALL asset classes",
        "description": "After fixing harness: CRYPTO 46 strats (1 T3), FOREX 11 (0 T3), COMMODITY 4 (0 T3), EQUITY 1 (0 T3), ETF 0. PBO is binding constraint.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/rigorous_backtest_harness.py",
        "reported_by": "kilo-mimo-free",
        "assigned_to": null,
        "recommended_fix": "Investigate PBO parameter permutations aggressiveness. Consider relaxing T3 PBO from 0.20 to 0.30 for n>50.",
        "target_release": null,
        "evidence": "{\"forex\": {\"T3\": 0, \"total\": 11}, \"crypto\": {\"T3\": 1, \"total\": 46}, \"commodity\": {\"T3\": 0, \"total\": 4}}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:19:37",
        "date_est": "2026-06-02",
        "time_est": "12:50",
        "updated_at": "2026-06-02 14:19:37",
        "resolved_at": null,
        "link_md_path": "backtest_results/verification_CRYPTO_20260602_125019.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 76,
        "asset_class": "CRYPTO",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "CRYPTO SHORT 67% WR vs LONG 33% WR - direction bug in production scanner",
        "description": "Tournament data: SHORT 67% WR / +3.74% avg PnL vs LONG 33% WR / -0.49% avg. Production scanner emitting both directions.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "minimax-m3-free",
        "assigned_to": null,
        "recommended_fix": "Implemented EAGLE-4 admissibility gate: CRYPTO SHORT-only flip.",
        "target_release": null,
        "evidence": "{\"long_wr\": 0.33, \"short_wr\": 0.67}",
        "resolution_notes": "CRYPTO SHORT flip in production_scanner (EAGLE-4); shadow until forward proof.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:19:37",
        "date_est": "2026-06-02",
        "time_est": "08:00",
        "updated_at": "2026-06-02 18:15:40",
        "resolved_at": "2026-06-02 18:15:40",
        "link_md_path": "reports/EAGLE_SWARM_CONSOLIDATED_2026-06-02.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 77,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "FREEZE FOREX/COMMODITY/FUTURES - contamination too high",
        "description": "Sign-flips, COT look-ahead, extreme source concentration (HHI > 0.25). Classes frozen from production promotion.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/config.py",
        "reported_by": "kilo-mimo-free",
        "assigned_to": null,
        "recommended_fix": "Add FREEZE flags. Block promotion until data quality resolved.",
        "target_release": null,
        "evidence": "{\"forex_hhi\": 0.35, \"commodity_hhi\": 0.42, \"sign_flip_count\": 12}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:19:37",
        "date_est": "2026-06-02",
        "time_est": "08:00",
        "updated_at": "2026-06-02 14:19:37",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE_SWARM_CONSOLIDATED_2026-06-02.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 63,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Source-system concentration: kimi_riseoftheclaw = 43.6% of all picks (HHI 0.232 > 0.20 cap)",
        "description": "Source-system concentration: kimi_riseoftheclaw = 43.6% of all picks (HHI 0.232 > 0.20 cap)",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_trail/promotion_gate.py CONCENTRATION_HHI_CAP=0.20",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Tighten concentration cap is now on main (PR #439). Force-route picks per asset class to break HHI floor.",
        "target_release": null,
        "evidence": "{\"cap\": 0.2, \"hhi\": 0.232, \"share\": 0.436, \"source\": \"zoo EAGLE2 summary\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #439"
      },
      {
        "incident_id": 64,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "EXPIRED mislabel: 53.3% of EXPIRED picks have positive PnL (resolver mislabeling WINs as EXPIRED)",
        "description": "EXPIRED mislabel: 53.3% of EXPIRED picks have positive PnL (resolver mislabeling WINs as EXPIRED)",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_trail/universal_pick_resolver.py + audit_trail/outcome_resolver.py bar-replay",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Bar-replay path returns EXPIRED instead of WON/LOST for FOREX. PR #450 skipped failing tests; proper fix needs MAX_HOLD_HOURS_BY_CLASS reconciliation.",
        "target_release": null,
        "evidence": "{\"source\": \"zoo EAGLE2 summary\", \"expired_with_positive_pnl_pct\": 0.533}",
        "resolution_notes": "Workflow-verified FIXED (wf_3c3cdc16): EXPIRED-mislabel mechanism closed \u2014 TIME_EXIT constraint handling + iso_* auto-correct in backfill_null_pnl_safe.py + the entry-anchored resolver (default-on) ended the mislabel class; remaining historical EXPIRED rows are quarantined/excluded from honest cohorts.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-10 18:39:49",
        "resolved_at": "2026-06-10 18:39:49",
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #450 (orphan test skip)"
      },
      {
        "incident_id": 65,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "ML confidence is anti-predictive: conf>=0.90 yields 14.4% WR vs conf 0.50-0.60 yields 60.3% WR",
        "description": "ML confidence is anti-predictive: conf>=0.90 yields 14.4% WR vs conf 0.50-0.60 yields 60.3% WR",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/smart_picks_engine.py max_conf gate",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "PR #440 (merged): lowered max_conf 0.95 -> 0.85 across all 6 asset classes. Removes worst-performing slice. Re-evaluate after 14d forward.",
        "target_release": null,
        "evidence": "{\"source\": \"reports/EAGLE_JUNE2_CLAUDE_CODE.MD\", \"new_max\": 0.85, \"old_max\": 0.95, \"conf_50_60_wr\": 0.603, \"conf_90plus_wr\": 0.144}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #440 (MERGED)"
      },
      {
        "incident_id": 66,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Stop-loss tightness: 626 SL hits at 0.5% WR producing -2257% cumulative PnL",
        "description": "Stop-loss tightness: 626 SL hits at 0.5% WR producing -2257% cumulative PnL",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "config/portfolio_risk_profiles.json",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "PR #451 (merged): widened conservative atr_mult 1.0->1.3, balanced 1.5->2.0. Aggressive unchanged.",
        "target_release": null,
        "evidence": "{\"sl_wr\": 0.005, \"source\": \"EAGLE_JUNE2_MIMO_V2_5_PRO.MD finding #1\", \"sl_hits\": 626, \"cumulative_pnl_pct\": -22.57}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #451 (MERGED)"
      },
      {
        "incident_id": 60,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2 stale OPEN pick backlog \u2014 batch resolve in progress",
        "description": "Resolver hygiene: OPEN count was ~100k+ before 2026-06-02 controlled batch resolve (resolve_stale_open_picks.py --execute --max-batches 5 --batch-size 500 \u2192 ~3,806 OPEN remain). Top stale sources included non_crypto_consensus, ig_contrarian, PM copy-trader rows. Continue sliced batches until OPEN aligns with MAX_HOLD_HOURS_BY_CLASS.",
        "severity": "P1",
        "status": "IN_PROGRESS",
        "affected_component": "tools/resolve_stale_open_picks.py / audit_trail/universal_pick_resolver.py",
        "reported_by": "cursor-composer-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Run resolve_stale_open_picks.py in bounded batches; monitor check_resolver_health.py open_pick_count; do not size production until backlog stable.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:30",
        "resolved_at": null,
        "link_md_path": "updates/2026-06-02-stale-open-picks-batch-resolve.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null
      },
      {
        "incident_id": 62,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Production money_ready_verdict 0/9 \u2014 NO-GO capital sizing",
        "description": "Swarm review (reports/best_picks_swarm_review_2026-06-02.json): production aggregate NOT_READY. Do not size Smart Picks / HC from historical PF until money_ready non-empty and 14d/48h panels verified.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/data/money_ready_verdict.json / production_scanner.py",
        "reported_by": "cursor-composer-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Paper watch + shadow pilots only; daily run_eagle_suite.py + run_verified_pilots_daily.py; no production capital promotion until per-class gates pass.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:30",
        "resolved_at": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 51,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: 0/9 asset classes money_ready \u2014 production capital lock",
        "description": "money_ready_verdict.json 2026-06-02: all classes NOT_READY or INSUFFICIENT_DATA. Policy-clean CRYPTO PF 0.92 / WR 36%; EQUITY PF 0.33 / n=52. Tournament paper edge does not flow into asset_class_health. No sizing up until forward n\u226530\u201350 + DSR/SPA per class.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/data/money_ready_verdict.json",
        "reported_by": "grok-cli-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Daily run_eagle_suite.py; zero production sizing; promote only via strategy_admit.py FORWARD_PILOT_ONLY \u2192 shadow \u2192 scale after 8w live PF within \u00b110% of backtest.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:04",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE_SWARM_SYNTHESIS_2026-06-02.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 52,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Resolver health YELLOW \u2014 forward_test columns missing on 50webs",
        "description": "tools/check_resolver_health.py reports forward_test table/columns absent on live ejaguiar1_stocks. Blocks verified pilot forward stats writer and pilot_forward_dashboard freshness. See alpha_engine/mysql_trading_sync.py for ALTER SQL.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "ejaguiar1_stocks.forward_test + tools/check_resolver_health.py",
        "reported_by": "grok-cli-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Run forward_test ALTER on mysql.50webs.com; redeploy writers; re-run run_verified_pilots_daily.py; confirm resolver health GREEN.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "forward_test_tag_awareness GREEN 2026-06-02; check_resolver_health total_outcomes=38787; PR #457 merged.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 18:15:47",
        "resolved_at": "2026-06-02 18:15:47",
        "link_md_path": "updates/2026-06-02-eagle4-gate-verification.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 53,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Pick funnel 78.9% CRYPTO Smart-Picks cell disputed on live page",
        "description": "Raw DB CRYPTO 90d ~39% WR / PF 0.37 vs marketed funnel cell. Leakage: duplicate signal_ts groups, EXPIRED\u2192WON mislabels, claude_gainer_st concentration. Apply mutate-before-kill; verify 14d/48h panels before any promotion.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/pick_funnel.html + audit_dashboard/data/pick_summary_stats_*.json",
        "reported_by": "grok-cli-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Label all green funnel cells 'Discovery \u2014 not capital ready'; fix resolver/dedup; cross-check money_ready_verdict before sizing.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:04",
        "resolved_at": null,
        "link_md_path": "reports/2026-05-26_equity_drift_autopsy_TICK5.md",
        "link_url": "https://findtorontoevents.ca/audit/pick_funnel.html",
        "link_github_ref": null
      },
      {
        "incident_id": 50,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "No multiple-testing correction before DSR/SPA promotion",
        "description": "~73 class x strategy cells tested with no Bonferroni/FDR. 2 surviving PF>1 at alpha=0.05 is chance-level. At alpha=0.05 over 73 cells need p<0.00068 \u2014 neither crypto sleeve clears at n~30.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/money_ready_verdict.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Apply Bonferroni/BH-FDR across strategy cross-section before DSR/SPA gates.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:16:52",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:16:52",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 43,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "AI tournament resolver silently failing \u2014 1289 short-TF picks overdue >5d, blocks n>=100",
        "description": "Resolver workflows return success in <50s but resolve ~nothing. tournament_picks: 1,289 OPEN short-TF (<=1W) picks aged >5d (median time-to-resolve is only 0.99d, so overdue). Throughput collapsed: 1,725 resolved 2026-05-24, then 1, then 0. The backlog alone would push deepseek_v4(43)/cursor_agent(59)/llama4_scout(57) each past n>=100 immediately. Likely a query-filter/batch-limit/price-lookup failure swallowed as success. [DIAGNOSED+FIX 2026-05-31: ROOT CAUSE=resolution is JSON-glob-bound (price_tracker resolves only picks in submissions/*.json; ingest_to_db UPSERTs back); OPEN picks aged out of glob can never resolve in DB; no DB-native resolver. Verified: 2693 OPEN, 1479 aged>5d, resolutions 1725(05-24)->1(05-25)->0. FIX=PR#135 resolve_db_picks.py (DB-native, reuses resolve_pick/fetch_price, dry-run default; 7/15 overdue already hit TP/SL). Staged --apply + wire into price-tracker workflow recommended.] [ROLLOUT 2026-05-31: resolve_db_picks.py --apply run on CRYPTO/EQUITY/ETF/BOND/PENNY -> 1,571 picks resolved, OPEN 2693->1122. Tournament now has 7 models at n>=100 (was 0): grok3 n=182 WR60%, deepseek_v4 n=165 WR55%, deepseek_r1 n=106 WR62%, gemini_2_5_pro n=100, grok4_3/mistral_large/deepseek_v3 ~109-119. Remaining: COMMODITY+FUTURES ~496 (=F symbol follow-up), ~106 CRYPTO legitimately still-open. CAVEAT: resolutions use CURRENT-price snapshot (same as price_tracker daily design); for picks stale by days, TP/SL touched-then-reverted intraday can be missed -> a path-aware (intrabar high/low over hold window) resolver would be more accurate for stale backlogs. PERMANENT FIX still needed: wire resolve_db_picks --apply into ai-tournament-price-tracker.yml so DB never re-strands (PR#135).] [BACKLOG DRAINED 2026-05-31: all classes resolved (COMMODITY/FUTURES via =F fix, FOREX too). OPEN 2693->601 (601 = legitimately within resolution window). 2,092 resolved today. 13 models now at n>=100 (was 0). PR#135 updated with the =F fix in both resolve_db_picks.py and price_tracker.py (line 123 stopped stripping =F). REMAINING (keep IN_PROGRESS): merge PR#135 + wire 'resolve_db_picks.py --apply' into ai-tournament-price-tracker.yml so the DB self-heals and never re-strands. Leaderboard JSON refreshes on next ai-tournament-pipeline run (rebuild_latest_from_db).] [RESOLVED 2026-05-31: all 3 legs done. (1) DB-native resolver merged to main (PR#135 d68847edd). (2) Backlog drained: 2,092 resolved, OPEN 2693->601, 13 models now n>=100. (3) Self-heal wiring ON MAIN (peer added resolve_db_picks.py --apply step to ai-tournament-price-tracker.yml). My follow-up PR#145 closed as superseded. Optional residual nit: _iso_aware tz-offset hardening (low-risk, never triggers on this DB's Z-suffixed timestamps). Accuracy follow-up tracked separately: path-aware (intrabar high/low) resolution for stale picks vs current-price snapshot.]",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/mysql-stale-picks-resolver.yml + ai-tournament-price-tracker.yml",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Diagnose why resolver passes without processing; restore >100/day resolution; drive short-TF overdue backlog <50.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "PRs #135 (DB-native resolver) + #144 (CI wiring) + #146 (pymysql + tz-aware datetime) all merged 2026-05-31. resolve_db_picks.py --apply now runs daily in ai-tournament-price-tracker.yml at 23:00 UTC. 2,092 picks resolved in initial drain, 13 models now n>=100.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:24:28",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 03:31:13",
        "resolved_at": "2026-05-31 03:31:13",
        "link_md_path": "PR#135",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": null
      },
      {
        "incident_id": 44,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "ai_tournament dashboard JSON is a stale 1/4 subset (1037 published vs 4419 in DB)",
        "description": "Published JSON gen 2026-05-30T23:26Z has 1,037 rows / 42 models; live DB tournament_picks has 4,419 rows / 50 models / 1,726 resolved. model_id sets differ (published shows deepseek_r1 PF16 small-sample artifact not in DB). Live /audit/ai-tournament.html + /audit/ai_leaderboard.html show a smaller/staler universe than canonical DB.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/data/ai_tournament_picks_latest.json + tools/ai_tournament/update_leaderboard.py",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Regenerate published JSON from full DB or read DB directly; reconcile model_id set.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #160 fixes Python 3.11 SyntaxError in merge_submissions fallback that caused the 1037-published / 4419-DB subset gap. Tournament dashboard now publishes full set.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:24:28",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #160"
      },
      {
        "incident_id": 42,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "PR #6 FOREX consolidation has dead-code gate + no-op USDJPY cap \u2014 REQUEST-CHANGES from peer review",
        "description": "Peer review (VERDICT=REQUEST-CHANGES) of Zoo's uncommitted FOREX consolidation work (M files: alpha_engine/config.py + alpha_engine/non_crypto_policy.py). No GitHub PR opened yet (verified via gh pr list --search 'FOREX consolidation' returned only unrelated PRs #11, #12). THREE BLOCKING FINDINGS: (a) Wire-Up Rule violation \u2014 the new consolidation gate evaluate_non_crypto_candidate has 0 production callers (grep returned no hits in calculate_smart_score / passes_active_gate / passes_smart_gate / score_pick / smart_picks_engine / production_scanner / dashboard_generator). Per CLAUDE.md Wire-Up Rule this is DEAD CODE and must either be wired or labeled opt-in with a Wiring Plan section. (b) USDJPY concentration cap is a no-op 'pass' placeholder \u2014 violates the project's no-placeholders convention; the cap claim in the PR description is unsupported by executable logic. (c) Survivor strategy cta_cross_asset_tsmom SHORT has 0 FOREX trades in pf_registry \u2014 there is no statistical evidence to justify choosing it as the surviving FOREX strategy after consolidation; selection appears arbitrary.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/non_crypto_policy.py, alpha_engine/config.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Before opening PR #6: (1) wire evaluate_non_crypto_candidate into one of the production scorers OR add '## Wiring Plan' section to PR body naming target caller + ETA per CLAUDE.md; (2) replace the 'pass' USDJPY cap with executable concentration enforcement (e.g., reject candidate if pf_registry rolling USDJPY share > N% in last 30d); (3) provide pf_registry evidence (n>=30 closed trades, PF>1.0) for cta_cross_asset_tsmom SHORT on FOREX before naming it survivor \u2014 or pick a survivor that actually has data.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: Same fix as FOREX #6/#7 \u2014 non_crypto_policy.py:545 has live `_FOREX_ALLOWED = frozenset({'dxy_trend_filter','forex_carry'})` and USDJPY cap is implemented (lines 557-583, not a no-op). FOREX consolidation wired into the production gate.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:14:24",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:35",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 34,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "CI Tests: 17 pytest failures on main (m096, m098, quality_gates, pr10_ab, outcome_resolver)",
        "description": "ci-tests.yml fails on main: test_m096_ctf_concentration_cap (4), test_m098_etf_vix_gate (4), test_quality_gates (4), test_pr10_ab_gate (2), test_outcome_resolver_noncrypto (2), test_confluence (2) \u2014 subset already fixed by #115.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/tests/, audit_trail/quality_gates.py",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Production-logic review needed: (1) ab_router.AB_ENABLED default flip (operator: decide after 24h soak), (2) CRYPTO quality gate crypto_not_liquid_core rejecting CRYPTO picks (needs scoring review), (3) FOREX outcome resolver noncrypto (needs test data update). Not safe to blind-fix \u2014 these change production scoring.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Fixed by PR #421 (broken unique_algorithmic_strategies import), PR #424 (stale quality-gate tests), PR #426 (safe_db_archive + pm_consensus test). CI Tests green since 15:32 UTC 2026-06-01.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-01 16:04:20",
        "resolved_at": "2026-06-01 16:04:20",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 32,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "AI Tournament leaderboard shows T1 PF>2 winners while money_ready_verdict shows all classes NOT_READY",
        "description": "Stark divergence: ai_tournament_leaderboard.json top model (deepseek_r1) shows PF=16.36, WR=83.3% on n=30 T1. money_ready_verdict.json same timestamp shows all 9 asset classes NOT_READY or INSUFFICIENT_DATA, EQUITY WR 27.5% PF 0.14, CRYPTO WR 37.4% PF 0.89. The tournament picks are not flowing through trading_picks -> at_signal_outcomes -> pf_registry -> money_ready_verdict, so the institutional-readiness pipeline does not see them. Either the tournament needs a wire-up to those tables, or the divergence needs to be documented prominently (tournament=research-only).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "AI tournament -> pf_registry pipeline gap + ai_tournament.html surface vs money_ready_verdict.json",
        "reported_by": "claude-opus-4-7-desktop",
        "assigned_to": null,
        "recommended_fix": "Either (a) flip PF_REGISTRY_INCLUDE_TOURNAMENT_DB=1 result into asset_class_health aggregation (per PR #93), (b) add a banner on ai-tournament.html clarifying these picks are research-only and not in the canonical institutional-readiness verdict, OR (c) audit why tournament picks are not being mirrored into trading_picks.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31. tournament leaderboard PF>2 contradiction was artifact of stale snapshot race. Agents rebuilt 40/3873 correctly multiple times this session. Money_ready_verdict still shows INSUFFICIENT_DATA for most classes (correct \u2014 no T2). No contradiction after stable rebuild.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 02:06:40",
        "resolved_at": "2026-05-31 02:06:40",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "parallel-session-ops 2026-05-31"
      },
      {
        "incident_id": 30,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "pick_summary_stats_48h.json is 43h stale on live site",
        "description": "audit_dashboard/data/pick_summary_stats_48h.json generated_at=2026-05-29T06:38:50Z while sibling dashboard_data.json + money_ready_verdict.json are fresh (2026-05-31T00:02Z). 48h recency panel not refreshing \u2014 blocks PR #119 (resolver DESC fix) verification + all 48h Goal #1 freshness claims.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/data/pick_summary_stats_48h.json + writer",
        "reported_by": "claude-opus-4-7-desktop",
        "assigned_to": null,
        "recommended_fix": "Identify the writer of pick_summary_stats_48h.json. Cron-driven or part of audit-dashboard.yml? If part of audit-dashboard.yml, why is it lagging vs dashboard_data.json. Investigate audit_trail/dashboard_generator.py for the _48h stat builder.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31. pick_summary_stats_48h.json staleness resolved by PR #119 resolver DESC fix \u2014 first post-fix hourly run at 02:10Z. Monitor closed_n count.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:03",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 02:06:40",
        "resolved_at": "2026-05-31 02:06:40",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "parallel-session-ops 2026-05-31"
      },
      {
        "incident_id": 29,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "claudes_test_state.json gitignored -> audit-hourly-update crashes every CI run",
        "description": "STATE_FILE gitignored (.gitignore:469), absent in fresh CI checkout; load_state() fail-loud -> audit-hourly-update.yml + deploy-competition crash each run. Fake-empty seed would publish misleading live portfolio data -> needs owner decision.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/generate_hourly_update.py; .gitignore:469",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "OWNER DECISION: rebuild-from-DB before read / persist state / graceful-skip on absent (NOT a fake seed)",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Resolved 2026-05-31. Two-PR fix: PR #94 drops the gitignored JSONs from the claudes-test-portfolios.yml commit step (per HANDOFF_OPUS47_2026-05-31.md \u00a73 option c). PR #102 makes generate_hourly_update.py:load_state() return None instead of raising on missing/corrupt state file, so audit-hourly-update.yml no longer crashes.",
        "duplicate_of": null,
        "created_at": "2026-05-29 11:49:06",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 01:40:31",
        "resolved_at": "2026-05-31 01:40:31",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #94 + PR #102"
      },
      {
        "incident_id": 26,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "job-health.md self-commit loop spams main (~every 11min)",
        "description": "branch-large-file-dup-guard.yml prepends a timestamped alert + commits updates/job-health.md on every run whenever cross-branch dup blobs exist (always), full-block churn polluting main history.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/branch-large-file-dup-guard.yml",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "content-idempotent commit: signature=sorted(blob:branch_count); skip when unchanged",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: PR #48 merged 2026-05-29 \u2014 content-idempotent commit signature in job-health workflow. Recent self-commits over 24h: ~29 (down from ~130/day at 11-min spam rate). Acceptable cron-driven cadence.",
        "duplicate_of": null,
        "created_at": "2026-05-29 11:49:05",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": "2026-05-31 05:28:36",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#48"
      },
      {
        "incident_id": 27,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Node 20 action deprecation \u2014 94 workflow files on old majors",
        "description": "GitHub forces Node 24 default 2026-06-16 (Node 20 removed 2026-09-16). ~94 workflows still on checkout@v4/setup-python@v5/upload-artifact@v4/etc. Zero SHA-pins; tag rewrite safe.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/* (tail ~94 files)",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "bump to checkout@v6/setup-python@v6/cache@v5/upload-artifact@v5/etc on a clean .github-scoped branch",
        "target_release": "2026-06-16",
        "evidence": null,
        "resolution_notes": "Wave-12 recon: PR #47 merged 2026-05-29. Audit: 305 workflow files now on actions/checkout@v5+ or @v6; only 1 file on legacy v3/v4.",
        "duplicate_of": null,
        "created_at": "2026-05-29 11:49:05",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": "2026-05-31 05:28:36",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#47"
      },
      {
        "incident_id": 28,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "failure-guardian blind to masked (green-job/failed-step) failures",
        "description": "actions_failure_guardian.py keys only on top-level job conclusion, so 316 continue-on-error step failures across 60 workflows are invisible (green but lying).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "scripts/actions_failure_guardian.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "detect_masked_failures() via GET /runs/{id}/jobs; flag success-job with failed step; report-only + Discord",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: PR #50 merged 2026-05-29 \u2014 detect_masked_failures() in failure-guardian. Reports green-job/failed-step combos to Discord.",
        "duplicate_of": null,
        "created_at": "2026-05-29 11:49:05",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": "2026-05-31 05:28:36",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#50"
      },
      {
        "incident_id": 23,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Multi-AI panel reached wrong COMMODITY consensus on ungrounded prompt",
        "description": "5-engine NVIDIA NIM panel (Kimi K2.6 + GPT-OSS-120B + GLM-5.1 + Nemotron Super 49B + Mistral Nemotron) unanimously declared COMMODITY the system's #1 alpha, recommending 20-30% allocation. The 3-engine codex/grok/gemini panel (shown the same numbers PLUS leakage signals) classified the same cell DATA_QUALITY_LEAKAGE at ~90% confidence. In-house verification confirmed the leakage panel \u2014 87.6% one-symbol concentration (CT=F cotton), fake Bonferroni denominator, 30-day hot streak only. The merged-cohort registry rerun collapses COMMODITY policy-clean NET PF from 0.18 -> 0.937 (still under T2's 1.5 bar).",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/swarm/api_consult.py + consult-nvidia-models / consult-cloudflare-models skills",
        "reported_by": "claude-opus-4-7+roo-deepseek-session",
        "assigned_to": null,
        "recommended_fix": "Mandate inclusion of reports/hypothesis_registry.json rejected-hypothesis entries that intersect the prompt's asset class. Update consult-nvidia-models/SKILL.md + consult-cloudflare-models/SKILL.md to require a leakage-context block in every prompt template. Add a sentence: 'Be skeptical; if data suggests one symbol/source dominates, flag concentration risk.'",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Added mandatory leakage-context boilerplate to tools/consult_multi.py. Every prompt through --fanout or --provider now includes: skepticism about single-symbol/source dominance, concentration-risk flag, and reports/hypothesis_registry.json intersection check. This prevents ungrounded multi-AI consensuses on inflated one-symbol edges.",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:52:04",
        "link_md_path": "reports/2026-05-25_multi_ai_panel_meta_review.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 18,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "summary_picks.json shows identical last_pick_at=2026-05-24T11:00:00Z across all asset classes \u2014 fixture suspicion",
        "description": "All asset classes report the same last-pick timestamp to the second. Statistically implausible \u2014 strongly suggests this file is auto-generated/simulated rather than computed from real picks. 3/3 swarm REAL.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/data/summary_picks.json + its writer",
        "reported_by": "opencode/ring-2.6-1t + 3-engine swarm",
        "assigned_to": null,
        "recommended_fix": "Identify the writer of summary_picks.json. If it's a fixture, replace with a real query that pulls MAX(created_at) per category. If it's a real query that's bugged, fix the GROUP BY.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31 verified resolved on live summary_picks.json (generated_at 01:57Z).\nPer-class last_pick timestamps are NOW distinct + fresh:\n  BOND 2026-05-25T15:08 (5d), COMMODITY 2026-05-31T00:50 (1.5h), CRYPTO 2026-05-31T01:27 (30m), EQUITY 2026-05-31T01:55 (12m), ETF 2026-05-30T11:49 (14h), FOREX 2026-05-31T01:56 (11m), FUTURES 2026-05-31T00:50 (1.5h), STOCKS 2026-05-30T20:59 (5h).\nSource field shows 'local_json' meaning the writer pulls from real local pick files now (no longer the fixture-suspect '2026-05-24T11:00:00Z' across all classes). Writer fix likely landed in a peer PR between the original incident filing (2026-05-25) and now.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:51:47",
        "date_est": "2026-05-24",
        "time_est": "23:51",
        "updated_at": "2026-05-31 02:08:10",
        "resolved_at": "2026-05-31 02:08:10",
        "link_md_path": "reports/2026-05-25_opencode_session_deep_scan.md",
        "link_url": "https://findtorontoevents.ca/audit/data/summary_picks.json",
        "link_github_ref": "verified 2026-05-31"
      },
      {
        "incident_id": 10,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "PnL integrity mismatch on 38.97% of sampled closed picks",
        "description": "db_health.json reports 10,501 / 26,945 sampled rows have a >1% pnl discrepancy between stored pnl_pct and recomputed (entry/exit/direction). 12,735 have >0.01% mismatch. Tier: RED. All cohort WR/PF stats built on top of trading_picks.pnl_pct are suspect at this drift level.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "trading_picks.pnl_pct integrity",
        "reported_by": "qwen-code",
        "assigned_to": null,
        "recommended_fix": "Re-resolve historical closed picks via re_resolve_historical_v2.py (referenced in template.html). Quantify per-strategy drift and re-publish asset_class_health post-fix.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Re-verified 2026-06-04: 78/647 mismatched = 12.06% (was 38.97% at incident filing \u2014 27pp improvement). Likely fixed by prior resolver fixes (PNL_WIN_THRESHOLD_BY_CLASS + resolver intrabar). Downgrade P0\u2192P1; remaining 12% likely from edge cases (fee/slippage adjustments). Recommend follow-up audit on the 78 mismatched rows to identify residual pattern.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:37:46",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": "audit_dashboard/data/db_health.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 4,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Top-N Rank Backtest tool returned Access denied",
        "description": "tools/top_n_rank_backtest.py read DB_STOCKS_PASSWORD but this host sets DB_PASS_STOCKS. Fell back to default password 'stocks' -> MySQL 1045 Access denied. Also queried asset_class/score columns that don't exist on live trading_picks (uses category/elite_score).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "tools/top_n_rank_backtest.py",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Two commits: 702eac27 (env-var aliasing) + c5fcbdc1 (schema columns). Verified live: EQUITY 90d returns n=85, top-10/day cum PnL +1.16%.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-05-29 06:07:28",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "702eac27,c5fcbdc1"
      },
      {
        "incident_id": 7,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Smart Picks 'Signal Time' is dashboard-file age, not pick age",
        "description": "smart_picks_feed pick objects lack the signal_time field. Template logic falls back to age_hours which is computed at dashboard JSON build time. So all rows display the same '1.4h ago' regardless of when the pick actually fired.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_trail/dashboard_generator.py (smart_picks_feed builder)",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Populate signal_time = trading_picks.created_at on every entry in the smart_picks_feed payload. One-line addition.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Workflow-verified FIXED (wf_3c3cdc16): per-pick signal_time populated in the smart_picks payload builder (P1 fix landed); dashboard no longer shows file age as pick age.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-10 18:39:48",
        "resolved_at": "2026-05-31 01:40:31",
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 9,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Swarm Picks tab effectively abandoned",
        "description": "data/swarm_picks.json has 38 picks; newest is dated 2026-05-12 (13 days old). Workflow swarm-pick-review.yml runs daily but no longer adds picks \u2014 only resolves the existing 38.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit/ Swarm Picks tab / .github/workflows/swarm-pick-review.yml",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Either revive multi_model_pick_gen.py so fresh consensus picks flow in, OR deprecate the Swarm Picks tab and redirect to /audit/ai-tournament.html.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "dedup_trading_picks_ghosts.py 2026-05-31: 0 active ghost cohorts on live DB; tool shipped for regression",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:30:13",
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 137,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "BATTLE_REPORT.md publishes simulated funding rates + Feb-17 static results as hourly 'real-time battle test'",
        "description": "Agent-verified 2026-06-13: battle_test.yml regenerates BATTLE_REPORT.md hourly; battle_test_real_time.py:103 SIMULATES funding rates ('in real system, fetch from Binance/Bybit') yet renders them as 100%-confidence Live Signals; Survivors/Eliminated load from forward_test_results.json whose period ENDED 2026-02-17 (re-stamped hourly as fresh); prices come from a single CoinGecko endpoint (violates the 3+ failover rule). Textbook measurement-hallucination surface.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "battle_test_real_time.py",
        "reported_by": "claude-fable-mdreview",
        "assigned_to": null,
        "recommended_fix": "Either retire the workflow or truth-label the output (SIMULATED funding banner + real data-vintage stamp Feb-17) + add price failover. Do not let peers cite its survivors list.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-13: workflow disabled (no more hourly fabricated commits); SIMULATED banner injected into the generator block (survives any manual workflow_dispatch), the static BATTLE_REPORT.md header, and a comment at the hardcoded funding literals (battle_test_real_time.py). Verified 0 programmatic consumers before retiring.",
        "duplicate_of": null,
        "created_at": "2026-06-13 01:48:16",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-13 02:04:28",
        "resolved_at": "2026-06-13 02:04:28",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 138,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Dashboard reads KIMI_RISEOFTHECLAW files directly at ~10 sites \u2014 AI surfaces bypass the honest ledger",
        "description": "PROGRESS.MD claim agent-CONFIRMED 2026-06-13: dashboard_generator.py reads KIMI_RISEOFTHECLAW/data/*.json|sqlite directly (lines 3779, 4223-4224, 8785, 9039, 9173, 10087, 10846, 11181, 12436, 16430) \u2014 kimi-attributed numbers on dashboard surfaces never pass at_signal_outcomes resolution/guards. Same hallucination class as the retired swarm panel. NOTE: ingestion of kimi into the ledger is now gated (P0B) + the NULL-ts bypass is fixed, so the LEDGER is clean \u2014 the dashboard's direct file reads are the remaining bypass.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit_trail/dashboard_generator.py",
        "reported_by": "claude-fable-mdreview",
        "assigned_to": null,
        "recommended_fix": "Migrate the ~10 direct reads to ledger-backed queries (or label those panels NON-LEDGER/UNAUDITED); PROGRESS.MD's reconciliation work is the companion.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-13 01:48:16",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-13 01:48:16",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 136,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Track-record stats are DIRECTION-BLIND: sym_track_wr keys on strategy/source+symbol only (dashboard_generator.py:5495)",
        "description": "Validated 2026-06-12 (agent finding, code-verified): _build_source_symbol_track_stats + _build_strategy_symbol_track_stats key on (system|strategy)+symbol WITHOUT direction. The active-picks Track column therefore shows the same WR for a LONG and a SHORT on the same symbol. Given the now-proven CRYPTO LONG 30.1%/SHORT 55.8% asymmetry (INCIDENT#23), direction-blind track stats materially mislead. FWD WR column is strategy-wide BY DESIGN (documented at template.html:8869) \u2014 not a bug; the Track key granularity is.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit_trail/dashboard_generator.py",
        "reported_by": "claude-fable-edgehunt",
        "assigned_to": null,
        "recommended_fix": "Add UPPER(direction) to the track keys (+the _pit at-issue variant), bump n-floor note in template Track tooltip; audit consumers of sym_track_* before changing key shape.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "IMPLEMENTATION DESIGN (2026-06-12 20:10Z; audit complete, edit deferred per >2-consumer-sites stop rule \u2014 8 sites on the hot 18k-line generator): ALL sites are internal to audit_trail/dashboard_generator.py. (A) Add direction param w/ default '' to BOTH key fns: _track_stats_key(strategy, symbol, direction='') @5447 and _source_symbol_track_key(source_system, symbol, direction='') @5452 \u2014 key format f'{a}::{b}::{DIR}' when direction else legacy 2-part (back-compat). (B) Pass UPPER(pick.direction) at build sites :5504 (+:5514 entry init), :5555, :5651, :5662 and lookup sites :1783, :15875, :15893 (fallback strategy-base key), :15926 (via-feeder). (C) Keep a LEGACY 2-part aggregate alongside so thin direction-split cells (n<3) fall back to symbol-level rather than blank \u2014 template Track tooltip already explains n>=3 gating. (D) py_compile + diff-only-additive + verify payload sym_track_* fill-rate doesn't drop >10% (direction split halves n per cell; expect fewer bold cells \u2014 that is honest). Recommend shipping as a small PR from a worktree (operator preference) rather than a hot Contents-API edit.",
        "duplicate_of": null,
        "created_at": "2026-06-12 18:41:41",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-12 20:06:51",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 134,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "ml_gatekeeper A/B router last-mile broken: tagged picks never reach the analysis reader (n_ab_tagged=0)",
        "description": "ML audit: _ab_sleeve picks written to ml_gatekeeper/data/active_picks_ab_new.json (gatekeeper.py:1001) which is never committed/merged into alpha_engine/data/closed_picks.json that ab_analysis.py:95 reads; plus _ab_arm vs _ab_sleeve field mismatch. Cheap fix, high information (the A/B answers whether leakage-purged ML helps).",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "ml_gatekeeper",
        "reported_by": "claude-fable-mlaudit",
        "assigned_to": null,
        "recommended_fix": "Merge ab_new picks into the closed-picks path (or point ab_analysis at the ab file) + unify the field name.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-06-13: wired main()->score_active_picks_ab (gatekeeper.py) \u2014 the dual-write was defined-but-never-called (the true terminal cause behind n_ab_tagged=0, after the prefetch/env/import-print fixes). Now AB_ENABLED + both joblibs => dual-write runs (OLD to prod, NEW to sidecar), feeding ab_history.jsonl via the accumulator. Return-type normalized. Verify on next hourly dashboard run: expect '[gatekeeper-ab] OLD wrote N / NEW wrote N' + '[ab-accumulator] +N rows'.",
        "duplicate_of": null,
        "created_at": "2026-06-12 06:40:22",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-13 03:33:10",
        "resolved_at": "2026-06-13 03:33:10",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 131,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Terminal NULL-pnl regrowing: active writers close picks without pnl",
        "description": "737 terminal rows with NULL pnl (was 131 after the 06-10 recovery). Ongoing writers: multi_asset_copytrader (latest 2026-06-11 19:13), alpha_engine, cta_replicator. The backfill recovers but the writers should set pnl at close; each NULL row is invisible to PF/WR until backfilled. (money-maker-ready audit 2026-06-11)",
        "severity": "P2",
        "status": "IN_PROGRESS",
        "affected_component": "multi_asset_copytrader + cta_replicator close paths",
        "reported_by": "claude-fable-mmready",
        "assigned_to": null,
        "recommended_fix": "Set pnl_pct at close-time in the three writer paths; schedule backfill_resolved_pnl.py weekly as a safety net (now price-sanity-guarded).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Writer paths fixed (6dee0a3c + 62a39f65): close-time pnl computed from prices (ratio-guarded) in mysql_trading_sync.pick_to_row + mysql_close_trade. Backlog re-run with the price-guarded backfill 2026-06-11. Remaining: watch that regrowth stops (writers now set pnl); cron the guarded backfill as safety net.",
        "duplicate_of": null,
        "created_at": "2026-06-11 21:45:43",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 22:23:22",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 126,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Algorithm Competition workflows fail: STOCKS/competition/run_competition.py lost in 2026-05-23 history strip",
        "description": "GHA \"Algorithm Competition Refresh\" (algorithm-competition-refresh.yml) + \"[torontoevent] Algorithm Competition Refresh\" (torontoevent-algorithm-refresh.yml) both fail every scheduled run: \"python3 STOCKS/competition/run_competition.py -> No such file or directory\" (exit 2). The script is absent from the working tree AND all reachable git history (lost in the 2026-05-23 stripped-history reset 4aaa6ff848f); it was present + ran fine on the 2026-05-24 runner and is still documented in docs/GITHUB_ACTIONS_INVENTORY_2026-05-15.md + MULTI_ASSET_TOURNAMENT_PLAN.md. Not a flake. STOCKS/competition/ now holds only output JSONs + index.html.",
        "severity": "P2",
        "status": "WONTFIX",
        "affected_component": ".github/workflows/algorithm-competition-refresh.yml + torontoevent-algorithm-refresh.yml; STOCKS/competition/run_competition.py",
        "reported_by": "claude-opus-4-8 (GHA audit)",
        "assigned_to": null,
        "recommended_fix": "OPERATOR: restore run_competition.py from a pre-2026-05-23 clone / runner cache, git add + commit. STOP-GAP (claude): guard both workflow steps to skip-with-warning if the file is missing, so the schedule stops hard-failing daily until restored.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Page deprecated per user 2026-06-09 ('that page doesnt matter, disregard'). Not reconstructing run_competition.py. Workflow guard (a050629806/fdf0aeca9a) makes the 2 dead workflows skip-with-warning so they no longer red-fail CI.",
        "duplicate_of": null,
        "created_at": "2026-06-09 17:53:09",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 17:59:44",
        "resolved_at": "2026-06-09 17:59:44",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 125,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "kimi_direct 66.1% WR is stale + losing-tail (correctly excludes MISPRICED but misleading)",
        "description": "model.html?id=kimi_direct WR=66.1% (37W/19L). VERIFIED it correctly EXCLUDES 46 MISPRICED_ENTRY picks (model.html resolved=WIN/LOSS/EXPIRED only; live DB WR incl/excl mispriced both 66.1%). BUT misleading: (1) data ends 2026-05-22 \u2014 model dark 18 days; (2) the 3 most-recent resolved picks were ALL LOSSES (NZDUSD -1.89% x2 [duplicate row], APTUSDT -5.47%); (3) 46 of 102 non-open picks (45%) discarded as mispriced = unreliable entry logic; (4) duplicate NZDUSD row inflates counts. The 66.1% holds little forward weight.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit_dashboard/model.html / tournament_picks(model_id=kimi_direct)",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Add a recency/staleness badge + \"last resolved N days ago\" to model.html; flag models dark >14d as STALE; dedup tournament_picks NZDUSD row; surface most-recent-3 outcome strip so a losing tail is visible despite a high lifetime WR.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 04:50:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 04:50:40",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/model.html?id=kimi_direct",
        "link_github_ref": null
      },
      {
        "incident_id": 119,
        "asset_class": "OVERALL",
        "source_ref": "GHA health audit w6gd2l9nj",
        "title": "GHA: Daily Per-Class Scrutiny Engine failing \u2014 scipy not installed",
        "description": "Engine imports scipy but workflow only `pip install pymysql`. CROSS-CHECKED: added scipy+numpy; re-run 27181760292 = SUCCESS.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/daily-scrutiny-engine.yml",
        "reported_by": "claude-opus-4-8 (GHA health audit + cross-check 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "Add scipy to deps (done). Verified green.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:31:11",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:31:11",
        "resolved_at": "2026-06-09 03:31:11",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "94726fbba4"
      },
      {
        "incident_id": 121,
        "asset_class": "OVERALL",
        "source_ref": "GHA health audit w6gd2l9nj",
        "title": "GHA: AI Leaderboard Freshness failing \u2014 (a) missing DB creds FIXED, (b) residual regime_report.json missing on runner",
        "description": "Two causes. (a) DB-reading steps lacked DB password -> 'no DB password found': FIXED via job-level AUDIT_DB_*/DB_PASSWORDS_JSON env (committed). (b) RESIDUAL: workflow still red because the FTP step's `deploy_audit_files.py --only audit_data` reports 'local missing' for alpha_engine/data/regime_report.json \u2014 that file is GITIGNORED and not generated in this workflow, so the runner checkout lacks it -> 1 failed -> exit 1.",
        "severity": "P2",
        "status": "IN_PROGRESS",
        "affected_component": ".github/workflows/ai-leaderboard-freshness.yml + tools/deploy_audit_files.py",
        "reported_by": "claude-opus-4-8 (GHA health audit + cross-check 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "DB-creds fixed. For residual: either generate regime_report.json in-workflow before deploy, OR make deploy_audit_files treat a missing-LOCAL source as skip+warn (not a hard exit-1), since these data files are gitignored and may be legitimately absent on a runner.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:31:11",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:31:11",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "94726fbba4"
      },
      {
        "incident_id": 109,
        "asset_class": "OVERALL",
        "source_ref": "session 2026-06-06 baby-strategy CI fix",
        "title": "Babies sweep aborts entirely when one strategy file raises SystemExit on import",
        "description": "baby_strategies/backtest_batch_round3.py does raise SystemExit(\"pip install yfinance\") at import; SystemExit derives from BaseException so the loader except Exception missed it and the whole sweep died at file 10/15 (run 27056111987 exit 1).",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "incubator/backtest_team/real_data_sweep_runner.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "(see resolution_notes)",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Loader now catches SystemExit as a per-file import error so one bad file cannot abort the sweep. Verified locally: --max 15 --force completes exit 0.",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:24",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:24",
        "resolved_at": "2026-06-06 07:34:24",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "daf08d23b2"
      },
      {
        "incident_id": 101,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Three models get 'T1' badges with n_resolved 41-98 (< charter n>=100) and PF lower-CI straddling 1.0",
        "description": "Tier is assigned by absolute PF/WR thresholds (T1 = PF>=2 & WR>=55) gated only at n>=30, not the project charter's T1 requirement of n>=100 clean trades. kimi_direct (n_resolved=54, pf 2.573, pf_ci_lo 1.313), grok3 (n=98, pf 2.216, pf_ci_lo 1.338), and llm7_qwen (n=41, pf 2.088, pf_ci_lo 0.929) all show 'T1'. llm7_qwen's PF 95% lower bound is 0.929 \u2014 i.e. the CI includes 'no edge' \u2014 yet it is badged T1 and ranked #3. The banner does say T1s are UNPROVEN, but the green T1 badge plus rank ordering still visually promotes them as proven-best.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Gate the T1 badge itself on n_resolved>=100 AND pf_ci_lo>=1.5 (charter Tier-1 = PF>2); render anything below as 'T1-provisional' or downgrade to T2/T3 until n>=100. Suppress the T1 color until the CI lower bound clears 1.0. This aligns the badge with the banner copy already present.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.95, \"review_evidence\": \"ai_tournament_leaderboard.json: tier counts {'BELOW':23,'BUILDING':16,'T1':3,'T2':2,'T3':2}; min_n_to_rank=30. llm7_qwen pf_ci_lo=0.929 (<1.0). Template line 641 sets tier purely on m.pf>=2.0 && m.wr>=0.55. DB-wide resolved WR is 48.9% \u2014 well below all three T1 WRs.\", \"verify_evidence\": \"ALL claim elements independently verified against live local files:\\n\\n1. audit_dashboard/data/ai_tournament_leaderboard.json (generated_at 2026-06-05T23:50Z): min_n_to_rank=30; tier counts {T1:3, T2:2, T3:2, BELOW:23, BUILDING:16} \u2014 exact match.\\n\\n2. Three T1 models confirmed verbatim: kimi_direct (n_resolved=54, pf=2.573, pf_ci_lo=1.313, wr=0.6481, rank=1); grok3 (n_resolved=98, pf=2.216, pf_ci_lo=1.338, wr=0.551, rank=2); llm7_qwen (n_resolved=41, pf=2.088, pf_ci_lo=0.929 [<1.0, CI includes no-edge], wr=0.6585, rank=3). All three n<100 (charter T1 requires n>=100).\\n\\n3. audit_dashboard/ai-tournament.html:639-641 \u2014 tier assigned purely on absolute thresholds: line 639 `m.rank_eligible = m.n_resolved >= 30;` then line 641 `m.tier = m.pf >= 2.0 && m.wr >= 0.55 ? 'T1'`. No n>=100 gate, no pf_ci_lo gate on tier. Confirmed verbatim.\\n\\n4. Badge IS green: line 21 `.b-t1 { background: #22c55e; }`. Rendered at line 700 as `<span class=\\\"badge b-t1\\\">T1</span>`.\\n\\n5. Aggregate resolved WR computed from JSON = 48.2% (825 wins / 1711 resolved), close to claimed 48.9%; all three T1 WRs (55-66%) far exceed population mean \u2014 consistent with small-n inflation.\\n\\n6. Banner/warning copy DOES exist (line 211 tooltip; lines 693-696 per-row \u26a0\ufe0f tooltip stating 'n_resolved=X is below the 100-trade minimum for T1 confidence' and 'all T1s UNPROVEN until n>=100'). Live page (findtorontoevents.ca/audit/ai-tournament.html) confirms the UNPROVEN-until-n>=100 warning text is deployed.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 103,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "MISPRICED_ENTRY exclusion drops 58.5% of all picks; high-rank models have the heaviest exclusion",
        "description": "4,154 of 7,099 picks (58.5%) are excluded as MISPRICED_ENTRY (entry_price drifted >25% from market at submission). The exclusion is not random across the leaderboard: grok3 has 262 MISPRICED vs 52 resolved (83% of resolvable picks excluded), and deepseek_v4 shows n_picks=352 but only 39 resolved (282 excluded per JSON). When ~5x more of a model's picks are thrown out than survive, the surviving cohort can be a biased subsample (e.g. only the picks where the model happened to quote a near-market entry), which can systematically flatter WR/PF. The banner mentions the 4,154 exclusion but does not warn that selection bias in *which* picks survive can inflate the ranked WR.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Add a per-model 'exclusion rate' column (n_excluded / (n_excluded+n_resolved)) and flag models where it exceeds e.g. 60% as 'survivorship-suspect'. Investigate why entry_price drifts >25% (data-feed lag vs model quoting stale prices) and fix upstream so fewer picks need excluding rather than silently dropping the majority.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.83, \"review_evidence\": \"DB status distribution: MISPRICED_ENTRY=4154, OPEN=1160, LOSS=913, WIN=872. grok3 DB: 262 MISPRICED vs 52 resolved. leaderboard JSON deepseek_v4 n_excluded_untrustworthy=282 vs n_resolved=39. normalize.py:113 is_resolution_trustworthy excludes status=='MISPRICED_ENTRY'.\", \"verify_evidence\": \"All factual claims verified exactly against live DB and source files.\\n\\nDB status distribution (tournament_picks, ejaguiar1_stocks): MISPRICED_ENTRY=4154, OPEN=1160, LOSS=913, WIN=872, TOTAL=7099. 4154/7099 = 58.5% \u2014 matches claim exactly.\\n\\nPer-model (verified live): grok3 = 262 MISPRICED vs 52 resolved (WIN+LOSS) = 83% exclusion \u2014 matches exactly. deepseek_v4 = 282 MISPRICED vs 39 resolved, n=352 \u2014 matches exactly. High-rank-shaped models carry the heaviest exclusion: deepseek_v4 88%, ring_261T 92% (n_resolved=6), nvidia_nemotron_3_70b 87%, cerebras_llama4 86%, nous_hermes_4 84%, together_qwen_3 84%, grok3 83%, groq_llama_3_70b 82%.\\n\\nLeaderboard JSON (audit_dashboard/data/ai_tournament_leaderboard.json) deepseek_v4 row: n_picks=352, n_resolved=39, n_excluded_untrustworthy=282, n_wins=19, wr=0.4872 \u2014 matches claim exactly.\\n\\nCode: tools/ai_tournament/normalize.py:113 is_resolution_trustworthy; line 126 `if status == \\\"MISPRICED_ENTRY\\\": return False`. Docstring confirms >25% drift rule and 57.1% mispriced on top-15 models. Consumed by update_leaderboard.py:25 and build_model_summary.py:31.\\n\\nBanner: audit_dashboard/ai-tournament.html:195 states the 4,154 count + mechanism + that fireworks_qwen dropped from 92.1% to de-ranked, but does NOT contain any 'survivorship', 'selection bias', or per-model 'exclusion rate' warning (grep found none). So the claim that the banner omits a selection-bias warning is correct.\\n\\nONE OVERSTATEMENT: the claimed mechanism ('surviving cohort can system\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 104,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Funnel WR% excludes the majority of economically-resolved trades by bucketing TIME_EXIT as non-decisive",
        "description": "_classify_status() in extract_funnel.py maps TIME_EXIT/EXPIRED/STALE/FLAT to CLOSED_FLAT (non-decisive), counting only TP_HIT as WIN and SL_HIT/LOST as LOSS. For CRYPTO this drops 11,727 TIME_EXIT closes that DO carry real pnl_pct (5,499 positive / 6,226 negative). The displayed decisive denominator is therefore win 1,920 + loss 2,027 = 3,947, vs 15,671 trades that actually have a resolved economic outcome. This understates sample and biases WR. The displayed CRYPTO WR 48.64% rises only slightly to 47.34% when TIME_EXIT is scored by pnl, but the methodology hides that 75% of closes are time-exits, which is material for a hedge-fund-grade readiness page.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "In _classify_status / the funnel WR computation, score TIME_EXIT (and EXPIRED with non-null pnl) by pnl_pct sign rather than dumping to CLOSED_FLAT, OR surface a separate 'time-exit win-rate' column and label the headline WR as 'TP/SL-only WR'. Add the decisive-vs-total-closed ratio to the table so the time-exit dominance is visible.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.88, \"review_evidence\": \"trading_picks CRYPTO 90d status: TP_HIT 1920, TIME_EXIT 11727, SL_HIT 1485, LOST 541, EXPIRED 339, OPEN 660. TIME_EXIT pnl_pct: 5499 pos / 6226 neg / 2 null. WR counting TIME_EXIT by pnl = 47.34% (n=15,671) vs page-displayed 48.64% (n=3,947). _classify_status maps TIME_EXIT->CLOSED_FLAT (extract_funnel.py:76-88).\", \"verify_evidence\": \"CODE: tools/audit_pick_funnel/extract_funnel.py:76-88 _classify_status maps TIME_EXIT/EXPIRED/STALE/FLAT->CLOSED_FLAT; only TP_HIT/WON->WIN, SL_HIT/LOST->LOSS. WR computed decisive-only at lines 212-216 (decisive=win+loss). Smart-Picks DB ground-truth query also restricts to status IN ('WON','WIN','LOST','LOSS') at line 284. DB (ejaguiar1_stocks.trading_picks, CRYPTO 90d): TIME_EXIT 11727, TP_HIT 1917, SL_HIT 1485, OPEN 660, LOST 541, EXPIRED 339 \u2014 matches claim within trivial drift (claim said TP_HIT 1920). TIME_EXIT pnl_pct: 5499 pos / 5516 neg / 710 zero / 2 null (claim said 5499 pos / 6226 neg \u2014 pos matches exactly; neg differs because claim folded zeros). Computed decisive WR = 48.62% n=3943 (claim 48.64% n=3947). WR including TIME_EXIT+EXPIRED scored by pnl sign = 49.13% n=15132 (claim 47.34% n=15671 \u2014 direction confirmed: WR barely moves, sample ~4x larger; exact figure differs by zero-pnl bucketing). Time-exit dominance: TIME_EXIT+EXPIRED = 75.4% of the 16009 non-OPEN closes; decisive TP/SL is only 24.6%. PARTIAL DISCLOSURE: pick_funnel.html:217 states 'WR shown is decisive-only ... so flat/expired picks don't dilute it'; tables (lines 778/794/823) show touched/closed/decisive columns side-by-side; a TIME_EXIT_inflation caveat exists \u2014 BUT build_nav_surface_matrix.py:225-230 scopes it ONLY to surface_id=='elite_display_tier' and keys off exit_reason text, NOT the headline funnel/Smart-Picks WR cells where the concern applies.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 105,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Advertised multi-asset coverage is a facade \u2014 CRYPTO/BOND/FUTURES never produced; TOP-20 is 80% equity",
        "description": "The page is positioned as 'best picks across stocks/crypto/forex/bonds/ETFs/commodities/futures' and references BOND (TLT/IEF/SHY) and CRYPTO in methodology/tier tables. But the live data never contains them as actual picks: picks_now.json 'all' (50) = EQUITY 31 / ETF 10 / FOREX 5 / COMMODITY 4, zero CRYPTO/BOND/FUTURES; the TOP-20 shown is EQUITY 16 / ETF 3 / FOREX 1 (80% equity). picks_now_tracker (all history) = EQUITY 83 / ETF 10 / FOREX 3 \u2014 never any crypto/bond/commodity/futures row. BOND tier entries (TLT/IEF/SHY) are static reference text, not generated picks with entry/TP/SL.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Either wire real CRYPTO/BOND/FUTURES candidate generation (yfinance/CoinGecko for crypto, bond-ETF momentum for BOND) so the page delivers on its multi-asset promise, OR relabel the page honestly as 'Equity-led with limited FX/ETF/commodity' and remove the BOND/CRYPTO tier rows that imply coverage that does not exist.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.78, \"review_evidence\": \"picks_now.json Counter(class): all={EQUITY:31,ETF:10,FOREX:5,COMMODITY:4}, top20={EQUITY:16,ETF:3,FOREX:1}. DB picks_now_tracker GROUP BY asset_class -> EQUITY 83, ETF 10, FOREX 3 only.\", \"verify_evidence\": \"DB live query: SELECT asset_class, COUNT(*) FROM ejaguiar1_stocks.picks_now_tracker GROUP BY asset_class => EQUITY 83 / ETF 10 / FOREX 3 (no crypto/bond/commodity/futures) \u2014 exactly matches claim. audit_dashboard/data/picks_now.json (committed HEAD): all (50) = EQUITY 31 / ETF 10 / FOREX 5 / COMMODITY 4; picks/top20 (20) = EQUITY 16 / ETF 3 / FOREX 1 (80% equity) \u2014 both Counters match the claim exactly. Live deployed https://findtorontoevents.ca/audit/data/picks_now.json (gen 04:53 ET) shows all = EQUITY 40 / ETF 14 / FOREX 8 / COMMODITY 4, no CRYPTO/FUTURES. Page header (audit_dashboard/picks-now.html:110) is literally 'Multi-Asset Quant Screener'. BOND tier row (line 194 TLT/IEF/SHY) IS static educational 'Safety Tiers' text, not generated picks \u2014 confirms that part.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 106,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "No staleness gate: header stuck at 'Loading...' and JSON age never shown/guarded",
        "description": "The page header (#header-updated line 112) and market strip (line 133) ship literal 'Loading...' and are only replaced client-side from data.generated_at; there is no max-age check. If picks_now.json fails to refresh (the GHA picks-now-refresh workflow or FTP deploy stalls), the page will silently display hours/days-old entry prices as 'right now' actionable picks with no stale warning. There is no setInterval/age-threshold logic in the page. The DB shows a 07:04 batch newer than the 04:52 JSON the page serves, indicating the JSON can lag the generator.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Compute age = now - generated_at in the render JS; if > ~30min show a red 'STALE \u2014 prices may be outdated, do not trade' banner and gray the cards. Have the refresh workflow write generated_at and verify the deployed JSON timestamp post-FTP.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.97, \"review_evidence\": \"picks-now.html:112 'Last Updated: Loading...', :917 builds est from data.generated_at with no age check; grep stale|age|Date.now|setInterval -> only static text. picks_now.json generated_at 04:52; picks_now_tracker latest batch 07:04:21.\", \"verify_evidence\": \"All four claimed evidence points verified independently in /home/eaguiar2015/findtorontoevents_antigravity.ca/audit_dashboard/picks-now.html:\\n- Line 112: `<span id=\\\"header-updated\\\">\ud83d\udd04 Last Updated: <strong>Loading...</strong> EST</span>` \u2014 literal placeholder.\\n- Line 133: `<div class=\\\"mkt-item\\\"><span class=\\\"mkt-sym\\\">Loading...</span></div>` \u2014 market strip placeholder.\\n- Line 917-918: `const est = data.generated_at ? new Date(data.generated_at).toLocaleString(...) : '\u2014';` then sets header. No subtraction of now-generated_at, no threshold.\\n- grep for `stale|Date.now|setInterval|getTime|age|max.?age|outdated`: the only Date.now() use is line 1053 cache-buster `fetch('data/picks_now.json?_=' + Date.now())`; no age comparison anywhere. Only 1 inline <script>, no external script src, so logic is not located elsewhere.\\n- Fetch handler (1053-1058): renders any returned JSON unconditionally; .catch only fires on network error, not on stale-but-successful fetch.\\n- AGGRAVATING factor not in claim: line 921-922 sets `#live-timestamp` to `new Date()` (page load time, 'Loaded: <now>'), which actively presents the view as fresh regardless of how old generated_at is.\\nData lag confirmed: picks_now.json generated_at = 2026-06-06T04:52:39Z; picks_now_tracker MAX(created_at) = 2026-06-06 07:04:21 (also a 05:27:07 batch). The deployed JSON trails the generator by ~2h12m, with two newer batches (05:27, 07:04) never reflected on the page.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 100,
        "asset_class": "ETF",
        "source_ref": null,
        "title": "cta_golden_cross listed in `elite` tier but PF=0.59 WR=54.55% \u2014 should not be promoted",
        "description": "strategy_tiers.json lists cta_golden_cross in `elite` array alongside prediction_market_consensus (PF 11.84). Actual stats: PF=0.592, avg_pnl=-0.037, sharpe_proxy=-0.11. This is a tier data quality error \u2014 the strategy has negative expected value and should be in `mutation_candidates` or demoted, not in the top tier.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/data/strategy_tiers.json",
        "reported_by": "claude-sonnet-4-6 2026-06-06",
        "assigned_to": null,
        "recommended_fix": "Remove cta_golden_cross from `elite` array in strategy_tiers.json. Move to `mutation_candidates` for Axes 2/4 investigation (direction gate or vol-normalized threshold).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Verified fixed 2026-06-06 by commit a5089daa3b (refresh FDR analysis + demote cta_golden_cross); current alpha_engine/data/strategy_tiers.json confirms the demotion. (workflow wf_cf7c13d9, 2026-06-11)",
        "duplicate_of": null,
        "created_at": "2026-06-06 05:58:31",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 22:07:54",
        "resolved_at": "2026-06-11 22:07:54",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 98,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Per-strategy perf trackers stale (fx_algo Feb / strategy_symbol_perf Mar / rolling Apr)",
        "description": "fx_algo_performance last 2026-02-09 (all 8 rows 0 picks); at_strategy_symbol_performance (410, only crypto true-PF) snapshot 2026-03-06; algorithm_rolling_perf max calc_date 2026-04-27; algorithm_performance Feb-Mar all-negative. Per-strategy perf not refreshing -> stale per-class edge reads.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "fx_algo_performance, at_strategy_symbol_performance, algorithm_rolling_perf, algorithm_performance",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Re-point the nightly strategy-stats rebuild at these tables; or deprecate dead ones (fx_algo_performance) and rebuild FX/equity perf from at_pick_outcomes.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-05 02:34:57",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-05 02:34:57",
        "resolved_at": null,
        "link_md_path": "reports/STRATEGY_AND_AUDIT_REVIEW_2026-06-04.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 87,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "PR branch fast-forward corruption: docs/eagle4-eagle5-gates-2026-06-02 lost EAGLE-4/5 commits",
        "description": "Branch docs/eagle4-eagle5-gates-2026-06-02 (carrying PR #447) was fast-forwarded past my 2 EAGLE-4/5 commits (c39d266bfa, 47e3ec4f7c) by concurrent agent activity (PR #455 walkforward-lazy-imports merge). Branch tip moved from c39d266bfa to bda830d7b9 with no EAGLE-4/5 work in the new tip. Rebase test produced 0 unique commits; cherry-pick produced 2 index.html content conflicts. Recovery: created clean new branch docs/eagle4-eagle5-gates-recovery-2026-06-02 with only my files (1 commit, 2 files, 376 insertions). PR #447 closed; PR #461 opened for the recovery.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "git-branch-state",
        "reported_by": "minimax-m3-free",
        "assigned_to": null,
        "recommended_fix": "When a doc-only branch must coexist with concurrent auto-syncs, build on a clean new branch from current origin/main and add only the doc files. Cherry-picking old commits onto a fast-forwarded tip will produce index.html conflicts. New branch + cherry-pick is the wrong tool here \u2014 new branch + recreate is right.",
        "target_release": "2026-06-02 17:30 UTC",
        "evidence": null,
        "resolution_notes": "Closed PR #447, opened recovery PR #461, force-pushed with only my files. Pattern documented for future branch recovery operations.",
        "duplicate_of": null,
        "created_at": "2026-06-02 18:20:02",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 18:20:02",
        "resolved_at": null,
        "link_md_path": "EAGLE6_2026-06-02_minimax-m3-free.MD",
        "link_url": null,
        "link_github_ref": "#447(closed),#461,#455"
      },
      {
        "incident_id": 86,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Source concentration: kimi_riseoftheclaw = 43.6% of all picks",
        "description": "Single source system dominates the pick book at 43.6% concentration (HHI=0.232). Should be < 40%.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "alpha_engine/smart_picks_engine.py",
        "reported_by": "mimo-v2.5-pro",
        "assigned_to": null,
        "recommended_fix": "Cap any single source at 40% of the aggregate book.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:36:14",
        "date_est": "2026-06-02",
        "time_est": "14:36",
        "updated_at": "2026-06-02 14:36:14",
        "resolved_at": null,
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null
      },
      {
        "incident_id": 61,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "check_resolver_health forward_test probe false YELLOW (conn closed early)",
        "description": "tools/check_resolver_health.py main() queried forward_test_only counts after conn.close(), surfacing false YELLOW. Fix on branch fix/resolver-health-forward-test-2026-06-02 (PR #457). forward_test columns on at_pick_outcomes were ALTER-applied 2026-06-02 (forward_test_only, forward_validated, _gated_forward_test_isolated).",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "tools/check_resolver_health.py",
        "reported_by": "cursor-composer-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Merge PR #457; re-run check_resolver_health.py on main; confirm forward_test section green when columns exist.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Same: forward_test probe GREEN after #457; false YELLOW closed.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 18:15:48",
        "resolved_at": "2026-06-02 18:15:48",
        "link_md_path": "updates/2026-06-02-stale-open-picks-batch-resolve.md",
        "link_url": null,
        "link_github_ref": "457"
      },
      {
        "incident_id": 45,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Silent: anti_overfit_audit 20d stale + walkforward by_class 6wk empty (|| non-fatal swallow)",
        "description": "anti_overfit_audit.json generated_at=2026-05-11 (~20d stale); dashboard_data.json::walkforward.by_class empty, sub-block generated_at=2026-04-15 (6wk). Both run hourly behind '|| echo non-fatal' so they fail silently -> per-strategy DSR table + OOS-divergence detector run on stale data.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "tools/anti_overfit_audit_sidecar.py + alpha_engine/walkforward_validator.py (audit-dashboard.yml)",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Remove the non-fatal swallow or alert on staleness; fix the underlying sidecar/walkforward failures.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #156 removes the silent `|| true` swallowing on anti_overfit_audit and walkforward CI steps so failures surface; addresses 20d-stale anti_overfit and 6wk-empty walkforward by_class.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:24:28",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #156"
      },
      {
        "incident_id": 38,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "torontoevent-forward-test.yml still on main referencing deleted forward_test.py",
        "description": "PR #113 was created to rename to .disabled but merge was blocked by branch conflict. The workflow still references STOCKS/competition/forward_test.py which does not exist on origin/main. Every run fails at python invocation step.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/torontoevent-forward-test.yml",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Re-attempt: git mv .github/workflows/torontoevent-forward-test.yml .github/workflows/torontoevent-forward-test.yml.disabled. Same disposition as PR #97.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #155 deletes the .yml.disabled orphan that referenced the removed forward_test.py module. Workflow no longer present on main.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #155"
      },
      {
        "incident_id": 39,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "AI Tournament snapshot race \u2014 recurring regression to 18/478 picks",
        "description": "During this session agents observed tournament data regressing from 40 models/3,873 picks back to 18 models/478 picks multiple times. Root cause: a peer merge_submissions_to_latest pipeline overwrites the agent-rebuilt JSON with stale data. Auto-restore works but root cause not fixed.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "tools/ai_tournament/rebuild_latest_from_db.py, alpha_engine/merge_submissions_to_latest.py",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Find and disable the peer pipeline that overwrites ai_tournament_picks_latest.json with stale snapshot. Or protect the agent-rebuilt JSON via exclusive lock / timestamp check.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #161 fixes the AI tournament snapshot race by stopping price_tracker from clobbering latest.json; eliminates the recurring 18/478 regression.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #161"
      },
      {
        "incident_id": 40,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "at_strategy_stats table has 0 rows \u2014 never populated",
        "description": "refresh_strategy_stats_mysql() landed in PR #91 (audit_trail/mysql_client.py) but is never called from any cron pipeline or workflow. The table remains empty. No feedback loop exists for strategy performance tracking.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit_trail/mysql_client.py, .github/workflows/",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Wire refresh_strategy_stats_mysql() into a cron workflow (audit-dashboard.yml or new hourly job). Also wire into at_strategy_stats consumption \u2014 verify which dashboard/audit components read this table.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. Wave-3 populated at_strategy_stats; verified live: SELECT COUNT(*) FROM at_strategy_stats = 175 (was 0). Table is now seeded and consuming downstream.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "wave-3 backfill"
      },
      {
        "incident_id": 35,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Bond Emitter workflow fails (FRED_API_KEY secret missing)",
        "description": "alpha-engine-bond.yml fails: pandas_datareader/fredapi missing + FRED_API_KEY not set. All FRED backends timed out at 30s.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/alpha-engine-bond.yml",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Operator: (1) Add FRED_API_KEY to GH secrets, (2) pip install pandas_datareader fredapi in the workflow, (3) Test with FRED test endpoint. BOND data is currently unavailable \u2014 Goal #6 BOND class analysis blocked.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "[RESOLVED 2026-05-31 04:36Z by claude-opus]: FRED_API_KEY secret rotated with fresh value provided by user. Secret was previously set 2026-05-24 (workflows green since then: bond-agent, etf-bond-scanner, fred-macro-refresh all SUCCESS daily). Today's rotation provides a clean key for any expiration concerns. Backup: ejaguiar1_backups.incident_overall_pre_fred_rotation_20260531.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 04:36:37",
        "resolved_at": "2026-05-31 04:36:37",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 36,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "DB Backups SMTP relay failure (550 relay not permitted)",
        "description": "db-backup-email.yml fails: SMTP rejected mail relay (550). Backup itself succeeds but notification fails.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/db-backup-email.yml",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Operator: provision SMTP creds on 50webs or switch to a working SMTP provider. Backup logic is correct; only the notification email fails.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 via PR #168 (merged 05:18Z) \u2014 db-backup-email.yml disabled broken SMTP send (gmail SMTP via outbound relay 550 not permitted). Workflow now skips email step gracefully. Wave-11 DB sync.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:21:10",
        "resolved_at": "2026-05-31 05:21:10",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#168"
      },
      {
        "incident_id": 37,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "15 residual NULL trust_score closed picks (strategies not in at_signal_outcomes)",
        "description": "After trust_score backfill (32,683 rows + 15,166 floored at trust=2), 15 closed trading_picks rows still have NULL trust_score for strategies that do not appear in any at_signal_outcomes source system. These are orphaned strategies with zero outcome history.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "trading_picks.trust_score",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Floor at trust=2 UNPROVEN (already done for majority). These 15 have no outcome history anywhere \u2014 cannot derive stats. Consider whether they should be excluded from HC overlay entirely or treated as UNPROVEN.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. tools/backfill_trust_score.py wave-1 backfilled 1,826 trust_score rows; verified live: SELECT COUNT(*) FROM trading_picks WHERE trust_score IS NULL = 0 (was 15 residuals). No remaining NULLs.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "wave-1 backfill"
      },
      {
        "incident_id": 33,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "dashboard_data.json 52h stale (fails 2h freshness gate)",
        "description": "As of 2026-05-31 02:30 UTC, dashboard_data.json generated_at=2026-05-28T21:29Z (age 52.5h). The money-maker-readyv2 freshness gate fails fast >2h. money_ready_verdict.json and pf_registry.json ARE fresh (2026-05-30T23:05Z) so the main verdict pipeline runs, but the dashboard_data.json regenerator (walkforward/asset_class_health/fwd_vs_bt_divergence) is lagging ~2 days.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/data/dashboard_data.json",
        "reported_by": "claude-opus-4.8(money-maker-readyv2)",
        "assigned_to": null,
        "recommended_fix": "Investigate the dashboard_data.json regeneration job; ensure it runs on the same cadence as money_ready_verdict.json.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: VERIFIED LIVE \u2014 curl https://findtorontoevents.ca/audit/data/dashboard_data.json shows last-modified 2026-05-31 04:01 UTC (1.5h fresh, well under 2h freshness gate). audit-dashboard.yml cron runs hourly success. File is gitignored locally; regeneration + FTP deploy is functioning.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:43",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": "2026-05-31 05:28:36",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 31,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "ma_strategy_leaderboard.json is 44h stale AND empty (total_variants=0)",
        "description": "audit_dashboard/data/ma_strategy_leaderboard.json generated_at=2026-05-29T05:27:24Z (~44h stale) with leaderboard=[]. This is the MA Strategy Forward-Tracker v2 output (PR session 2026-05-29). Either the periodic cron is not wired, or tools/ma_strategy_forward_tracker.py is crashing silently.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "tools/ma_strategy_forward_tracker.py + ai_leaderboard.html consumer",
        "reported_by": "claude-opus-4-7-desktop",
        "assigned_to": null,
        "recommended_fix": "Wire ma_strategy_forward_tracker.py into a periodic cron (weekly is fine \u2014 strategy survey, not per-pick). If the empty-leaderboard is intentional (no golden cells passed gate), document that explicitly on the page so it does not look broken.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #163 wires ma_strategy_forward_tracker into the hourly cron workflow, fixing the 44h-stale empty leaderboard. Verification: ma_strategy_leaderboard.json now refreshed by scheduled run; see commit chain in PR #163.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:03",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:01:50",
        "resolved_at": "2026-05-31 05:01:50",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #163"
      },
      {
        "incident_id": 19,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "IPO asset class advertised as 'tracked' on /audit but has zero coverage",
        "description": "/audit lists IPO as one of the tracked asset classes but the codebase has zero IPO-specific strategy or pick writer. 1/3 swarm REAL + 2/3 NOISE \u2014 added at P2 because the UI advertises the class and the user-facing claim is misleading even if low impact.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard tab listing / IPO scanner (missing)",
        "reported_by": "opencode/ring-2.6-1t + 1/3 swarm",
        "assigned_to": null,
        "recommended_fix": "Either (a) remove the IPO claim from the UI until a writer exists, or (b) build a minimal IPO scanner using the PEAD framework adapted for lockup expiry + insider selling + revenue trajectory.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Inspected 2026-05-31 by peer_claude (subagent). Claim that /audit advertises IPO as a tracked asset class is incorrect on inspection: audit_dashboard/template.html only lists CRYPTO/EQUITY/COMMODITY/ETF/FOREX/BOND. IPO is referenced only in hedge_fund_simulation_20260524.html where it is explicitly labelled ZERO DATA / INFRASTRUCTURE NOT BUILT (correct gap disclosure, not an advertisement). Original swarm consensus was 2/3 NOISE; the override rationale assumed a UI tab that does not exist. No UI change required. See reports/peer_claude-ipo-claim-removal_2026-05-31.md and PR #150.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:51:47",
        "date_est": "2026-05-24",
        "time_est": "23:51",
        "updated_at": "2026-05-31 04:13:26",
        "resolved_at": "2026-05-31 04:13:26",
        "link_md_path": "reports/2026-05-25_opencode_session_deep_scan.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": "PR #150"
      },
      {
        "incident_id": 12,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "56,559 ghost rows in trading_picks (top cohort: 20,474 identical MATICUSDT entries)",
        "description": "ghost_rows audit: 12 cohorts with thousands of identical (asset_class, strategy, symbol, direction, pnl_pct) rows. Top: CRYPTO/quan_engine/MATICUSDT/LONG/pnl=-15.0 with n=20,474 from 1 distinct entry. MEMECOIN/meta_strategy variants make up the next 10. This single cohort alone is dragging quan_engine_scalp stats to PF 0.42 / WR 37%.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "trading_picks ghost-row write path",
        "reported_by": "qwen-code",
        "assigned_to": null,
        "recommended_fix": "DEDUP via (asset_class, strategy, symbol, direction, pnl_pct, created_at) where distinct_entries=1 and n>50. Investigate the writer that's emitting the duplicates. quan_engine + meta_strategy are the top offenders.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Workflow-verified FIXED (wf_3c3cdc16, 2026-06-10): live query returns 0 ghost cohorts at the incident's threshold; the 20,474-row MATICUSDT cohort is 0; uq_trading_picks_dedup UNIQUE index live prevents recurrence. Row already carried resolved_at=2026-05-31. (bt_backtest_trades ghosts are a separate table/scope.)",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-10 18:39:48",
        "resolved_at": "2026-05-31 02:01:51",
        "link_md_path": "audit_dashboard/data/db_health.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 14,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "UNKNOWN asset_class on 951 active + 54 closed picks",
        "description": "Category is NULL/UNKNOWN for 951 active picks (~10% of active set) and 54 closed (35.2% WR). UI can't apply per-class gates to UNKNOWN rows. Cross-class stats undercount these.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "trading_picks.category writer / classifier",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Backfill UNKNOWN rows using symbol pattern matching (USDT/BTC suffix -> CRYPTO; =X suffix -> FOREX; etc.). Add a classifier guard at write time.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Backfilled 134 unknown-category picks via symbol pattern matching (crypto/etf/equity/forex). Zero remaining.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:29:38",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 1,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "trust_score NULL on 99.99% of closed picks",
        "description": "trading_picks.trust_score is NULL on 38,884 of 38,889 closed picks. HC overlay requires trust_score>=4 (CRYPTO) / >=5 (EQUITY). Cited CRYPTO 60.3% N=562 and EQUITY 68.1% N=72 stats unreproducible \u2014 only 5 closed picks have a non-NULL trust_score.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "trading_picks.trust_score / audit_dashboard/hc_filter.js",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Backfill trust_score from strategy registry OR move HC gate to a field that IS populated (elite_score / derived TRUST tier). Or mark HC overlay UNVERIFIABLE on UI until backfill lands.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Re-verified 2026-06-04: trust_score NULL on 727/2352 closed picks = 30.91% (was 99.99% \u2014 69pp improvement). Most sources now populate trust_score. Remaining 30% likely from legacy ingestion paths that don't compute the score. Downgrade P0\u2192P2; recommend follow-up to identify which source_systems leave it NULL.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-04 09:38:24",
        "resolved_at": "2026-05-31 01:47:30",
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 107,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Wire-Up Rule: failover modules feed only the price-fill path, not score/gate functions",
        "description": "Per the repo Wire-Up Rule grep: `grep -rln forex_price_failover|commodity_price_failover alpha_engine/ tools/ audit_trail/` returns only the two modules + universal_price_enricher.py. The enricher IS in the production path (imported by production_scanner.py and run by .github/workflows/alpha-engine-live.yml:338), so the rule's condition #1 is met transitively. However these modules touch current_price/pnl/closure, not calculate_smart_score / passes_active_gate / score_pick directly. That is appropriate for a price source, but reviewers should know the failover output flows into the AUDIT WR/PF numbers through PnL + auto-closure, not through scoring \u2014 so price-quality bugs here are an audit-integrity risk, not a scoring risk.",
        "severity": "P3",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "No code change required for the rule. Document in the module docstring that failover prices feed PnL + TP/SL closure (audit numbers), and that FRED/ECB proxy sources must be display-only per the P1/P2 fixes above.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.92, \"review_evidence\": \"grep result: alpha_engine/{forex,commodity}_price_failover.py + universal_price_enricher.py only; enricher consumed at .github/workflows/alpha-engine-live.yml:338 and imported in alpha_engine/production_scanner.py\", \"verify_evidence\": \"Grep `grep -rln \\\"forex_price_failover|commodity_price_failover\\\" alpha_engine/ tools/ audit_trail/` returns exactly the 3 claimed files: alpha_engine/forex_price_failover.py, alpha_engine/commodity_price_failover.py, alpha_engine/universal_price_enricher.py. The enricher imports both failover modules at universal_price_enricher.py:217-218 (`from alpha_engine.forex_price_failover import fetch_forex_rate` / `commodity_price_failover import fetch_commodity_price`). The enricher IS in the production path: run by .github/workflows/alpha-engine-live.yml at the \\\"Universal Price Enricher\\\" step (`run: python alpha_engine/universal_price_enricher.py`, ~lines 335-339; claim's \\\"338\\\" is the run line, accurate enough). Failover output flows into PnL/closure NOT scoring: universal_price_enricher.py:415 sets pick[\\\"current_price\\\"]=live_price, :427 sets pnl_pct, :477-500 marks TP_HIT/SL_HIT and status=\\\"CLOSED\\\"+exit_price. None of the three modules reference calculate_smart_score / passes_active_gate / passes_smart_gate / score_pick (grep exit 1). No scoring/gate file imports the failover modules (inner-loop grep over all calculate_smart_score/score_pick files = empty). One additional grep hit, alpha_engine/multi_asset_test_portfolios.py, is a SUBSTRING FALSE POSITIVE: it defines its own local `fetch_commodity_prices()` (plural) at line 543 with no failover import (grep for failover import = exit 1) \u2014 not a real consumer. DB-flow confirmed: enricher writes active_picks.json/closed_picks.json (:4\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:01",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 102,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Summary table renders concrete PF up to 4.67 / WR up to 75% on n=2-4 samples",
        "description": "The Model-Summary table shows full PF/WR cell values for statistically meaningless samples: gpt4o_mini PF 4.67 on n=4, claude_opus PF 3.88 on n=2, fireworks_qwen 75.0% WR / PF 2.25 on n=4, nvidia_minimax_m2 PF 1.71 on n=2, alpha_engine PF 1.82 on n=2. The only mitigation is an amber color + '\u26a0' glyph and a tooltip on the *resolved-count* cell (template line 924); the PF and WR cells themselves carry no low-n warning and PF even gets the green 'pnl-pos' class at >=1.5. A casual reader sees a green PF 4.67 and 75% WR.",
        "severity": "P3",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "For rows with resolved<MIN_N_TO_RANK, gray out (force pnl-neu) the PF and WR cells, append '~' or show them as 'PF \u2014 (n=4)', and never apply the green pnl-pos class below n=30. Optionally render PF as a dash with the raw value only in the tooltip below the floor.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"ai_tournament_model_summary.json: gpt4o_mini {resolved:4, win_rate_pct:50.0, pf:4.67}, claude_opus {resolved:2, pf:3.88}, fireworks_qwen {resolved:4, win_rate_pct:75.0, pf:2.25}. Template lines 917 (wrClass colored) and 922 (pfClass m.pf>=1.5?'pnl-pos') apply positive coloring regardless of n.\", \"verify_evidence\": \"Data confirmed in audit_dashboard/data/ai_tournament_model_summary.json: gpt4o_mini {resolved:4, win_rate_pct:50.0, pf:4.67}, claude_opus {resolved:2, pf:3.88}, fireworks_qwen {resolved:4, win_rate_pct:75.0, pf:2.25}, nvidia_minimax_m2 {resolved:2, pf:1.71}, alpha_engine {resolved:2, pf:1.82} \u2014 all 5 cited values match exactly.\\n\\nRendering code confirmed, but in audit_dashboard/ai-tournament.html (NOT template.html as the claim states). The line numbers cited (917, 922, 924) are correct for ai-tournament.html:\\n- Line 917/923 (PF cell): `pfClass = !hasPf ? 'pnl-neu' : (m.pf >= 1.5 ? 'pnl-pos' : m.pf < 1.0 ? 'pnl-neg' : 'pnl-neu')` \u2014 applies green pnl-pos at PF>=1.5 with NO n-guard. So gpt4o_mini 4.67/n=4, claude_opus 3.88/n=2, fireworks_qwen 2.25/n=4 all render green.\\n- Line 912/922 (WR cell): `wrClass = ... m.win_rate_pct >= 55 ? 'pnl-pos'` \u2014 green at WR>=55 with NO n-guard. fireworks_qwen 75%/n=4 renders green.\\n- Line 924 (Resolved cell): the ONLY cell with low-n mitigation \u2014 amber `color:#f59e0b` + ` \u26a0` glyph + tooltip when `m.resolved < 30`.\\n\\ntemplate.html line 924 (the claim's stated location) is actually the unrelated CRYPTO disputed-banner JS function \u2014 the claim misattributed the file.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 47,
        "asset_class": "OVERALL",
        "source_ref": "gemini-304k-claim",
        "title": "at_local_picks 304k duplicates claim NOT_REPRODUCED",
        "description": "Peer claim alleged ~304,000 duplicate rows in ejaguiar1_stocks.at_local_picks. Re-ran tools/at_local_picks_dedup.py (dedup key: symbol+direction+source_system+signal_timestamp) on 2026-05-31 02:49 UTC: table holds 37,763 rows total with 0 duplicate groups. Claim does not reproduce \u2014 likely confused dataset/table or stale snapshot. Logging as P3 NOT_REPRODUCED for posterity.",
        "severity": "P3",
        "status": "RESOLVED",
        "affected_component": "at_local_picks",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "None required \u2014 claim not reproduced. If the claim resurfaces, ask for the exact dedup key and table size at the time of measurement before re-running.",
        "target_release": null,
        "evidence": "{\"tool\": \"tools/at_local_picks_dedup.py\", \"verdict\": \"NOT_REPRODUCED\", \"dedup_key\": \"(symbol, direction, source_system, signal_timestamp)\", \"total_rows\": 37763, \"prior_claim\": \"Gemini-attributed 304k duplicate rows in at_local_picks\", \"dry_run_ts_utc\": \"2026-05-31T02:49:58Z\", \"prior_claim_ref\": \"gemini-304k-claim\", \"duplicate_groups\": 0, \"extra_rows_to_delete\": 0}",
        "resolution_notes": "Investigation: reports/at_local_picks_dedup_investigation_2026-05-31.md. Live dry-run shows 37,763 rows, 0 dupes; 304k duplicates claim retracted.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:50:29",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 02:50:29",
        "resolved_at": null,
        "link_md_path": "reports/at_local_picks_dedup_investigation_2026-05-31.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 41,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "at_signal_outcomes SL_HIT rows have 24% with positive pnl_pct (labeling inconsistency)",
        "description": "24,363 SL_HIT rows in at_signal_outcomes: 18,511 have pnl<0 (correct) but 5,852 (24%) have pnl>0 \u2014 a stop-loss hit that made money is contradictory. Likely entry_price/exit_price stored with different sign conventions across sources.",
        "severity": "P3",
        "status": "RESOLVED",
        "affected_component": "at_signal_outcomes",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Investigate source_system breakdown: which engines produce SL_HIT+pnl>0? Decide whether to reclassify these as TP_HIT or normalize the sign convention.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 (claude-opus-4-8): the '24% SL_HIT positive' claim was stale. Live at_signal_outcomes had only 7/30228 (0.023%) SL_HIT with pnl>0. Root cause: 2 cross-asset price-corruption rows (garbage exit_price, same as #48) -> neutralized to RESOLVE_FAILED w/ NULL exit/pnl; 5 were profitable exits mislabeled SL_HIT (incl. inverted-stop SHORTs) -> reclassified TP_HIT. 0 SL_HIT-positive remain. Backup: ejaguiar1_backups.at_signal_outcomes_slhit_positive_pre_fix_20260531.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 20:18:53",
        "resolved_at": "2026-05-31 20:18:53",
        "link_md_path": "reports/incident_overall_41_sl_hit_positive_pnl_triage_2026_05_31.md",
        "link_url": null,
        "link_github_ref": "PR#164 eltonaguiar/findtorontoevents_antigravity.ca"
      }
    ],
    "STOCKS": [
      {
        "incident_id": 7,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "~90% of EQUITY picks mistagged as crypto \u2014 corrupts all EQUITY verdicts",
        "description": "FIRING13 report: 198/218 'EQUITY' symbols are mistagged crypto -> real EQUITY n~=20 not 39. Every EQUITY number (n=39 verdict, db_raw 90d PF 5.555 DISPUTED, 48h panel) is unreliable until tagging fixed. Same EXPIRED->WON leakage family as the disputed CRYPTO 78.9%.",
        "severity": "P0",
        "status": "RESOLVED",
        "affected_component": "asset-class tagging in pick pipeline (see reports/continual_research/6gate_validation/FIRING13_VT_PATTERN_SWEEP_EQUITY_SUBREPORT_2026-05-21.md)",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Fix asset_class tagging so real-EQUITY symbol share >=95% in resolved cohort; re-run money_ready_verdict.",
        "evidence": null,
        "resolution_notes": "PR #147 merged 2026-05-31: replaced hardcoded category='crypto' at 6 sites in prediction_market_whales.py / polymarket_merger.py / slippage_model.py / backfill_ohlcv_features.py + defense-in-depth at mysql_trading_sync.py:259-272. 105 mistagged rows backfilled to equity (predicate matched 67 actual-crypto symbols incorrectly; partial rollback restored those via stocks__trading_picks_stocks_7_backfill_20260531 backup). Status IN_PROGRESS pending operator verification of rollback completeness.\n[2026-05-31 wave10] PR #166 merged \u2014 residual mistag backfill (19 rows fixed); writeup in PR body.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:24:28",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:18:42",
        "resolved_at": "2026-05-31 05:18:42",
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 6,
        "asset_class": "Stocks",
        "source_ref": null,
        "title": "EQUITY emission unlocked (1,424 outcomes) but all strategies PROBATION-tier (trust_score=3)",
        "description": "at_signal_outcomes EQUITY surged 169\u21921,424 after PR #121 + live DB backfill. But 0 EQUITY picks meet HC overlay gate (trust>=5). WR=42.1%, PF=0.39 \u2014 class is still deeply losing. Goal #1 EQUITY acceptance (>=1000 outcomes) MET but no statistically-valid edge exists yet.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "at_signal_outcomes, alpha_engine/equity strategies",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Build or rewire EQUITY strategies that produce profitable picks. Current picks come from PROBATION-tier strategies (trust=3). Need WR>=50% + PF>=1.5 on n>=100 to reach T2. Investigate: are existing EQUITY strategies (pead_equity, us_equity_screener, etc.) wired into the MySQL write path?",
        "evidence": null,
        "resolution_notes": "OPERATOR-PENDING: EQUITY strategy rebuild. All current emitters are PROBATION-tier (trust_score=3). Path-A: tune existing 4 strategies (regime_accumulation, etc.) via mutation protocol. Path-B: import a proven EQUITY edge (e.g. QMOM, Faber TAA). Path-C: shadow + scale once one reaches WR>=50/PF>=1.5 on n>=100. Operator should select Path A/B/C.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:39",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 1,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "PEAD equity strategy stuck in shadow mode",
        "description": "The only WF-VERIFIED equity strategy (62.2% OOS WR on 2-day window) is the new pead_equity, but it never made it past shadow. Meanwhile the broken earnings_drift (0% WR on 92 picks) was active in prod.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine/pead_equity (shadow mode)",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Promote pead_equity from shadow -> probation. Document wire-up in updates/ per the Wire-Up Rule.",
        "evidence": null,
        "resolution_notes": "PEAD equity strategy promoted from shadow to probation in non_crypto_policy.py (PR4, allow_without_forward=True). Wired in production_scanner.py via strategies.pead_equity.generate_pead_signals(). Has dedicated tests (test_pead_shadow_runner.py, test_equity_pead_strategy.py).",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:51:52",
        "target_release": "2026-06-01 17:00 EST",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 15,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "picks-now regime guard reads market_regime (intraday-rebounding) not risk_off_explanation (authoritative) \u2014 under-fires on falling knives",
        "description": "MiniMax finding CONFIRMED live 2026-06-13: picks_now.json shows market_regime='NEUTRAL' AND risk_off_explanation='Market appears RISK-OFF (recent 5d declines across SPY/QQQ/BTC)' simultaneously \u2014 they disagree. The regime variable (picks_now_professional.py:1410) is a 5d-return 2-state classifier that REBOUNDS intraday; the explanation text is the conservative/authoritative source per file convention. On the 2026-06-12 cohort the guard read NEUTRAL and did NOT demote 7 mega-cap STRONG_BUYs (ORCL/NVDA/ZM/MSFT/META/AVGO/WMT) \u2014 the exact falling-knife failure the P0-2 regime gate was meant to fix. CORRECTS my earlier 'P0-2 VERIFIED' note: the gate is WIRED but keys off the wrong field, so it under-fires.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/picks_now_professional.py",
        "reported_by": "claude-fable-review",
        "assigned_to": null,
        "recommended_fix": "When market_regime disagrees with risk_off_explanation, trust the conservative signal (demote). Simplest: derive the guard's regime from the same condition that builds the explanation, OR make the guard fire if EITHER says risk-off. File is contested (pro-level-batch + minimax worktrees editing it) \u2014 route to whoever lands the next picks_now PR; do not double-edit.",
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-13 03:41:05",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-13 03:41:05",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 14,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "picks-now dividend yield double-multiplied (yfinance *100) \u2014 impossible yields + corrupted ranking",
        "description": "tools/picks_now_professional.py yfinance path did div_yield *= 100, but yfinance already returns dividendYield as a percent-like value (GOOGL 0.24=0.24%). Live picks-now.html showed GOOGL 24%, SBUX 262%, PLD 300%, and the >3 score gate handed a spurious +5 bonus to 14 of 20 picks, corrupting rank ordering.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "tools/picks_now_professional.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Removed the *100 scale on the yfinance primary path (FMP fallback fixed separately by peer); div_yield used as-is.",
        "evidence": null,
        "resolution_notes": "Scoped + adversarially verified via workflow wxvpxigh2; committed 6053b3ebb7 2026-06-09.",
        "duplicate_of": null,
        "created_at": "2026-06-09 04:19:57",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 04:19:57",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": "reports/picks_now_quality_audit_2026-06-09.md",
        "link_url": "https://findtorontoevents.ca/audit/picks-now.html",
        "link_github_ref": "6053b3ebb7"
      },
      {
        "incident_id": 13,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "stocks_rsi2_pullback emission stopped 2026-05-29 \u2014 8+ days dark, edge lost",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "claude-code",
        "assigned_to": null,
        "recommended_fix": "Re-add stocks_rsi2_pullback to production_scanner.py dispatch \u2014 removed 2026-05-28 (line 488), config.py un-kill 2026-05-31 never restored caller. Validated 30d: WR=58.8% PF=2.68 n=894 dedup-clean.",
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 13:21:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 13:21:32",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 12,
        "asset_class": "EQUITY",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Top pick AMZN (Score 133, 6/7 AI APPROVE) hides a true DB record of 3W/34L (8.1%)",
        "description": "AMZN is the page's #1 headline pick (highest score, 6/7 models approve, 'classic TREND+DIP'). But its own at_pick_outcomes resolved record is WON=3, LOST=34 (8.1% WR excl EXPIRED). The card surfaces analyst consensus, Piotroski, Altman-Z but NOT the catastrophic internal hit-rate, because the dbVal chip only renders when db_n>=3 and the messaging never warns when db_wr is terrible. Presenting a 3-of-37 historical loser as the strongest 'what to buy now' pick is misleading even under a research-only banner.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Surface the resolved DB WR on every card (not just when >=55%) and add a red 'DB hit-rate poor (n)' badge when db_wr<40% with db_n>=10. Down-weight the multi-factor score by the DB-edge overlay when the symbol's own history is a strong negative, or at minimum show it prominently.",
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"DB: AMZN WON=3 LOST=34 EXPIRED=31. Page: AMZN Score 133, R:R 2.8:1, '6/7 APPROVE'. NVDA WON=3 LOST=7 (30%); the disputed-ranked NVDA actually has a better internal record than the top-ranked AMZN.\", \"verify_evidence\": \"DB (at_pick_outcomes, symbol='AMZN'): WON=3, LOST=34, EXPIRED=31, FLAT=3 \u2192 3/37 = 8.1% resolved WR. NVDA: WON=3, LOST=7 (30%), EXPIRED=57. Exactly matches the claim's numbers.\\n\\nPage side: audit_dashboard/data/picks_now.json \u2014 AMZN is the #1 pick (rank_in_class=1.0, score=133.0, top of the 20-pick array, direction=STRONG_BUY, signals='TREND+DIP 3m=15% | RSI=38 ...'). audit_dashboard/picks-now.html:1046 TALLY['AMZN']={approve:6,caution:1,reject:0} \u2192 line 992 renders green '\u2705 AI CONSENSUS \u2014 6/7 models approved' banner. Matches 'Score 133, 6/7 APPROVE, classic TREND+DIP'.\\n\\nKEY FINDING (strengthens claim): The pick's db_n is 5 / db_wr 20.0, NOT the full 37-trade record. tools/picks_now_professional.py:305-316 queries at_pick_outcomes with GROUP BY symbol, asset_class then keys the dict by symbol.upper() only (line 323), so the last asset_class group overwrites prior ones. AMZN's records are fragmented across asset_class values: EQUITY 1W/4L (n=5, 20%), UNKNOWN 2W/28L (n=30, 6.5%), STOCK 1L, STOCKS 1L. The card surfaces the n=5 EQUITY fragment and DROPS the dominant UNKNOWN n=30 bucket \u2014 so the true 8.1% disaster is understated, not just hidden.\\n\\nCard rendering: picks-now.html:961/1014 \u2014 a '\ud83d\udcda DB' chip renders when db_n>=3, so AMZN DOES show '20% WR (n=5)'. But the score logic (picks_now_professional.py:560-567) only ADDS points for db_wr>45/55 with db_n>=20; there is NO penalty for poor WR and NO red warning badge. The eli5 narrative only mentions DB when db_wr>50 & db_n>=20 (posit\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 11,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Hermes/Nemotron-3-Super backupless trading_picks mutation 2026-06-05T05:30Z",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "tools/mysql_stale_picks_resolver.py + raw SQL UPDATE",
        "reported_by": "claude-opus-4-7 MD-review-loop",
        "assigned_to": null,
        "recommended_fix": "Document that ~250 status renames + ~9 LOSS->WIN outcome flips were applied without pre-snapshot to ejaguiar1_backups. Audit policy: any future status mutation requires archive_table_slice to ejaguiar1_backups.trading_picks_pre_<reason>_<UTC> first. Hermes ran: (1) UPDATE LOSS->WIN where pnl_pct>0.01 ('for constraint compliance' \u2014 flips pick outcome), (2) WIN->WON bulk rename (113), (3) LOSS->LOST bulk rename (117). Forex symbol fix in mysql_stale_picks_resolver.py is fine; raw SQL outcome-flip is the policy violation.",
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-05 05:39:09",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-05 05:39:09",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 5,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Penny/meme names still pollute the main EQUITY sleeve",
        "description": "Research and backtest evidence is concentrated in cleaner large-cap equity universes, but live EQUITY still carries penny/meme contamination. This distorts both edge claims and gate calibration for the parent class.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/config.py EQUITY universe / live EQUITY routing",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Split LARGE_CAP_EQUITY from PENNY research-only names and report them separately. Do not let speculative names share the same production quality story as the large-cap sleeve.",
        "evidence": null,
        "resolution_notes": "Split EQUITY universe: config.py detect_asset_class() now routes symbols with eq_info['cat'] in ('penny','meme') to return 'penny' instead of 'equity'. RESEARCH_ONLY_SPECULATIVE_SYMBOLS + LARGE_CAP_EQUITY_SYMBOLS already existed as config filters; this closes the classification gap.",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:07",
        "resolved_at": "2026-05-31 02:52:04",
        "target_release": "2026-06-05 17:00 EST",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "US Equity screener emits zero picks",
        "description": "The /audit/ueps tab is rendered (n=0/100 disclaimer shown) but no picks have ever been emitted. Composite (Magic Formula x Piotroski x Acquirer's Multiple x SafetyGate) is documented but has no live writer.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine equity scanner / US Equity Picks tab",
        "reported_by": "claude-opus-4-7+ring",
        "assigned_to": null,
        "recommended_fix": "Wire the UEPS composite to a weekly scanner. First emit can be sample/seed to validate plumbing end-to-end.",
        "evidence": null,
        "resolution_notes": "RESOLVED 2026-05-31 by peer_claude. PR #159 sets source_system default='ueps' for UEPS pick emission path; US Equity screener now emits non-zero picks.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:01:50",
        "target_release": "2026-06-08 17:00 EST",
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": "https://findtorontoevents.ca/audit/#ueps",
        "link_github_ref": null
      },
      {
        "incident_id": 3,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "EQUITY production scanner may not be routed",
        "description": "code grep found no _run_equity_scanner or similar routing function in production_scanner.py main loop. Strategies (connors_rsi2, quality_compounders, equity_momentum_regime, pead_equity) exist in code but may never be called.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py main loop",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Add explicit per-class routing functions; verify each documented strategy is reachable from main(). Add a smoke test.",
        "evidence": null,
        "resolution_notes": "Wave-12 recon: Wave-7 verified routing intact (production_scanner.main \u2192 forward_validator.run_generation \u2192 scanner.run_strategies(strategy_filter='all') \u2192 EQUITY_STRATEGIES). production_scanner.py:3563-3644 has DOCUMENTED_EQUITY_STRATEGIES + smoke-test entry point. No additional code change needed. | PR #277 verbatim refutation (tick 34): routing_gap=false, EQUITY routes via production_scanner.py:2070; un-kill of stocks_rsi2_pullback merged 20:46Z; 262 picks last 7d confirm pipeline live. | PR #277 tick-34 refutation: routing_gap=false, EQUITY routed via production_scanner.py; stocks_rsi2_pullback un-killed 20:46Z; 262 picks/7d confirm live.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:28:35",
        "target_release": "2026-06-10 17:00 EST",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 10,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "EQUITY production FAIL \u2014 tournament symbol picks WEAK",
        "description": "Swarm: deepseek_v4/gpt4o tournament SUPPORT for paper; BAC/JPM/MSFT/NVDA equity picks WEAK. EQUITY class FAIL+INSUFF-N in money_ready (PF ~0.90, WR ~33%, n=33). Production scanner routing unproven.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py / audit/ai-tournament.html",
        "reported_by": "cursor-composer-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Keep EQUITY on paper/tournament track; fix routing + n before probation; no production size-up.",
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:30",
        "resolved_at": null,
        "target_release": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": null
      }
    ],
    "ETFS": [
      {
        "incident_id": 3,
        "asset_class": "ETF",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "ETF 90d WR 8.0% and INDEX 100% (n=2) shown without small-sample / quality caveat",
        "description": "The 90d table shows ETF WR 8.0% (win 2 / loss 23) and INDEX WR 100.0% (win 2 / loss 0, n=2). INDEX 100% on n=2 is a small-sample artifact and ETF 8% is catastrophic; neither carries an on-page INSUFF-N or quality flag, and the WebFetch summary even mis-narrated INDEX as a 'top performer' (perfect 100%). This is exactly the kind of unguarded cell that produced the original 78.9% dispute.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Apply the same small-n / INSUFF-N badge logic used elsewhere on /audit (n<20 or n<100 thresholds) to the 90d funnel table cells, and grey-out / footnote WR for classes with decisive n below the per-class floor so a 2-trade 100% INDEX cell cannot be read as an edge.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"Live JSON funnel_by_class: ETF scanned 404/closed 348/win 2/loss 23/WR 8.0; INDEX scanned 488/closed 427/win 2/loss 0/WR 100.0; BOND win 5/loss 15/WR 25.0; PENNY win 0/loss 3/WR 0.0; FUTURES win 4/loss 18/WR 18.18.\", \"verify_evidence\": \"Live JSON https://findtorontoevents.ca/audit/data/pick_funnel_90d.json (generated_at 2026-06-06T05:19:24Z) matches the claimed evidence EXACTLY: ETF scanned 404/closed 348/win 2/loss 23/decisive 25/wr 8.0; INDEX scanned 488/closed 427/win 2/loss 0/decisive 2/wr 100.0; BOND win 5/loss 15/wr 25.0; PENNY win 0/loss 3/wr 0.0; FUTURES win 4/loss 18/wr 18.18. (The local working-tree copy audit_dashboard/data/pick_funnel_90d.json is a stale Jun-3 snapshot showing ETF 3/13 and FUTURES 2/16 \u2014 the reviewer correctly used live data.) The renderer audit_dashboard/pick_funnel.html:449-466 render90dTable() prints each cell as bare `${b.wr_pct!=null?b.wr_pct+'%':'\u2014'}` (line 464) with NO Bayesian shrinkage, NO INSUFF-N badge, NO decisive-n floor, and not even a WR color class. By contrast the page DOES own this machinery and applies it elsewhere: line 727 `INSUFF-N (n=${b.n_decisive})` in _wrPrimaryCell (used by 48h/14d recency tables, per line 318 'Cells with n<10 decisive trades show INSUFFICIENT n'), shrinkage tooltips (lines 489-490), and the nav-surface matrix small_n why_no_edge logic (line 184). So the 90d funnel table is the one surface that renders raw WR for tiny-n cells (INDEX n=2 \u2192 100%, ETF n=25 \u2192 8%) with no guard.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "EAGLE2: Live ETF policy-clean n=3 \u2014 sleeve stats not promotable from symbols",
        "description": "money_ready ETF INSUFFICIENT_DATA (n=3). Tournament symbols EEM/IWM/GLD show paper WR but cherry-pick \u2260 sleeve. Lab etf_verified_dual_momentum is FORWARD_PILOT_ONLY (WF PASS).",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "verified_strategies/strategies/etf_dual_momentum.py",
        "reported_by": "grok-cli-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Promote sleeve-level dual momentum only; ignore single-symbol tournament cells until forward n\u226530 then 100 on pilot book.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:04",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE_SWARM_SYNTHESIS_2026-06-02.md",
        "link_url": null,
        "link_github_ref": "PR #458"
      },
      {
        "incident_id": 1,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "All 5 ETF strategies on probation with ZERO verified forward trades",
        "description": "etf_dual_momentum, etf_sector_momentum, etf_risk_parity_rotation, etf_faber_tactical, etf_trend_following all allow_without_forward=True. No track record.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "alpha_engine ETF strategies / config",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Pick one (etf_faber_tactical has strongest academic backing per Ring) and graduate to probation with a real forward floor. Document promotion path.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31 PR #106 ETF deep-dive landed on main and is the operator-visible position. Findings: ETF class has only n=4 policy-clean closed picks, etf_scanner emitted 2 energy ETFs (XLE -4.17%, USO -2.00%) into a falling-oil regime contributing all losses. Hard rule: no >=1% NAV sizing until n>=100, PF>=1.5, single-strategy HHI<=0.30. Marked IN_PROGRESS because operator action required to pick + promote etf_faber_tactical OR add WTI macro gate to etf_scanner. Recommended_fix promotion path documented in reports/deep_dive_ETF_2026-05-31.md.\n[2026-05-31 wave10] PR #165 merged \u2014 promotion path documented in updates/2026-05-31-etf-promotion-path.md (Faber TAA graduation floor).",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:18:42",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      }
    ],
    "CRYPTO": [
      {
        "incident_id": 13,
        "asset_class": "CRYPTO",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "CRYPTO directional bug: production emits LONG (33% WR) when SHORT edge is 67% WR",
        "description": "CRYPTO directional bug: production emits LONG (33% WR) when SHORT edge is 67% WR",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Flip CRYPTO emission default to SHORT or invert at scanner. EAGLE-4 minimax-m3-free claims fix landed; needs verification.",
        "target_release": null,
        "evidence": "{\"source\": \"zoo EAGLE2 summary 2026-06-02\", \"long_wr\": 0.33, \"short_wr\": 0.67, \"current_pf\": 0.61, \"post_flip_pf_estimate\": 2.5}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE_SWARM_SYNTHESIS_2026-06-02.md",
        "link_url": null,
        "link_github_ref": "PR #439 (Pillar 1 freeze landed)"
      },
      {
        "incident_id": 23,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "VALIDATED: CRYPTO LONG is the book's biggest PnL leak (WR 30.1%, sum -508.6%, PF 0.684, n=1051 intrabar) \u2014 P0C direction block execution-ready",
        "description": "Direct-SQL validation 2026-06-12 of BUFFY_STRATEGY_AUDIT_JUNE122026.MD headline (numbers match to the decimal). at_signal_outcomes intrabar TP/SL CRYPTO: LONG n=1051 WR 30.1% sum=-508.6% PF 0.684; SHORT n=104 WR 55.8% PF 1.359 \u2014 SHORT survives time-split (H1 1.03 / H2 1.74) AND symbol-day dedup (n_eff 83, 57.8%, PF 1.41 = T2-shaped, not yet T2). Code route verified: CRYPTO_BLOCKED_DIRECTIONS config.py:490 currently frozenset({BUY}) \u2014 M-036 label gap means live LONG picks bypass it; BLOCKED_DIRECTION_TRIPLES + M-110 gate already wired in quality_gates.py.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/config.py",
        "reported_by": "claude-fable-mdreview",
        "assigned_to": null,
        "recommended_fix": "Execute docs/plans/2026-06-12-P0C-m036-long-gate-plan.md: add LONG/STRONG_BUY to CRYPTO_BLOCKED_DIRECTIONS, SIZED-lane-only with forward_test_only/shadow exemption (REQUIRED \u2014 else starves rsi5070 + handoff forward checkpoints). Route through the gate layer, NOT production_scanner (BUFFY cross-ref). CRYPTO SHORT continues as forward-confirm candidate.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-12 18:23:21",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-12 18:23:21",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 21,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "ml_strategy_reviver + inverse both lose on honest intrabar (PF 0.83/0.69) \u2014 geometry-structural; M-105 quarantine defaults OFF",
        "description": "ML audit 2026-06-12: reviver emits 76 picks/7d; both the strategy AND its inversion lose on intrabar (PF 0.83 n=470 / 0.69 n=221) \u2014 structural TP/SL-geometry+cost failure, not direction. ML_ENHANCED_CRYPTO_QUARANTINE (money_ready_verdict.py:84) still defaults OFF.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "ml_strategy_reviver",
        "reported_by": "claude-fable-mlaudit",
        "assigned_to": null,
        "recommended_fix": "Mutate-before-kill: geometry repair trial in replay; default-ON the M-105 quarantine meanwhile.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "CORRECTION 2026-06-12: ML_ENHANCED_CRYPTO_QUARANTINE is ALREADY '1' in the production verdict pipeline (audit-dashboard.yml:528) \u2014 code default is OFF but the operative path enforces it. Remaining action is only the mutate-before-kill geometry trial for the reviver pair (both directions lose honest intrabar: PF 0.83 n=470 / 0.69 n=221 \u2014 structural TP/SL geometry+cost failure).",
        "duplicate_of": null,
        "created_at": "2026-06-12 06:40:22",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-12 06:47:35",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 20,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO ADV liquidity gate (is_liquid_crypto) built but unwired",
        "description": "alpha_engine/asset_class.py:315 is_liquid_crypto() exists + tested but the only caller is tools/coingecko_adv_fetcher.py (a fetcher) \u2014 it is NOT in the CRYPTO emission/score gate path. Illiquid-symbol picks (a known concentration/no-edge driver) are not filtered at emit. Verified 2026-06-10 master-run MD sweep.",
        "severity": "P1",
        "status": "IN_PROGRESS",
        "affected_component": "alpha_engine/asset_class.py",
        "reported_by": "claude-fable-masterrun",
        "assigned_to": null,
        "recommended_fix": "Call is_liquid_crypto() in the CRYPTO emission gate (passes_active_gate / scanner path); block or shadow-tag illiquid symbols. Wire-Up Rule.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Phase-1 measurement result (3 consecutive scanner cycles, 63-111 picks each): ZERO _adv_illiquid tags \u2014 the current active CRYPTO universe is entirely above the $50M ADV bar. Phase-2 hard gate would be a NO-OP today -> DEPRIORITIZED. Keep the shadow-tag (it guards against future universe drift); revisit only if tags start appearing.",
        "duplicate_of": null,
        "created_at": "2026-06-10 18:24:36",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-11 04:59:22",
        "resolved_at": null,
        "link_md_path": "reports/md_2month_findings_sweep_2026-06-10.md",
        "link_url": null,
        "link_github_ref": "68dab0a4dc"
      },
      {
        "incident_id": 18,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "A/S-tier crypto scoring tiles are resolver artifacts (100%/72.6% WR vs ~38% intrabar-true)",
        "description": "Swarm cross-review (4 dimensions, HIGH confidence, forward intrabar replay): the /audit crypto S-Tier (score>=70, 100% WR 16/0/0) and A-Tier (55-70, 72.6% WR PF4.0) tiles are a survivorship+labeling ARTIFACT, NOT a tradable edge. (1) SELECTION: tiles bucket the curated recent_closed slice (template.html:6597-6617 reads dashboard_data.json), surfacing fresh TP_HIT winners while excluding 72-96% of same-band TIME_EXIT/EXPIRED/OPEN picks. (2) FIXED-TP LABELING: snapshot resolver stamps TP_HIT at the TP price WITHOUT an intrabar SL-first check (smoking gun: identical PnL clusters +3.948% x8/+3.55% x3, exit_price==take_profit exactly). (3) INTRABAR FLIP: where intrabar_status exists, 23-24% of S+A snapshot wins flip TP_HIT->SL_HIT; the S-tier +3.5% clone_hl picks flip 8/8 EXPIRED->SL_HIT = 0% true WR. Honest forward: CRYPTO 47.7% WR / PF 0.945 / neg expectancy (money_ready_verdict 2026-06-09); luxalgo_confluence 40.4%/PF1.086 REFUTED, prediction_market_consensus 38.2%/PF1.36 REFUTED. NO strategy HOLDS. Intrabar-true band WR: S ~34%, A ~38%.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/template.html:6597-6617 + dashboard_data.json + snapshot resolver",
        "reported_by": "claude-opus-4-8 (swarm w976lbctb)",
        "assigned_to": null,
        "recommended_fix": "Add a prominent tile DISCLAIMER (like the DISPUTED 78.9% cell): score-band WR is survivorship-biased; intrabar-true band WR ~34-38%, full-pop CRYPTO 47.7%/PF0.945. Switch tile WR to intrabar_status TP/(TP+SL) over full band population + surface the 23-24% TP->SL reclass rate. Fix upstream: snapshot resolver must do intrabar first-touch (SL wins ties) before marking TP_HIT. Quarantine -USD/alpha_engine rows unmatchable to crypto_ohlcv. Keep clone_hl/luxalgo/prediction_market_consensus/hoffman OUT of money-ready.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 05:00:14",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 05:00:14",
        "resolved_at": null,
        "link_md_path": "updates/2026-06-09-forward-pilot-luxalgo.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null
      },
      {
        "incident_id": 15,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "claude_ml_moderate_mut bootstrap PASS is single-row JUPUSDT outlier (945x)",
        "description": "PR #481/#482 bootstrap CI: IS_PF=310.77 on n=67 but pf_lo_95=1.31. One row (id=214622) JUPUSDT pnl_pct=76573 drives gross-profit sum; without it PF collapses. Do not promote to live or forward-pilot until sustained_pf / pf_lo_95>=1.5 on clean sample.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "verified_strategies/claude_ml_moderate_mut / bootstrap CI gate",
        "reported_by": "grok-2026-06-03",
        "assigned_to": null,
        "recommended_fix": "Block promotion; add sustained_pf resample metric (see updates/2026-06-02-suspicious-pass-investigation.md). B_flip and inverse_ml_enhanced_BTCUSDT_15m_D are legit forward-test candidates instead.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-03 14:07:06",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": null,
        "link_md_path": "updates/2026-06-02-suspicious-pass-investigation.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 12,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO top_source_share 0.55 concentration \u2014 EAGLE2 Phase 0 gate",
        "description": "Pick pulse / resolver health flagged top_source_share=0.55 on CRYPTO (live policy-clean cohort sub-T2: PF ~1.14, WR ~43%, n=728 per money_ready_verdict). Concentration gate must hold before any size-up.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/production_scanner.py / CRYPTO emitters",
        "reported_by": "cursor-composer-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Enforce concentration caps; mutate-before-kill per MUTATION_THREE_AXIS_PROTOCOL; paper watch SHORT bias only (swarm SUPPORT), not production capital.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:30",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:30",
        "resolved_at": null,
        "link_md_path": "reports/best_picks_swarm_review_2026-06-02.json",
        "link_url": "https://findtorontoevents.ca/audit/pick_funnel.html",
        "link_github_ref": null
      },
      {
        "incident_id": 9,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "EAGLE2: Production LONG-heavy vs tournament SHORT edge (67% vs 33% WR)",
        "description": "Swarm + EAGLE3: tournament SHORT cohort ~67% WR vs LONG ~33% on n\u2248216. Production scanner historically LONG-heavy. EAGLE-4 flip wired in production_scanner.py but shadow only \u2014 policy-clean CRYPTO still NOT_READY PF 0.92.",
        "severity": "P1",
        "status": "IN_PROGRESS",
        "affected_component": "alpha_engine/production_scanner.py",
        "reported_by": "grok-cli-eagle2-2026-06-02",
        "assigned_to": null,
        "recommended_fix": "Forward-proof SHORT flip per regime (\u22653/4 cells); pair with verification_engine once on main; do not size until policy-clean PF\u22651.0 or sleeve replaces bulk emitters.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:04",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:04",
        "resolved_at": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": "PR #458"
      },
      {
        "incident_id": 8,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO CVaR95 -85% / MDD 1.0 = resolver label pollution",
        "description": "money_ready_verdict CRYPTO mdd=1.0, cvar_95=-85.1%: fingerprint of mislabeled/never-closed tails inflating loss tail.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/outcome_resolver.py",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Resolver hygiene pass on CRYPTO (+FOREX): purge disputed/never-closed rows, source-provenance tagging.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "PR #478: tools/resolver_hygiene_check.py report-only scanner flags never-closed/duplicate/EXPIRED->WON-mislabel/missing-provenance rows. Surfaces the MDD=1.0/CVaR-85% pollution for human-approved purge (remediation is a separate step). 6 tests.",
        "duplicate_of": null,
        "created_at": "2026-06-02 14:16:52",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 22:53:30",
        "resolved_at": "2026-06-02 22:53:30",
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": "478"
      },
      {
        "incident_id": 7,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO 55% source concentration + 2 PF>1 sleeves 100% single-source artifact",
        "description": "policy-clean-net: top_source 55% of CRYPTO book. The only 2 sleeves with PF>1 n>=20 (crypto_liquidity_wick_reversal PF1.55, atr_percentile_gate PF1.10) are both 100% single-source (is_single_source_artifact).",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "audit_dashboard/data/pf_registry.json",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Enforce is_single_source_artifact as hard reject before DSR/SPA promotion.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:16:51",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:16:51",
        "resolved_at": null,
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 6,
        "asset_class": "Crypto",
        "source_ref": null,
        "title": "CRYPTO 48h closures at 0 \u2014 resolver DESC fix landed but first test pending",
        "description": "PR #119 changed ORDER BY signal_timestamp ASC to DESC at alpha_engine/active_picks_sync.py:125. Fix landed 2026-05-31T01:20Z. First audit-dashboard.yml hourly run post-fix at 02:10Z will test whether CRYPTO 48h closures emerge from the backlog of 39,706 OPEN CRYPTO picks.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/active_picks_sync.py, .github/workflows/audit-dashboard.yml",
        "reported_by": "kilo-xiaomi-mimo",
        "assigned_to": null,
        "recommended_fix": "Monitor 02:10Z audit-dashboard.yml run + inspect pick_summary_stats_48h.json CRYPTO closed_n. If still 0 after 3-4 hours, investigate deeper (yfinance rate-limit, DB connection, etc.).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "\n\n[MEGA_RECON 2026-05-31] Resolved via PR #142 (TIME_EXIT pnl_pct preservation) + PR #119 (ORDER BY at_raw_picks DESC so newest CRYPTO resolve first). First post-fix closures observed.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:06:40",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 06:28:42",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#142,PR#119"
      },
      {
        "incident_id": 4,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO ML strategies DSR>=0.9995 on n=25-34 displayed without 'insufficient n' badge",
        "description": "ml_enhanced_INJUSDT_1d_B_lightgbm (n=25 WR 100%), ml_enhanced_DYDXUSDT_15m_D (n=31 WR 96.8%), ml_enhanced_FETUSDT_1d_B (n=25 WR 100%), ml_enhanced_RENDERUSDT_1h_D (n=34 WR 85.3%) on /audit/anti_overfit.html show DSR>=0.9995 as 'publishable confidence' but n is too small for the DSR formula to be reliable. 3/3 swarm REAL.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/anti_overfit.html / DSR sidecar rendering",
        "reported_by": "opencode/ring-2.6-1t + 3-engine swarm",
        "assigned_to": null,
        "recommended_fix": "Add 'insufficient n \u2014 awaiting n>=100' badge to any row with n<100 on the anti-overfit page. Reorder so n>=100 rows come first.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Resolved 2026-05-31. PR #100 added insufficient-n badge to audit_dashboard/anti_overfit.html: rows with n<100 are sorted last and show orange \"insufficient n\" badge with tooltip \"DSR unreliable below n=100\". Per Bailey-Lopez de Prado AFML eq 14.5.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:51:47",
        "date_est": "2026-05-24",
        "time_est": "23:51",
        "updated_at": "2026-05-31 01:40:31",
        "resolved_at": "2026-05-31 01:40:31",
        "link_md_path": "reports/2026-05-25_opencode_session_deep_scan.md",
        "link_url": "https://findtorontoevents.ca/audit/anti_overfit.html",
        "link_github_ref": "PR #100"
      },
      {
        "incident_id": 3,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "meta_strategy template explosion \u2014 1.6M template rows across ~140 symbol/dir pairs in bt_backtest_trades",
        "description": "Opencode flagged 1.6M template rows from meta_strategy across MEMECOIN/CRYPTO symbol+direction pairs in backtest_trades. Same root cause as the ghost-rows finding from Qwen's db_health (top 11 ghost cohorts are meta_strategy MEMECOIN). Defer blanket-block until db_health ghost_rows.top_cohorts repopulates after CI commit-list fix lands.",
        "severity": "P1",
        "status": "TRIAGED",
        "affected_component": "meta_strategy emitter / bt_backtest_trades writer",
        "reported_by": "opencode/ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Wait 1-2 cron cycles for db_health refresh post-commit d317560ac9c. Then decide: blanket-block meta_strategy on CRYPTO/MEMECOIN OR symbol-triple enumeration.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-05-25 03:45:06",
        "date_est": "2026-05-24",
        "time_est": "23:45",
        "updated_at": "2026-05-29 06:07:27",
        "resolved_at": null,
        "link_md_path": "session-ses_1a2d.md",
        "link_url": null,
        "link_github_ref": "d317560ac9c"
      },
      {
        "incident_id": 1,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "ML 'edges' with PF 99-1094 are likely look-ahead leakage",
        "description": "Pick-funnel top_edges_per_class found cells like 'copy_trader_intel & LONG' (n=21, PF 1094) and 'conf=0.80-0.85 & ml' (n=42, PF 674) \u2014 values that high on tiny samples almost always indicate look-ahead bias in the feature pipeline, not real edge.",
        "severity": "P1",
        "status": "TRIAGED",
        "affected_component": "alpha_engine ml_enhanced_* family / copy_trader_intel feature pipeline",
        "reported_by": "claude-opus-4-7+deepseek+cerebras",
        "assigned_to": null,
        "recommended_fix": "Audit the feature pipeline for look-ahead bias. Add walk-forward gate before any ML strategy claims edge. Mark current 'DSR=0.9995' claims as 'small-sample, awaiting n>=100 confirmation' on the dashboard.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "\n\n[MEGA_RECON 2026-05-31] PR #170 (look-ahead audit + small-sample badge) linked. Walk-forward gate code remains operator-pending.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": null,
        "link_md_path": "audit_dashboard/data/top_edges_per_class.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "quan_engine_scalp degraded to PF 0.42 / WR 37%",
        "description": "edge_decay_heatmap shows quan_engine_scalp at n=4236, WR 37.4%, PF 0.42 \u2014 verdict 'dead'. Yet it remains a substantial share of open CRYPTO volume per CLAUDE.md ('18% volume @ PF 0.70 drag elite strategies down').",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine quan_engine_scalp emitter",
        "reported_by": "claude/edge_stability",
        "assigned_to": null,
        "recommended_fix": "Per the mutation-three-axis protocol: cut volume share, mutate, or kill. Required to lift the CRYPTO class PF above the T2 threshold.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "OPERATOR-PENDING: quan_engine_scalp PF 0.42 / WR 37%. Mutation-or-kill decision per docs/MUTATION_THREE_AXIS_PROTOCOL.md. Options: (a) cut volume share; (b) mutate (regime gate, ATR floor, time-of-day); (c) kill. Requires operator green-light before agent applies any of these.\n\n[MEGA_RECON 2026-05-31] Resolved via PR #182 \u2014 quan_engine_scalp retired alongside other suspect strategies (Phase-4 resolver artifacts).",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": "audit_dashboard/data/edge_decay_heatmap.json",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 22,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Intrabar scale outlier: +1,706,212% pnl row inflates ml_crypto_predictor family PF to 385",
        "description": "ML audit: one corrupt intrabar pnl row (+1.7M%) in the ml_crypto_predictor family; trimmed truth = WR 40.5%/PF 1.07 gross n=1805 (net-negative after fees). Needs the exit-ratio guard applied to the intrabar writer path too, + quarantine of the row.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "tools/reresolve_intrabar_signal_outcomes.py",
        "reported_by": "claude-fable-mlaudit",
        "assigned_to": null,
        "recommended_fix": "Quarantine the outlier row (backup first); add ratio sanity to the intrabar pnl computation.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-12 06:40:22",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-12 06:40:22",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 19,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Stale April-06 edge claims refuted on current data (quan_engine_swing/st_rsi/TRXUSDT)",
        "description": "Peer (Zoo) Quant review cited EDGE_FINDINGS_2026-04-06.md (2 months old) as \"the edge exists\". Refuted vs live trading_picks 2026-06-09: quan_engine_swing PF 0.81 / WR 41.3% / avg -0.11% / n=46 (LOSING; in PERMANENTLY_KILLED) \u2014 NOT the claimed PF 1.57. st_rsi_momentum_confluence n=0 resolved (dead) \u2014 NOT 65.1% WR/PF 2.53. TRXUSDT = 12.2% of gross loss (n=30) \u2014 NOT 96.8%. quan_engine_scalp confirmed catastrophic (PF 0.09, avg -3.43%). Do NOT resurrect these on stale docs.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "docs/EDGE_FINDINGS_2026-04-06.md (stale) vs live trading_picks",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Quant reviews must re-query live DB with artifact filters (backfill/banned/sane-pnl/EXPIRED-honest), not cite April docs. quan_engine_swing/scalp + st_rsi stay killed.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Verified 2026-06-09; framework adopted, edge claims rejected.",
        "duplicate_of": null,
        "created_at": "2026-06-09 05:10:13",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 05:10:13",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 17,
        "asset_class": "CRYPTO",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "3 DSR/FDR-passing baby strategies TRAPPED below n>=30 promotion gate (no path to accumulate trades)",
        "description": "Three strategies are status=pending_backtest, explicitly need more trades to hit the n>=30 promotion gate, and have backtest_metrics with total_trades=None \u2014 meaning the sweep has never produced trade counts for them because CI is broken. They cannot graduate: (1) rsi_vol_bounce_v2_expanded \u2014 'Parent WR=93.8% n=16 \u2014 DSR+FDR both PASS (p=0.0005). Needs 14 more trades for n>=30 promotion'; (2) crypto_kalman_residual_v2_long_gated \u2014 'Parent WR=72.2% n=18 p=0.096 just below FDR... Goal: hit FDR p<0.05 and n>=30'; (3) fear_greed_extreme_long_v2 \u2014 has graduation_target needing n>=30. Plus liquidation_cascade_contrarian is stuck at backtest_smoke_in_progress with a documented roadmap explicitly blocked on 'more data/volatile windows for n>=30'. These are the literal trapped cohort: edge is validated at parent level, but the only n-accumulation mechanism (the CI sweep) never runs.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Unblocking the CI DB-provision (finding #1) is the prerequisite. After that, these strategies need broader symbol/timeframe coverage to accumulate n: fetch_and_populate_db.py already fetches 14 pairs (BTC/ETH/SOL/XRP/DOGE/ADA/DOT/TRX/ARB/INJ/APE/FET/DYDX/SHIB), but the runner is hardcoded to pair='BTC/USDT' (real_data_sweep_runner.py:57, batch_backtest_all.py:111). Add a multi-pair loop in run_batch so trades accumulate across all fetched pairs (these strategies' own metas say 'symbol expansion 6\u219218 generates trades faster'). That, plus the longer 3000-bar window the fetcher pulls, moves n toward 30.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.85, \"review_evidence\": \"rsi_vol_bounce_v2_expanded.py.meta.json:7,14 (DSR+FDR PASS p=0.0005, needs 14 more for n>=30); crypto_kalman_residual_v2_long_gated.py.meta.json:7 (WR 72.2% n=18 p=0.096, goal FDR p<0.05 and n>=30); fear_greed_extreme_long_v2.py.meta.json:8 graduation_target. All three: status=pending_backtest, has backtest_metrics=True, total_trades=None. liquidation_cascade_contrarian.py.meta.json:17 'not yet harness-ready... Roadmap: more data/volatile windows for n>=30'. meta status histogram across 52 metas: 3 pending_backtest, 2 awaiting_backtest, 1 backtest_smoke_in_progress, 6 awaiting_forward_test, 4 ready_for_forward_test, 8 backtest_passed, 18 backtest_failed.\", \"verify_evidence\": \"All 4 meta.json files exist with quoted text verbatim. /baby_strategies/rsi_vol_bounce_v2_expanded.py.meta.json:7 = \\\"Parent WR=93.8% n=16 \u2014 DSR+FDR both PASS (p=0.0005). Needs 14 more trades for n>=30 promotion gate. Symbol expansion 6->18 generates trades faster\\\" with graduation_target min_n=30. crypto_kalman_residual_v2_long_gated.py.meta.json:7 = \\\"Parent WR=72.2% n=18 p=0.096 \u2014 just below FDR... Goal: hit FDR p<0.05 and n>=30\\\". fear_greed_extreme_long_v2.py.meta.json:8 graduation_target min_n=30. liquidation_cascade_contrarian.py.meta.json:17 status=backtest_smoke_in_progress, \\\"not yet harness-ready... Roadmap: more data/volatile windows for n>=30\\\". All 3 confirmed status=pending_backtest. Runner hardcoded single-pair: real_data_sweep_runner.py:57 `pair: str = \\\"BTC/USDT\\\"`, line 83 `WHERE pair = ?`; batch_backtest_all.py:111 `pair=\\\"BTC/USDT\\\"` \u2014 no multi-pair loop in run_batch. fetch_and_populate_db.py:8-10 fetches 14 pairs. CI CORROBORATION: \\\"Battleground Mass Backtest (Part 2 - Babies)\\\" workflow has 3 consecutive failures today (runs 27056111987/27056076305/27055166676, 23-43s), exits code 1, capped at `--max 15`, crashes at strategy [10/15] backtest_batch_round3. Files are sorted() alphabetically; only 720 bars BTC/USDT loaded; the 3 target strategies are never reached before the cap/crash, leaving backtest_metrics=null indefinitely.\"}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:01",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 16,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "cr_algo_performance corrupt: avg_return 95,692% (units/aggregation bug)",
        "description": "CR Mean Reversion row shows avg_return_pct=95692.81 on 288 trades. Clear units/aggregation bug; all 8 rows untrustworthy. Do not cite cr_algo_performance.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "cr_algo_performance",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Recompute cr_algo_performance with correct per-trade pnl_pct aggregation (likely summing instead of mean, or fraction-vs-percent).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-05 02:34:57",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-05 02:34:57",
        "resolved_at": null,
        "link_md_path": "reports/STRATEGY_AND_AUDIT_REVIEW_2026-06-04.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 14,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "PnL outlier: at_signal_outcomes id=214622 (JUPUSDT) pnl_pct=76573% \u2014 single-row 945x meme-coin return distorts claude_ml_moderate_mut PF=310",
        "description": "Investigated 3 suspicious bootstrap CI PASSes (IS_PF>30) flagged in PR #481. Found:\n  - claude_ml_moderate_mut (n=67, IS_PF=310): single row id=214622 JUPUSDT LONG pnl_pct=76573 (entry=0.0002, exit=0.1892, real 945x return). One meme-coin moon dominates the sum.\n  - B_flip_PriceRocMeanReversion (n=157, IS_PF=35.9): clean single-source alpha_engine, 88% WR, no outliers. Legit.\n  - inverse_ml_enhanced_BTCUSDT_15m_D (n=65, IS_PF=34.5): clean single-source alpha_engine, 91% WR, no outliers. Legit.\n\nThe bootstrap CI gate correctly down-weights single outliers via pf_lo_95:\n  - claude_ml_moderate_mut pf_lo_95=1.31 (real signal, 32 wins / 64 non-outlier picks)\n  - B_flip pf_lo_95=21.21 (legit)\n  - inverse_ml pf_lo_95=15.97 (legit)\n\nVerdict: bootstrap CI gate is doing the right thing. The 'IS_PF>30' was a false alarm on B_flip and inverse_ml. claude_ml_moderate_mut's 310x is real but a one-in-a-million event; pf_lo_95=1.31 is the actionable signal.\n\nOther strategies with |pnl_pct|>1000 (all single-row outliers):\n  - stocktwits:MisterGreen n=1 max=370850\n  - rapid_momentum_filter_mut n=1 max=13505\n  - luxalgo_confluence n=1 max=13201\n  - stocktwits:HomelessDegenerate n=1 max=6082",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "ejaguiar1_stocks.at_signal_outcomes",
        "reported_by": "minimax-m3-free (2026-06-02)",
        "assigned_to": null,
        "recommended_fix": "No code change \u2014 bootstrap CI correctly down-weights via pf_lo_95. Add per-strategy sustained_pf (median PF over 10 random sub-resamples) as a future enhancement to detect strategies that only work because of one outlier row.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-03 00:33:05",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-03 00:33:05",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "#481"
      },
      {
        "incident_id": 5,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "pick_funnel DISPUTED CRYPTO banner is 6 days stale (raw DB numbers moved)",
        "description": "DISPUTED banner (Last verified 2026-05-25) cites raw-DB CRYPTO 90d WR 39.4% (n=2001). Live at_raw_picks query 2026-05-31 shows CRYPTO 90d=41.9% (n=7198), 30d=42.6%, 14d=50.9% (recovering), 2d=41.0%. Dispute direction still valid (raw ~42% vs Smart-Picks-claimed 78.9%) but the specific banner figures are 6d stale and understate current raw WR.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit_dashboard/pick_funnel.html / reports/2026-05-25_crypto_78pct_wr_verification.md",
        "reported_by": "claude-opus-4.8(money-maker-readyv2)",
        "assigned_to": null,
        "recommended_fix": "Re-run the verification against live at_raw_picks and refresh the banner numbers + Last-verified date; or auto-generate the banner from a nightly query.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31. pick_funnel DISPUTED CRYPTO banner was 6 days stale. Raw DB numbers updated: n=2375 decisive, WR=40.4%, PF=0.979 (was n=2001/39.4%/0.371). Two complaints obsolete: claude_gainer_st concentration 0% (was 91.7%); EXPIRED->WON mislabeling 0.1% (was 63.9%). Verified via PR #77.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:43",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 02:06:40",
        "resolved_at": "2026-05-31 02:06:40",
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/pick_funnel.html",
        "link_github_ref": "parallel-session-ops 2026-05-31"
      }
    ],
    "FOREX": [
      {
        "incident_id": 17,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX 25% WR n=24 PF 0.078 (policy-clean); primary multi_asset_scanner + low n (sub-coinflip, no real money)",
        "description": null,
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "forex emission + gates",
        "reported_by": "grok-4.3",
        "assigned_to": null,
        "recommended_fix": "Keep hard disable + bans (multi_asset_scanner etc.); promote carry/COT/cta_tsmom SHORT only on probation; paper until n>=50 clean PF>1.0 per subagent plan.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 18:12:07",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 18:12:07",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-09-forex-commodity-money-ready-bridge-plan.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 8,
        "asset_class": "FOREX",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "kimi_signal_tracking sign-flip: 142 of 367 total sign-flipped rows = 38.7% (worst single source)",
        "description": "kimi_signal_tracking sign-flip: 142 of 367 total sign-flipped rows = 38.7% (worst single source)",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine/strategy_blocklist.py + audit_trail/sign_coherence_check.py",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Run staged purge PR #433: luxalgo 6 -> ml 15 -> battleground 63 -> mega 141 -> kimi 142. Set SIGN_FLIP_BASELINE=0 after.",
        "target_release": null,
        "evidence": "{\"share\": 0.387, \"source\": \"audit_trail/sign_coherence_check.py 2026-06-02\", \"kimi_flips\": 142, \"total_flips\": 367}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #433 (operator-staged purge)"
      },
      {
        "incident_id": 3,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "All FOREX strategies losers except cta_cross_asset_tsmom SHORT (93% USDJPY concentration)",
        "description": "Per benchmark report: forex_carry_momentum, forex_rsi2_mean_reversion, myfxbook_retail_contrarian all losing. Only cta_cross_asset_tsmom SHORT has WR 57.6% but is 93% concentrated in USDJPY \u2014 not a diversified edge, just one carry trade.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine FOREX strategies (concentration risk)",
        "reported_by": "qwen-code+ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Block all FOREX strategies except cta_cross_asset_tsmom SHORT. Force symbol diversification on that one (cap USDJPY at <50%). Add forex_carry (Ring's recommendation) as the second leg.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "PR fix/incidents-p0-batch-2026-05-31: block loser FOREX strategies; allow cta_cross_asset_tsmom SHORT + forex_carry probation",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": null,
        "link_md_path": "reports/audit_benchmark_analysis_2026-05-24.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 19,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX emission re-enabled while FREEZE incident open and policy-clean FOREX FAILs",
        "description": "Commit a3f11a99dd (2026-06-05) flipped FOREX_HARD_DISABLE default 1->0 citing the forex_carry_g10 backtest (PF 1.59/WR 60.4%/n=197), and 16f7e66623 wired it through quality_gates + dashboard_generator \u2014 so FOREX emission is LIVE today. This contradicts open incident #77 (FREEZE FOREX/COMMODITY/FUTURES) and the policy-clean FOREX FAIL (28.6% WR / PF 0.06 per audit_surface_truth). Operator decision needed: either close #77 with the carry-g10 rationale + shadow-first plan, or restore the disable until honest FOREX n>=100 (currently n=88 on the intrabar ledger, 42.0%/PF1.13). Workflow-verified (wf_3c3cdc16).",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/config.py",
        "reported_by": "claude-fable-ultracode",
        "assigned_to": null,
        "recommended_fix": "Decide posture: (a) keep enabled but force forward_test_only on carry_g10 until intrabar n>=100 passes gates, or (b) flip FOREX_HARD_DISABLE back to 1. Do not let sized FOREX emission ride a backtest while the honest ledger fails.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-10 18:39:25",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-10 18:39:25",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "a3f11a99dd"
      },
      {
        "incident_id": 18,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX carry signal is a hardcoded snapshot, not live FRED rates",
        "description": "The FOREX carry input is a static snapshot rather than live FRED policy-rate differentials; carry decays as central-bank rates move, so the signal is stale. Flagged in the 90day FOREX plan + 2-month sweep (O5/O6). Related: COT proxy is not real CFTC data.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/forex",
        "reported_by": "claude-fable-masterrun",
        "assigned_to": null,
        "recommended_fix": "Wire live FRED API (FRED_API_KEY in env) for policy-rate differentials; replace the COT proxy with real CFTC API (CFTC_API_KEY). Both keys flagged missing in operator_status_check.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-10 18:24:36",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-10 18:24:36",
        "resolved_at": null,
        "link_md_path": "reports/md_2month_findings_sweep_2026-06-10.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 16,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX class 25% WR n=24 PF=0.078 (sub-coinflip, neg exp, policy_frozen); primary emitter multi_asset_scanner + low n",
        "description": null,
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "quality_gates/emission/forex_strategies",
        "reported_by": "grok-4.3",
        "assigned_to": null,
        "recommended_fix": "Enforce non_crypto_edge_guard; ban multi_asset_scanner et al; focus on forex_carry_g10 / COT / cta_cross_asset_tsmom only. Re-eval after n>=50 clean WR>45% PF>1.0",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 18:05:15",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 18:05:15",
        "resolved_at": null,
        "link_md_path": "reports/2026-06-09-non-crypto-edge-fix-forex-commodity-etf-futures.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 15,
        "asset_class": "FOREX",
        "source_ref": "kilo session-ses_155a FIX-1 + clean-cohort verify",
        "title": "FOREX bleeder family emitting ~3600 garbage picks \u2014 not in BANNED_SOURCES (forex_carry_momentum 1% WR, forex_rsi2_mean_reversion 12.7%)",
        "description": "emitter_discipline.HARD_KILL_STRATEGIES listed these FOREX bleeders but is orphaned (zero importers, never runs). Clean at_pick_outcomes: forex_carry_momentum n=1183 WR 1.0% (PF 9.0 = single +428% CADJPY feed-bug win); forex_rsi2_mean_reversion n=2441 WR 12.7% PF 0.39 (incl -100% NZDUSD feed bug); carry_trade_momentum 0% n=6; binance_smart_money 0% n=20. ~3600 garbage picks.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/production_scanner.py BANNED_SOURCES",
        "reported_by": "claude-opus-4-8",
        "assigned_to": null,
        "recommended_fix": "Migrated the confirmed bleeders into the wired apply_source_ban_gate BANNED_SOURCES (commit d9c35b9277). quan_engine_* deliberately NOT banned (gold_standard).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 03:34:25",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-09 03:34:25",
        "resolved_at": "2026-06-09 03:34:25",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "d9c35b9277"
      },
      {
        "incident_id": 9,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "DB edge WR excludes EXPIRED outcomes \u2014 GBPUSD shown 58.8% vs true 6.1%",
        "description": "The page shows GBPUSD=X as a FOREX pick with 'DB_n=114 WR=58.8% (edge-corroborated)'. The generator's WR query (tools/picks_now_professional.py load_db_edge, line ~308-314) filters WHERE status IN ('WON','LOST'), silently dropping all EXPIRED rows. For GBPUSD=X the raw at_pick_outcomes split is WON=67, LOST=47, EXPIRED=976, FLAT=2 (TOTAL=1092). Excluding EXPIRED gives 58.8%; counting all resolved outcomes gives 67/1092 = 6.1%. EXPIRED = neither TP nor SL hit in window (pnl=0), i.e. the trade did NOT win. Same pattern on every promoted FX pair: EURGBP 56.1% vs 7.5%, EURUSD 41.1% vs 6.2%, AUDUSD 40.5% vs 4.7%, NZDUSD 39.7% vs 6.6%. This is exactly the EXPIRED-mislabel/resolver artifact CLAUDE.md warns about, presented as a money-grade edge.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Change the WR denominator to count EXPIRED as non-wins (WR = WON / (WON+LOST+EXPIRED+FLAT)), OR display BOTH 'resolved-only WR' and 'EXPIRED-inclusive WR' with the expiry rate. Add an explicit 'expired%' field to picks_now.json and surface it on the card. Suppress the 'edge-corroborated' label whenever expiry% > 50%.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.97, \"review_evidence\": \"DB: SELECT status,COUNT(*) FROM at_pick_outcomes WHERE symbol='GBPUSD=X' -> WON 67, LOST 47, EXPIRED 976, FLAT 2. Generator query: tools/picks_now_professional.py:313 'WHERE status IN (\\\\'WON\\\\',\\\\'LOST\\\\')'. picks_now.json: GBPUSD db_n=114 db_wr=58.8.\", \"verify_evidence\": \"CODE: tools/picks_now_professional.py:305-316 load_db_edge WR query = `SELECT ... SUM(CASE WHEN status='WON' ...)/COUNT(*) ... FROM at_pick_outcomes WHERE status IN ('WON','LOST') AND pnl_pct IS NOT NULL GROUP BY symbol,asset_class HAVING COUNT(*)>=5`. EXPIRED/FLAT silently dropped from both numerator and denominator.\\n\\nDB (ejaguiar1_stocks.at_pick_outcomes, live): GBPUSD=X -> WON=67, LOST=47, EXPIRED=976, FLAT=2 (TOTAL=1092). resolved-only WR=67/114=58.8%; all-outcomes WR=67/1092=6.1%. EXACT match to claim.\\n\\nOther promoted FX pairs verified exactly: EURGBP=X WON=96 LOST=75 EXP=1101 FLAT=12 -> 56.1% vs 7.5%; EURUSD=X 30/43/409/5 -> 41.1% vs 6.2%; AUDUSD=X 75/110/1410/4 -> 40.5% vs 4.7%; NZDUSD=X 73/111/926/3 -> 39.7% vs 6.6%. All four claimed figures match to the decimal.\\n\\npicks_now.json (audit_dashboard/data/picks_now.json): {symbol:'GBPUSD=X', db_n:114, db_wr:58.8, db_avg_pnl:0.0873}. db_n=114=WON+LOST confirms EXPIRED excluded from denominator.\\n\\nLIVE PAGE (audit_dashboard/picks-now.html): line 334 'DB_n=114 WR=58.8% edge'; line 336 '5 approve: DB-corroborated WR=58.8% n=114, only screener pick with real proof'; tooltip line 822 calls it 'actual closed-trade performance'. No expired% field anywhere in JSON or HTML.\\n\\nEXPIRED is a genuine resolved non-win: GBPUSD EXPIRED rows have avg/min/max pnl_pct = exactly 0.0000, zero NULLs \u2014 window elapsed without TP/SL hit. Not a pending/unresolved state.\"}",
        "resolution_notes": "WR now counts EXPIRED/FLAT; GBPUSD 58.8%->6.9% verified",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "e94bc85be3"
      },
      {
        "incident_id": 10,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "FOREX/COMMODITY picks use 8% TP / 4% SL \u2014 5x the enforced production FX cap (1.5%/1.0%)",
        "description": "All 5 FOREX and all 4 COMMODITY picks in picks_now.json carry suggested_tp_pct=8.0, suggested_sl_pct=4.0. alpha_engine/production_scanner.py hard-caps TP_CAP_FOREX=0.015 (1.5%) and SL_CAP_FOREX=0.010 (1.0%) precisely because median daily FX ATR is 0.3-0.8% (see updates/2026-04-25-forex-tpsl-review.md). An 8% GBPUSD TP = ~1066 pips, effectively unreachable in a swing window \u2014 which is the mechanical cause of the ~89% EXPIRED rate that then corrupts the WR (finding #1). The picks-now generator applies none of the production caps; it shows entry 1.3336 with TP 1.4403 / SL 1.2803, an absurd actionable instruction for a spot FX pair.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Apply the production TP_CAP/SL_CAP per class in the generator before writing picks_now.json (import the caps or replicate the table). For FX use ATR-based TP/SL (e.g. 1.5x/1.0x daily ATR) rather than a flat 8/4. Equity TP/SL is already ATR-scaled (8-27% spread observed) so only FX/COMMODITY/some-ETF need the fix.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.95, \"review_evidence\": \"picks_now.json FOREX all rows tp_pct=8.0 sl_pct=4.0; COMMODITY 4 rows same. production_scanner.py:TP_CAP_FOREX=0.015, SL_CAP_FOREX=0.010, TP_CAP_COMMODITY=0.12. Page render math (picks-now.html:947): tp=entry*(1+tpPct/100) -> GBPUSD TP 1.4403.\", \"verify_evidence\": \"picks_now.json (audit_dashboard/data/picks_now.json, generated 2026-06-06T04:52Z): ALL 8 FOREX rows (GBPUSD=X, EURUSD=X, AUDUSD=X, NZDUSD=X, EURGBP=X, USDJPY=X, USDCAD=X, EURJPY=X) and ALL 4 COMMODITY rows (ZC=F, ZS=F, HG=F, GC=F) carry suggested_tp_pct=8.0, suggested_sl_pct=4.0. (Claim said 5 FOREX/4 COMMODITY; current live file has 8 FOREX \u2014 same defect, larger count, file is newer.)\\n\\nProduction caps exist exactly as claimed: alpha_engine/production_scanner.py:1398 TP_CAP_FOREX=0.015, :1406 SL_CAP_FOREX=0.010, :1399 TP_CAP_COMMODITY=0.12, :1407 SL_CAP_COMMODITY=0.08; applied at :1562-1573 via category dispatch and capped at :1578+.\\n\\nGenerator that writes picks_now.json = tools/picks_now_professional.py. Its TP/SL logic (lines 600-604): sl_pct = max(atr_pct * 1.5, 4.0); tp_pct = sl_pct * 2.0. grep for 'production_scanner|TP_CAP|SL_CAP' in this file returns 0 matches \u2014 it imports/applies NONE of the production caps and has no per-class branch. Because FX daily ATR% is small (0.3-0.8%), atr_pct*1.5 falls below the 4.0 floor, so sl_pct pins to 4.0 and tp_pct to 8.0 for every low-vol FX/commodity instrument \u2014 exactly the uniform 8/4 observed. Equity rows by contrast vary (8.0-27.1% TP) because their ATR clears the floor, matching the claim's note that equity is already ATR-scaled.\\n\\nPage render math confirmed: audit_dashboard/picks-now.html:947 \u2014 const tp = entry*(1+tpPct/100), sl = entry*(1-slPct/100). With GBPUSD entry 1.3336 this yields TP 1.4403 / SL 1.2803 (~1066 pip target)\"}",
        "resolution_notes": "Clamped to production per-class TP/SL caps",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "e94bc85be3"
      },
      {
        "incident_id": 7,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "PR#6 FOREX whitelist promotes a CONFIRMED LOSER (cta_cross_asset_tsmom PF 0.254 DSR 0.0)",
        "description": "_FOREX_ALLOWED={cta_cross_asset_tsmom(SHORT),forex_carry}. cta_cross_asset_tsmom has ZERO policy-clean FOREX rows AND anti_overfit rates it n=288 PF 0.254 DSR 0.0 OVERFIT_LIKELY \u2014 a proven loser, not 'the sole proven FOREX sleeve' as the code comment claims. The only wired FOREX strategy with a real backtest edge is dxy_trend_filter (n=995 WR 49% PF 1.63 Sharpe 6.75) \u2014 unreplicated live. regime_accumulation/regime_terminal cause 50%+ single-trade losses (MDD 81%). [REGRESSION 2026-05-31: verification workflow found commit 5676eace2 'fix(forex): register cta_cross_asset_tsmom in non_crypto policy for consolidation' actively WIRED the confirmed loser (anti_overfit n=288 PF0.254 DSR0.0 OVERFIT_LIKELY) into the policy \u2014 wrong direction. qwen's batch also proposed isolating FOREX to this strategy. CORRECT fix: wire dxy_trend_filter (multi_asset/forex_strategies.py:718, PF1.63/n=995, currently dead code per Wire-Up Rule) instead, and revert/cap the cta_cross_asset_tsmom registration. Broadcast STOP to qwen + saved reports/qwen_batch_dedup_verdict.]",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/non_crypto_policy.py:585 _FOREX_ALLOWED",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Replace cta_cross_asset_tsmom in _FOREX_ALLOWED with dxy_trend_filter; hard-block regime_accumulation/regime_terminal for FOREX; require live n>=50 PF>=1.3 before sizing.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: VERIFIED LIVE \u2014 cta_cross_asset_tsmom REMOVED from _FOREX_ALLOWED in non_crypto_policy.py:545. dxy_trend_filter (proven PF 1.34/WR 50%/Sharpe 2.22 on n=201) substituted as recommended. forex_carry retained on probation.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:27:08",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:35",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#6"
      },
      {
        "incident_id": 6,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "PR#6 FOREX consolidation gate is dead code + no-op USDJPY cap",
        "description": "Code review of Zoo's PR#6: the FOREX consolidation gate lives in evaluate_non_crypto_candidate() which has ZERO production callers (live path uses passes_non_crypto_policy() which does not delegate to it) -> the block-all-except-cta_cross_asset_tsmom-SHORT logic never executes. USDJPY concentration cap is a bare 'pass' (no-op placeholder, violates no-placeholders rule). Also cta_cross_asset_tsmom has ZERO clean FOREX trades in pf_registry -> whitelisting a never-traded strategy. The config.py BLACKLISTED_STRATEGIES additions DO work (wired via copy_trader_bridge.py:204).",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "alpha_engine/non_crypto_policy.py:573-590 (gate), :702-710 (USDJPY pass)",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 review)",
        "assigned_to": null,
        "recommended_fix": "Wire FOREX block into passes_non_crypto_policy() (the called gate) or copy_trader_bridge; implement or delete the USDJPY pass; justify the cta_cross_asset_tsmom survivor with real n/WR/PF or switch to a class-level FOREX freeze.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: VERIFIED LIVE in alpha_engine/non_crypto_policy.py:545 \u2014 `_FOREX_ALLOWED = frozenset({'dxy_trend_filter', 'forex_carry'})`. cta_cross_asset_tsmom REMOVED from allowlist. USDJPY 60% concentration cap implemented at lines 557-583. Wired via evaluate_non_crypto_candidate (called by passes_non_crypto_policy).",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:03:44",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:35",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#6"
      },
      {
        "incident_id": 5,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX class still aggregates losers around a small winner subset",
        "description": "EAGLE review found the class story is dominated by a few stronger sleeves while the aggregate is dragged down by broad losers. The dashboard does not expose that isolate-the-winner vs kill-the-drag distinction cleanly enough.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "FOREX class aggregation / per-sleeve visibility",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Add per-sleeve isolation reporting and treat FOREX as a basket of sleeves, not one monolith. Promote only the proven sleeve(s) in audit visibility and keep the rest explicitly quarantined or paper-only.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "FOREX consolidation (PR6, 2026-05-31) isolates cta_cross_asset_tsmom SHORT + carry_trade as the only allowed FOREX strategies. All other FOREX strategies blocked at non_crypto_policy.py evaluate_non_crypto_candidate(). Per-sleeve isolation achieved \u2014 FOREX treated as basket of sleeves, not monolith.",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:07",
        "resolved_at": "2026-05-31 02:51:52",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 1,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "forex_carry.py exists in repo but is NOT in allowlist",
        "description": "alpha_engine/new_strategies/forex_carry.py implements G10 interest-rate differential carry with claimed 55-60% WR / PF 1.2-1.5 but is not registered in non_crypto_policy.NON_CRYPTO_STRATEGY_POLICY so it never emits picks.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "alpha_engine/non_crypto_policy.py allowlist",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Add forex_carry to NON_CRYPTO_STRATEGY_POLICY with probation thresholds. Document wire-up in updates/.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Resolved 2026-05-31. PR #115 added \"forex_carry_ppp\": \"carry\" to STRATEGY_FAMILIES at alpha_engine/config.py:1918, resolving the family-coverage gap. Allowlist registration was via earlier session PR #69 + #11.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 01:40:31",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX SL at 0.5% sits at median daily FX ATR",
        "description": "Causes 44% SL hit rate vs 12% TP hit (3.7x more stops than targets). After April 2026 widening (TP 0.75%->1.5%, SL 0.5%->0.8%) the situation improved but still asymmetric.",
        "severity": "P1",
        "status": "TRIAGED",
        "affected_component": "alpha_engine FOREX TP/SL config",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Widen FOREX SL to >=1.0% (or use 1.5x daily ATR). Backtest before deploying.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 13,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Mixed-freshness sources (ECB daily / OER hourly) feed intraday PnL & TP/SL without a staleness guard",
        "description": "The forex chain falls Yahoo(real-time) -> Frankfurter(ECB, updates once/day) -> OER(hourly). When Yahoo fails on a GHA runner (the stated reason these modules exist), the system silently uses an ECB daily reference rate as the 'current' price and stamps asof=data['date'] (Frankfurter) or today (OER). The enricher then computes intraday pnl_pct and runs TP/SL hit detection off a price that may be 12-24h old. Combined with the 15-min on-disk cache, a stale daily rate can persist and trigger a false TP/SL closure. asof is captured in the dict but the enricher never reads it (universal_price_enricher.py:227-229 only reads price+source), so the staleness signal is discarded.",
        "severity": "P2",
        "status": "IN_PROGRESS",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Propagate asof/source into the pick (e.g. pick['price_source']=result['source'], pick['price_asof']=result['asof']) and gate TP/SL auto-closure on freshness: only allow closure when source in {yahoo_v8, finnhub, twelve_data} (true intraday) or asof==today; treat ECB-daily / monthly-FRED as display-only.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"alpha_engine/forex_price_failover.py:183-189 (Frankfurter asof=ECB date), :237-243 (OER asof=today regardless of true age); enricher discards asof at alpha_engine/universal_price_enricher.py:227-234\", \"verify_evidence\": \"forex_price_failover.py: Frankfurter adapter sets asof=data.get(\\\"date\\\") (ECB daily date) at line 187; OER adapter sets asof=_today_iso() regardless of true rate age at line 241 (OER also has its own 900s module cache _OER_CACHE_TTL). Failover order docstring (lines 16-22) confirms Yahoo(real-time) -> Frankfurter(ECB daily) -> OER(hourly). 15-min on-disk cache confirmed (CACHE_TTL_SEC line 52). universal_price_enricher.py: in _fetch_yfinance_prices, only result[\\\"price\\\"] is read into price_map (lines 227-228, 232-233); result[\\\"source\\\"] is merely printed (line 229), result[\\\"asof\\\"] is never read. price_map is a flat {symbol: float} (lines 213, 355-393) so source/asof are structurally discarded before downstream use. enrich_all_picks then computes intraday pnl_pct off live_price (lines 423-428) and runs TP/SL hit detection (lines 471-486) with unconditional auto-closure to closed_picks.json (Step 5, lines 493-517) \u2014 NO freshness/source/asof gate anywhere in that path. Live data: alpha_engine/data/active_picks.json has 16 OPEN forex (=X) picks, all carrying tight TP/SL bands (e.g. EURUSD=X tp=1.1585/sl=1.1493, ~0.8% wide) that flow through exactly this chain when Yahoo fails.\"}",
        "resolution_notes": "Proxy-skip shipped; full asof staleness gate pending (#23 plumbing)",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:01",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "fb27cfa7eb"
      },
      {
        "incident_id": 11,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "WR 'edge' overlay is fed by BANNED/REFUTED sources (myfxbook, ig_contrarian)",
        "description": "The DB overlay backing the FX picks aggregates at_pick_outcomes across ALL strategies with no source filter. For GBPUSD/EURGBP the resolved rows come from myfxbook_retail_contrarian (46) and ig_contrarian_sentiment (76) among others \u2014 both flagged/refuted in project memory (myfxbook PF 3.79 fat-tail REFUTED 2026-06-05; ig_contrarian 16/day flagged). picks_now_professional.py contains zero references to BANNED_SOURCES, the hedge_fund_quality_gate, or anti_overfit_registry. So a pick can be 'corroborated' by exactly the sources the rest of the pipeline bans.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "In load_db_edge, exclude rows whose strategy is in BANNED_SOURCES / the per-class banned frozensets (import from production_scanner / hedge_fund_quality_gate). Recompute db_n/db_wr on the cleaned set and recheck the n>=20 gate.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.85, \"review_evidence\": \"DB: GBPUSD/EURGBP WON/LOST strategies -> forex_rsi2_mean_reversion 121, ig_contrarian_sentiment 76, myfxbook_retail_contrarian 46. grep BANNED_SOURCES tools/picks_now_professional.py -> 0 matches in filtering logic. BANNED_SOURCES defined in alpha_engine/production_scanner.py:1359.\", \"verify_evidence\": \"tools/picks_now_professional.py:285-331 load_db_edge() runs `SELECT symbol, asset_class, COUNT(*), SUM(status='WON'), AVG(pnl_pct)... FROM at_pick_outcomes WHERE status IN ('WON','LOST') AND pnl_pct IS NOT NULL GROUP BY symbol, asset_class HAVING COUNT(*)>=5` \u2014 NO strategy/source filter, despite at_pick_outcomes HAVING a `strategy` column (DESCRIBE confirmed). The resulting db_wr/db_n feed the scorer at lines 561-567 (W_DB_EDGE points when db_n>=20 & db_wr>55) and line 655 ('Our own trading history shows X% win rate') corroboration text. grep BANNED_SOURCES tools/picks_now_professional.py = 0 matches; grep hedge_fund_quality_gate|anti_overfit_registry|apply_source_ban_gate = 0 matches. GBPUSD=X and EURGBP=X are in the live FX UNIVERSE (lines 174-175).\\n\\nDB (live ejaguiar1_stocks, READ-ONLY): reviewer's bare symbols 'GBPUSD'/'EURGBP' return ZERO rows \u2014 actual stored names are GBPUSD=X / EURGBP=X. Real per-strategy resolved (WON/LOST, pnl_pct NOT NULL) breakdown:\\n- GBPUSD=X: total n=114 wr=58.8% -> forex_rsi2_mean_reversion 43, ig_contrarian_sentiment 36, non_crypto_consensus 16, myfxbook_retail_contrarian 5 (flagged sources = 41/114 = 36%). Clears db_wr>55 gate -> full W_DB_EDGE.\\n- EURGBP=X: total n=171 wr=56.1% -> forex_rsi2_mean_reversion 78, myfxbook_retail_contrarian 41, ig_contrarian_sentiment 40 (flagged = 81/171 = 47%). Clears db_wr>55 gate -> full W_DB_EDGE.\\n\\nBANNED_SOURCES (alpha_engine/production_scanner.py:1359-1387) contents read verbatim: Predictions, sandbox_oppos\"}",
        "resolution_notes": "load_db_edge now excludes BANNED_SOURCES + myfxbook/ig",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "e94bc85be3"
      },
      {
        "incident_id": 12,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Negative-expectancy FX pairs labeled STRONG_BUY",
        "description": "EURUSD=X (db_avg_pnl -0.0011), AUDUSD=X (db_avg_pnl -0.2521) are emitted as direction=STRONG_BUY with scores 90/82 and 8% size. A symbol whose own resolved average PnL is negative should not carry a STRONG_BUY label or full position size, even pre-EXPIRED-fix.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Gate STRONG_BUY / full sizing on db_avg_pnl>0 (after the EXPIRED-inclusive recompute) and on the cleaned, non-banned WR. Demote negative-expectancy symbols to WATCH or drop them.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"picks_now.json FOREX: EURUSD db_avg_pnl=-0.0011 direction STRONG_BUY score 90; AUDUSD db_avg_pnl=-0.2521 STRONG_BUY score 82 position_size_pct 8.\", \"verify_evidence\": \"picks_now.json (audit_dashboard/data/picks_now.json, generated_at 2026-06-06T04:52Z) \\\"all\\\" section FOREX: EURUSD=X direction=STRONG_BUY score=90.0 position_size_pct=8.0 db_avg_pnl=-0.0011; AUDUSD=X direction=STRONG_BUY score=82.0 position_size_pct=8.0 db_avg_pnl=-0.2521. Both claimed values reproduce EXACTLY from the live DB. Query on at_pick_outcomes (status IN WON/LOST, n>=5 \u2014 the generator's own filter at tools/picks_now_professional.py:305-316): EURUSD=X n=73 WR=41.1% avg_pnl=-0.0011; AUDUSD=X n=185 WR=40.5% avg_pnl=-0.2521 (and GBPUSD=X +0.0873/58.8%WR, NZDUSD=X +0.9315/39.7%WR all match the JSON). Including EXPIRED on trading_picks the picture is even worse (EURUSD avg -0.046/8%WR, AUDUSD avg -0.088/2.5%WR). Generator logic confirms the gap: direction is set purely from the composite technical/analyst score (picks_now_professional.py:569-581, score>=75 => STRONG_BUY); the DB-edge overlay (lines 560-567) only ADDS points for db_wr>45% at db_n>=20 and NEVER subtracts for negative WR/avg_pnl; position_size_pct keys only off direction+realized-vol (lines 583-598), not db_avg_pnl. There is no gate demoting negative-expectancy symbols.\"}",
        "resolution_notes": "Demote BUY->WATCH when db_n>=20 & avg_pnl<0",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:00",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:00",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "e94bc85be3"
      },
      {
        "incident_id": 14,
        "asset_class": "FOREX",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "OER/Finnhub cross-rate raises KeyError-into-broad-except, silently dropping valid exotic pairs",
        "description": "In _adapter_open_er_api and _adapter_finnhub_forex the cross-rate uses rates[quote]/rates[base] with direct subscript. If either currency is missing from the USD-based table (exotic/EM pair), this raises KeyError caught by the broad except, returning None and falling through. Functionally safe (no wrong number) but the per-currency miss is logged only at debug, so a systematically-missing currency looks like 'all sources failed' rather than 'this source lacks this currency'. Not a correctness bug, but it masks coverage gaps for the FOREX class we are trying to size up.",
        "severity": "P3",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Use rates.get(quote)/rates.get(base) with explicit None checks and a logger.info on missing currency so coverage gaps are visible in CI logs rather than swallowed as a generic adapter failure.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"alpha_engine/forex_price_failover.py:234 and :284 (rates[quote]/rates[base] subscript inside try/except Exception)\", \"verify_evidence\": \"alpha_engine/forex_price_failover.py:234 (open_er_api) and :284 (finnhub) both use direct subscript `float(rates[quote]) / float(rates[base])` for non-USD cross-rates, inside `try/except Exception as exc:` that logs only at debug (lines 245, 295) and returns None. The failover loop in fetch_forex_rate (lines 383-391) emits exactly the generic `logger.warning(\\\"all forex adapters failed for %s\\\", pair)` the claim predicts \u2014 so a single missing currency in the USD-based table is indistinguishable from total source failure. The module IS in the production path: production_scanner.py -> universal_price_enricher.py (line 217/226 imports + calls fetch_forex_rate) -> forex_price_failover. Live DB (trading_picks, category forex) contains exotic/EM crosses USDMXN, NOKJPY, NOKSEK, SEKJPY, ZARJPY, CADCHF \u2014 currencies (MXN/NOK/SEK/ZAR) that free USD-base tables can legitimately omit, triggering the KeyError-into-broad-except path.\"}",
        "resolution_notes": "OER/Finnhub cross-rate use .get + None checks + logger.info",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:01",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "fb27cfa7eb"
      }
    ],
    "COMMODITIES": [
      {
        "incident_id": 8,
        "asset_class": "COMMODITIES",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "COT publication lag look-ahead bias: cot_positioning PF dropped 4.6 -> 0.51 post-dedup",
        "description": "COT publication lag look-ahead bias: cot_positioning PF dropped 4.6 -> 0.51 post-dedup",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine/strategy_blocklist.py + COT signal pipeline",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Enforce 3-day COT publication lag at signal receipt. Remove CT=F (57% concentration) from universe. 60d post-fix live test.",
        "target_release": null,
        "evidence": "{\"source\": \"2026-05-25 grok consult\", \"actual_pf\": 0.51, \"reported_pf\": 4.6, \"leakage_probability\": 0.8}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-02 14:17:32",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-02 14:17:32",
        "resolved_at": null,
        "link_md_path": "EAGLE3_2026-06-02_CLAUDE_OPUS_4_7.MD",
        "link_url": null,
        "link_github_ref": "PR #439 (COMMODITY emission frozen)"
      },
      {
        "incident_id": 5,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation",
        "description": "EAGLE review converged with the existing COT forensic concern: the class story remains unsafe while pre-clean or over-emitted COT history can still dominate class-level PF/WR claims. The page should not treat COMMODITY as trustable until independent-cycle-only stats are canonical.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "COMMODITY class-health aggregation / COT-derived history",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Recompute class health from deduped independent COT cycles only, then re-derive the honest class verdict. Block promotional Tier claims until the cleaned aggregation is the live source of truth.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon 2026-05-31: COT same-week dedup landed (PR #149 per-release dedup ledger hardening). COMMODITY headline now computed from deduped cycles only. Class-level numbers honest (post-dedup PF 0.13). Class rebuild is separate operator decision tracked under #2.",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:28:35",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Class-level COMMODITY 11.9% WR / PF 0.29 / Sharpe -0.534",
        "description": "Benchmark says CRITICAL \u2014 cot_positioning at the STRATEGY level is strong (DSR=1.0 per Ring) but at the CLASS level (n=140 closed) numbers are catastrophic because cot_positioning is now BLOCKED per audit benchmark, and remaining cta_cross_asset_tsmom + cta_commodity_momentum_term are losers.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine commodity strategies (post cot_positioning block)",
        "reported_by": "qwen-code+freebuff",
        "assigned_to": null,
        "recommended_fix": "Retire all remaining COMMODITY strategies. Rebuild from non-COT signals (term structure, EIA inventory, weather overlay). Reconcile the Ring 'cot DSR=1.0' claim vs the audit-benchmark 'cot BLOCKED' claim \u2014 see COMMODITY rationalize entry.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31 post-COT-dedup recomputed: COMMODITY class n=52 WR=3.8% PF=0.13 avg_pnl=-0.021% (honest, no inflated COT). 9 of 11 strategies at 0% WR. Only 2 marginally-positive (commodity_tsmom_12m n=3 PF 3.55 INSUFFICIENT_N, ema_stack_momentum n=2 PF 1.83 INSUFFICIENT_N). Operator-action required: per CLAUDE.md kill rule, expand BLOCKED_STRATEGIES under MUTATION_THREE_AXIS_PROTOCOL before retiring. Marked IN_PROGRESS until operator approves the kill list.\n\nOPERATOR-PENDING: Class-level rebuild decision. Current state honest (PF 0.13 post-COT-dedup). Options: (a) retire COMMODITY entirely; (b) rebuild from non-COT signals (term structure, EIA inventory, weather overlay) per recommended_fix; (c) external-replication via DBMF/KMLM. Requires operator picking direction before agent work.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": null,
        "link_md_path": "reports/audit_benchmark_analysis_2026-05-24.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 3,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Reconcile: cot_positioning DSR=1.0 (Ring) vs BLOCKED (audit benchmark) \u2014 contradiction",
        "description": "Ring's 2026-05-25 audit says cot_positioning is the SUPREME EDGE (DSR=1.0, WR=86.5%, n=104). audit_benchmark_analysis_2026-05-24 says cot_positioning is BLOCKED and the COT-dedup audit downgraded WR to 5% / PF 0.12 on n=20 post-dedup. Both can't be true.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "cot_positioning evaluation (pipeline vs paper-pilot vs class aggregate)",
        "reported_by": "claude-opus-4-7",
        "assigned_to": null,
        "recommended_fix": "Run the COT-dedup audit live, compute n + WR + PF under (a) raw, (b) deduped-by-release-week, (c) cot_paper_pilot-only sleeve. Publish the truth-table; update the page's SUPREME EDGE callout to match.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "2026-05-31 unblocked by OVERALL #5 COT dedup.\nOriginal contradiction: Ring claimed cot_positioning DSR=1.0/WR=86.5% while audit benchmark BLOCKED. Root cause was 13 same-week dupes inflating n.\nPost-dedup at_signal_outcomes shows: cot_positioning n=1 WR=0% PF=0. cftc_cot_commercial_signal n=1 WR=0% PF=0. Both INSUFFICIENT_N. Contradiction resolved: audit benchmark was correct \u2014 there is no edge above INSUFFICIENT_N threshold.\n\n2026-05-31 reconciliation peer-verified by claude-opus-4-7 \u2014 truth-table at reports/peer_claude-commodity-cot-positioning-reconciliation_truth_table_2026-05-31.md. Grok-4 sanity-check at reports/peer_claude-commodity-cot-positioning-reconciliation_grok_consult_2026-05-31.md. Verdict: Ring's DSR=1.0/n=104 FALSIFIED (7.33x over-emission); audit benchmark BLOCKED was correct. Status closed.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:06:58",
        "link_md_path": "reports/audit_benchmark_analysis_2026-05-24.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 6,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "COMMODITY PF 1.81 is a 2-trade outlier + SHIBUSDT mislabeled as commodity",
        "description": "COMMODITY policy-clean n=9 PF 1.812 collapses to PF 1.15 (drop 1 winner), 0.47 (drop 2 winners). Biggest winner vwap_rsi_confluence +7.3% is symbol SHIBUSDT (a CRYPTO) mislabeled COMMODITY. True clean edge ~break-even, 78% GC=F(gold) concentration. Best wired backtest gold_safe_haven (PF 1.98/n=61/Sharpe 2.35) unreplicated live.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "asset_class tagging + pf_registry by_asset_class_strategy_symbol",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Fix SHIBUSDT->COMMODITY mislabel; require single-symbol conc <60%; accumulate n>=50 clean post-COT-dedup before trusting PF.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Wave-12 recon: SHIBUSDT mislabel fixed \u2014 PR #147 (replace hardcoded category='crypto' with detect_asset_class + defense-in-depth at sync site) + PR #166 backfilled 19 residual mistag rows in trading_picks. Class-level concentration governance documented in non_crypto_policy.py USDJPY cap pattern. Independent COT dedup (PR #149) addresses the 2-trade outlier issue.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:27:08",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 05:28:36",
        "resolved_at": "2026-05-31 05:28:36",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR#147,#166,#149"
      },
      {
        "incident_id": 7,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "cot_positioning 'DSR 1.0 / TIER_1_RENAISSANCE' is a falsified 7.33x over-emission",
        "description": "cot_positioning headline (n=104, DSR 1.0, TIER_1) is over-emission: 44 raw emissions of only 6 unique CFTC releases (7.33x). Deduped one-trade-per-release: n=6, WR 33%, cum PnL -,547.57 (NEGATIVE). friction-adjusted MC (cot_step7_friction_adjusted_mc.json n=126) gives DSR 0.0 FAIL / NOT LIVE_ELIGIBLE. The n=104/DSR=1.0 figure predates falsification and is stale; do not cite. [UPDATE 2026-05-31: ALREADY CORRECTED in cot_paper_pilot_status.json (gen 01:52Z): tier=SHADOW_INSUFFICIENT_N, dsr=null, deduped n=6 cum -$6547. Falsification caught 2026-05-13 (reports/cot_paper_pilot_overemission_falsified_20260513.md). RESIDUAL: anti_overfit_audit.json (2026-05-11) still carries the stale DSR=1.0/n=104 -> covered by INCIDENT_OVERALL #45 (stale sidecar). Downgrading this to TRIAGED.]",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": "cot_paper_pilot_status.json + anti_overfit_audit.json (stale 2026-05-11)",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Dedup COT emissions to one-trade-per-release; keep cot_positioning SHADOW until >=20 unique releases; refresh anti_overfit_audit.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "\n\n[MEGA_RECON 2026-05-31] Resolved via PR #149 (COT per-release dedup ledger) + PR #157 (cot_positioning DSR vs BLOCKED reconciliation truth-table). 7.33x over-emission corrected.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:27:08",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 06:28:42",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": "PR#149,PR#157"
      },
      {
        "incident_id": 10,
        "asset_class": "COMMODITIES",
        "source_ref": "/audit TRUTH LAYER banner",
        "title": "COMMODITY filter-survival gap: dashboard 85.5% WR vs raw 60.2% (-126 picks excluded by _is_valid_resolved_pick)",
        "description": "Dashboard shows COMMODITY WR=85.5% (n=228) but the raw cohort is WR=60.2% (n=354). The -126 difference is picks dropped by _is_valid_resolved_pick() for missing/corrupt pnl_pct, concentrated in LOSING cta_replicator and combined_confidence trades \u2014 so the filter survivorship-biases the displayed WR upward. Raw 60.2% is the conservative, honest estimate. Converted from the /audit TRUTH LAYER banner prose to a tracked incident (2026-06-09).",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "_is_valid_resolved_pick() / dashboard COMMODITY WR cell",
        "reported_by": "claude-opus-4-8 (banner-to-incident conversion 2026-06-09)",
        "assigned_to": null,
        "recommended_fix": "Surface the conservative raw WR (60.2%) alongside or instead of the filtered 85.5% on the COMMODITY cell, OR annotate that 85.5% is filtered-cohort-only. Investigate why cta_replicator/combined_confidence pnl_pct is missing/corrupt at resolution.",
        "target_release": null,
        "evidence": "{\"raw_n\": 354, \"source\": \"/audit TRUTH LAYER banner 2026-05-17\", \"raw_wr_pct\": 60.2, \"dashboard_n\": 228, \"excluded_by\": \"_is_valid_resolved_pick (missing/corrupt pnl_pct)\", \"concentration\": \"losing cta_replicator + combined_confidence\", \"excluded_picks\": 126, \"dashboard_wr_pct\": 85.5}",
        "resolution_notes": null,
        "duplicate_of": null,
        "created_at": "2026-06-09 19:42:20",
        "date_est": "2026-05-17",
        "time_est": "12:00 EST",
        "updated_at": "2026-06-09 19:42:20",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 9,
        "asset_class": "COMMODITY",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "FRED fallback returns macro SPOT price labeled as the =F futures contract -> phantom basis PnL + false closures",
        "description": "_FRED_MAP maps GC=F->GOLDAMGBD228NLBM (London gold fixing, spot), CL=F->DCOILWTICO (WTI spot), NG=F->MHHNGSP (Henry Hub spot), HG=F->PCOPPUSDM (monthly copper). These are macro spot/cash prices, NOT the front-month futures the pick was entered on. The result dict still sets symbol=GC=F, currency=USD, source=fred with no flag that the price is a different instrument. The enricher (universal_price_enricher.py:408-486) uses this current_price to compute pnl_pct AND to trigger TP/SL hit detection that auto-closes the pick into closed_picks.json. Futures vs spot can diverge several percent (contango/backwardation, basis), so a FRED price can manufacture PnL that never happened and can falsely cross a TP/SL, closing a position at a fabricated exit. HG=F is monthly, so it can be weeks stale. This contaminates exactly the PnL/WR numbers the /audit COMMODITY verdict reads.",
        "severity": "P2",
        "status": "RESOLVED",
        "affected_component": "audit-surface",
        "reported_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "assigned_to": null,
        "recommended_fix": "Either (a) drop FRED from the futures price chain entirely (it answers a different question than the contract), or (b) keep it but mark the result is_proxy=True / price_basis='spot' and have the enricher refuse to use proxy prices for TP/SL hit detection and closure (only allow display/info, never auto-close). At minimum add 'proxy_spot': True to the dict and skip picks_to_close when source=='fred'.",
        "target_release": null,
        "evidence": "{\"confidence\": 0.9, \"review_evidence\": \"alpha_engine/commodity_price_failover.py:152-158 (_FRED_MAP spot series) and :326-332/:348-354 (returns symbol=s, currency=USD, source=fred); consumed at alpha_engine/universal_price_enricher.py:423-426 (pnl) and :472-486 (TP/SL hit -> picks_to_close -> CLOSED write at :495-514)\", \"verify_evidence\": \"All claimed file:line evidence verified against actual code.\\n\\n(1) _FRED_MAP at alpha_engine/commodity_price_failover.py:152-158 maps futures tickers to MACRO SPOT/CASH series exactly as claimed: GC=F->GOLDAMGBD228NLBM (LBMA London gold fixing, spot USD/troy oz), CL=F->DCOILWTICO (WTI Cushing spot), NG=F->MHHNGSP (Henry Hub spot), HG=F->PCOPPUSDM (comment explicitly says \\\"Copper (monthly, last resort)\\\"). These are distinct instruments from the =F front-month futures the pick was entered on.\\n\\n(2) FRED adapter return dicts at :326-332 and :348-354 set symbol=s (the =F symbol), currency=USD, source=fred \u2014 NO proxy/basis flag. grep for is_proxy/proxy_spot/price_basis across both files returns ZERO hits (only the =F-map comments and an unrelated Binance comment).\\n\\n(3) Wiring confirmed: universal_price_enricher.py:230-234 calls fetch_commodity_price(sym) for \\\"=F\\\" symbols and stores ONLY result[\\\"price\\\"] into price_map[sym] \u2014 the source='fred' tag is discarded, so downstream cannot tell it is a proxy.\\n\\n(4) Harm path confirmed: enricher main loop uses price_map[sym] as live_price for pnl_pct (:423-426) and TP/SL hit detection (:472-486) which appends to picks_to_close, then :495-514 writes status=CLOSED with exit_price=current_price into closed_picks.json. So a FRED spot price can manufacture pnl and falsely cross TP/SL, auto-closing at a fabricated exit.\\n\\n(5) Live in production: enricher is run by .github/workflows/alpha-engine-live.yml (called at universal_price_enricher.py:560). Cac\"}",
        "resolution_notes": "FRED tagged is_proxy/spot; enricher skips for futures PnL",
        "duplicate_of": null,
        "created_at": "2026-06-06 07:34:01",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-06-06 07:34:01",
        "resolved_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "fb27cfa7eb"
      },
      {
        "incident_id": 1,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "cftc_cot_commercial_signal BLOCKED (19% WR on n=16)",
        "description": "Strategy is in code but blocked from production. Either rehab via mutation protocol or formally retire.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "alpha_engine cftc_cot_commercial_signal",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Run mutation analysis (docs/MUTATION_THREE_AXIS_PROTOCOL.md). If no axis recovers, formally retire and remove from allowlist.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "\n\n[MEGA_RECON 2026-05-31] Resolved via PR #167 (cftc_cot_commercial mutation analysis + disposition).",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": "docs/MUTATION_THREE_AXIS_PROTOCOL.md",
        "link_url": null,
        "link_github_ref": null
      }
    ],
    "BONDS": [
      {
        "incident_id": 2,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Antigravity_bond: 0% WR on n=9 \u2014 kill emission",
        "description": "audit_benchmark_analysis_2026-05-24.md: BOND class is 0% WR / PF 0.00 / Sharpe -2.465. Only strategy is antigravity_bond with 1 historical pick. Already flagged P0 in Freebuff 2026-05-17.",
        "severity": "P0",
        "status": "OPEN",
        "affected_component": "alpha_engine antigravity_bond",
        "reported_by": "qwen-code+freebuff",
        "assigned_to": null,
        "recommended_fix": "Kill BOND emission entirely. Re-enable only after a viable yield-curve or duration strategy is built (see ENHANCEMENT_BONDS).",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "BOND class kill switch active in non_crypto_policy.py (evaluate_non_crypto_candidate, PR7). All bond strategies blocked at policy gate. Re-enable only after viable yield-curve or duration strategy builds forward record (n>=20, WR>=55%).",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 01:56:01",
        "link_md_path": "reports/audit_benchmark_analysis_2026-05-24.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 3,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "alpha-engine-bond.yml emitter failing 5 consecutive days -> 0 resolved bonds",
        "description": "Bond Emitter workflow has failed daily 2026-05-26..05-30 (~17min each). 5 open bond picks exist in active_picks_bond.json but n_resolved=0 because the emitter/resolution leg is red. bond_connors_rsi2 (PF 1.34/WR 50/Sharpe 2.22/n=201 over 21y) is wired and ready; the blocker is the failing workflow, not strategy.",
        "severity": "P1",
        "status": "RESOLVED",
        "affected_component": ".github/workflows/alpha-engine-bond.yml",
        "reported_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "assigned_to": null,
        "recommended_fix": "Fix the failing bond emitter workflow so emitted picks reach the resolver/DB; accumulate n>=30 resolved.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "Diagnosed 2026-05-31: alpha-engine-bond.yml was REDUNDANT \u2014 bond picks flow via etf-bond-scanner.yml (5/5 successful runs at 13:35/14:00 UTC weekdays). Root cause: 06:10 UTC cron in push-storm window (12+ concurrent workflows) \u2192 git pull --rebase failed 10/10 retries, silenced by 2>/dev/null. Fix: renamed to alpha-engine-bond.yml.disabled to preserve history while removing from scheduler. See reports/bonds_3_emitter_failure_diagnosis_2026-05-31.md.",
        "duplicate_of": null,
        "created_at": "2026-05-31 02:24:28",
        "date_est": null,
        "time_est": null,
        "updated_at": "2026-05-31 03:34:05",
        "resolved_at": "2026-05-31 03:34:05",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 1,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "bond_connors_rsi2 new, probation, no forward trades",
        "description": "Claims 73% WR but is brand new \u2014 needs forward-test data before promotion.",
        "severity": "P3",
        "status": "OPEN",
        "affected_component": "alpha_engine/new_strategies/bond_connors_rsi2.py",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Run for 60 days in shadow; gate to probation when n>=20 with WR>=55%.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "\n\n[MEGA_RECON 2026-05-31] Resolved via PR #148 (disabled redundant alpha-engine-bond.yml; picks now land via etf-bond-scanner.yml). Push-storm failure 5d resolved.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      }
    ],
    "FUTURES": [
      {
        "incident_id": 3,
        "asset_class": "FUTURES",
        "source_ref": null,
        "title": "FUTURES is a zombie tile with real futures hidden under COMMODITY",
        "description": "The standalone FUTURES class has near-zero useful activity while real futures exposure is represented under COMMODITY. This makes the /audit taxonomy misleading and blocks honest per-class review.",
        "severity": "P1",
        "status": "OPEN",
        "affected_component": "asset-class taxonomy / FUTURES vs COMMODITY reporting",
        "reported_by": "gpt-5.4/openai",
        "assigned_to": null,
        "recommended_fix": "Replace the empty FUTURES story with a unified futures taxonomy or clearly scope FUTURES as research-only financial futures. The page should stop presenting a zombie tile as if it were a live class.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "[POLICY 2026-05-31 by claude-opus]: FUTURES standalone class formally scoped RESEARCH-ONLY. Live trading_picks FUTURES: 1 TP_HIT / 393 closed (PF~0). Real liquid futures (CL, GC, NG, etc.) trade under COMMODITY. Policy: do not size up FUTURES edge claims; do not promote past shadow. Docs: updates/2026-05-31-futures-research-only-policy.md. UI badge work deferred to avoid shared-tree collision. Backup: ejaguiar1_backups.incident_overall_pre_futures_research_only_20260531.\n\n[MEGA_RECON 2026-05-31] Resolved via PR #153 (FUTURES scoped RESEARCH-ONLY). Standalone FUTURES class formally non-trading; real liquid futures route under COMMODITY.",
        "duplicate_of": null,
        "created_at": "2026-05-27 06:34:32",
        "date_est": "2026-05-27",
        "time_est": "02:34",
        "updated_at": "2026-06-03 14:07:07",
        "resolved_at": "2026-05-31 06:28:42",
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 1,
        "asset_class": "FUTURES",
        "source_ref": null,
        "title": "futures_mean_reversion and ema_stack_momentum BANNED at 0% WR",
        "description": "Both strategies sit in code with BANNED status. Remove from registry to declutter.",
        "severity": "P3",
        "status": "OPEN",
        "affected_component": "alpha_engine futures_mean_reversion / ema_stack_momentum",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Formal retirement entry. Move source files to deprecated/ subfolder.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "futures_mean_reversion + ema_stack_momentum blocked across 8+ code paths: production_scanner._BLOCKED_CATEGORY_STRATEGIES, hedge_fund_quality_gate FUTURES_BANNED_STRATEGIES, quality_gates BLOCKED_STRATEGY_PAIRS + PERMANENTLY_KILLED_STRATEGIES, smart_picks_engine BANNED_SYSTEMS, audit_trail/hf_pick_validator, cross_aggregation/system_trust_registry. Both strategies remain in deprecated/ status.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:14",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 02:12:04",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      }
    ],
    "PENNY": [
      {
        "incident_id": 1,
        "asset_class": "PENNY",
        "source_ref": null,
        "title": "skyrocket_detector NOT wired to production",
        "description": "alpha_engine/skyrocket_detector.py has the SIDU pattern framework ($0.63->$3.79 example) but is not called from production_scanner.py.",
        "severity": "P2",
        "status": "OPEN",
        "affected_component": "alpha_engine/skyrocket_detector.py",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Wire to production scanner per Wire-Up Rule. Add tests + integration doc.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "VERIFIED 2026-05-31 wave-7 \u2014 already wired into production_scanner.py:4191-4234 + dashboard_generator.py:4052-4063 per PR #548. Wire-Up Rule satisfied; incident text is stale.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:14:22",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      },
      {
        "incident_id": 2,
        "asset_class": "PENNY",
        "source_ref": null,
        "title": "penny_deep_oversold BLOCKED by Gate 0",
        "description": "Strategy emits but every pick is rejected at Gate 0 (initial filter). Either fix Gate 0 to allow penny-class scores or move to a class-specific scoring path.",
        "severity": "P3",
        "status": "OPEN",
        "affected_component": "audit_trail/quality_gates.py Gate 0",
        "reported_by": "ring-2.6-1t",
        "assigned_to": null,
        "recommended_fix": "Investigate Gate 0 logic. Likely needs per-class score floor.",
        "target_release": null,
        "evidence": null,
        "resolution_notes": "VERIFIED 2026-05-31 wave-7 \u2014 Gate 0 rejection is intentional per research-only policy; per-symbol PnL evidence supports the kill. No code change.",
        "duplicate_of": null,
        "created_at": "2026-05-25 03:41:15",
        "date_est": "2026-05-24",
        "time_est": "23:41",
        "updated_at": "2026-06-03 14:07:06",
        "resolved_at": "2026-05-31 05:14:22",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null
      }
    ]
  },
  "enhancements": {
    "OVERALL": [
      {
        "enhancement_id": 159,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Update data integrity warning on /audit/ (quoted 2026-06-09 message) - confirm remediation (ghosts 0 per banner) and close/ update if outdated while noting persistent P0s (resolver #110, backfill #112)",
        "description": null,
        "category": "UI",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3 (deep dive 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Banner reflects current health (ghost 0, mismatch 0); new incident or resolution note for the review",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 18:12:42",
        "updated_at": "2026-06-09 18:12:42",
        "implemented_at": null,
        "link_md_path": "reports/money_ready_bridge_summary_2026-06-09.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 154,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Enforce per-class TP/SL caps at the raw-insert chokepoints",
        "description": "The cap function only ran inside production_scanner; emitters writing direct to at_raw_picks (copy_trader 8%/4%, multi_asset 3% FX) bypassed it, producing unreachable targets and 56-94% TIME_EXPIRED. Added clamp_non_crypto_tp_sl at BOTH raw-insert chokepoints (mysql_record_raw_pick + sync_all_picks._insert_raw_pick). CRYPTO guarded out to preserve genome/mega_mutation ATR-tuned targets.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "non-crypto TIME_EXPIRED rate drops; FOREX emitted TP <= 1.5%",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "4470fbf0ed",
        "created_at": "2026-06-09 04:20:23",
        "updated_at": "2026-06-09 04:20:23",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 129,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Backfill 1034 zero-PnL rows in at_pick_outcomes after _compute_pnl fix",
        "description": "PR landed in audit_trail/universal_pick_resolver.py (_compute_pnl helper @ line 260, wired into 10 call sites). Live DB still shows 1034 WON/LOST rows with pnl_pct=0 from pre-fix round(...,2) collapse. Need targeted backfill: re-run resolution on the 1034 affected pick_ids using new helper. Verified 2026-06-05T05:30Z.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7 MD-review-loop",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "at_pick_outcomes WHERE status IN ('WON','LOST') AND pnl_pct=0 count drops from 1034 to <50",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 05:32:58",
        "updated_at": "2026-06-05 05:32:58",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 127,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add explicit kill switch on luxalgo_confluence pilot \u2014 circuit-break if WR<20% for 7 consecutive days",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Currently the pilot has shadow-block (verified working in alpha_engine/verified_promotion_gate.py:81 etf_scanner_shadow_active gate) but no automatic kill switch. Swarm review 2026-06-05 (DeepSeek + xAI both flagged) identifies this gap. Add a daily check in tools/run_verified_pilots_daily.py: if luxalgo_confluence rolling-7d WR drops below 20% OR cumulative drawdown >15%, auto-disable the pilot and file P0 incident. Currently Day 1 state is n=14 WR 29% \u2014 shadow block holds but no automatic stop",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:59:00",
        "updated_at": "2026-06-05 04:59:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 119,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Promote top 5 bias-survivor picks to paper-pilot tracking (USDCAD LONG / BND LONG / SPY LONG / SHY signals / ZS=F LONG)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "After 4 weeks of paper-pilot tracking: at least 3 of 5 maintain bias-survivor status (WR>=60%, sym HHI<0.5, fam HHI<0.5, replay<25%) on out-of-sample forward window. Top candidates by mlflow_high_quality_picks tool: (1) carry_trade x FOREX x USDCAD LONG n=16 WR 87.5% avg +0.87%; (2) risk_parity x BOND x BND LONG n=26 WR 69.2% +0.52% with 3 models open @ $71.69; (3) deep_value x ETF x SPY LONG n=6 WR 66.7% +0.93% with 2 models open @ $747.93; (4) risk_parity x BOND x SHY LONG n=21 WR 66.7% +0.5% ",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 00:52:00",
        "updated_at": "2026-06-05 00:52:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 116,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Kill inverse_ml_enhanced_RENDERUSDT_4h_D \u2014 PF 0.12, avg -1.73%, n=52 (genuine no-edge)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Strategy removed from production scanner / paper-pilot loop. Post-INCIDENT-94 backfill confirmed: 52 closed trades, WR 50% but win:loss skew destroys edge. Reference: reports/verified_strategies_unlock_2026-06-04.md",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 14:33:51",
        "updated_at": "2026-06-04 14:33:51",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 115,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Calibrate TP/SL distances on verified strategies \u2014 TIME_EXIT bias blocking promotion",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "b_flip + inverse_ml decisive-close rate >= 50% (currently <10%). Either tighten TP/SL by 30-40% OR widen TIME_EXIT window beyond strategy's typical excursion period. Current: b_flip 0/40 decisive, inverse_ml_RENDERUSDT 0/57 decisive. Affects forward-promotion gate which counts only decisive closes.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 12:08:24",
        "updated_at": "2026-06-04 12:08:24",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 107,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-4 + EAGLE-5 gates user-guide document (minimax-m3-free, 2026-06-02, PR #461)",
        "description": "Full user-facing guide to the EAGLE-4 admissibility gate (kills 4 noise personas, kills 8 negative-edge class\u00d7direction combos, flips CRYPTO LONG\u2192SHORT) and the EAGLE-5 promotion gate (+20% boost for 33 tournament-validated symbols, +15% for 16 promoted personas). 7-section HTML report with ELI5 per section, per-pick rationale, smoke-test results, and 12-week roadmap. Companion to the code shipped in commits 7510035f1 and 2b4d7ce36 on origin/main. Replaces the original PR #447 docs entry after that branch was fast-forwarded past the EAGLE-4/5 commits by concurrent agent activity.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Page live at findtorontoevents.ca/updates/eagle4-eagle5-gates-2026-06-02.html, ELI5 readability, links to all source commits and the EAGLE3/4 plan docs",
        "target_release": "2026-06-02 17:30 UTC",
        "review_notes": null,
        "implementation_pr": "#461",
        "created_at": "2026-06-02 18:19:45",
        "updated_at": "2026-06-02 18:19:45",
        "implemented_at": null,
        "link_md_path": "updates/eagle4-eagle5-gates-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/updates/eagle4-eagle5-gates-2026-06-02.html",
        "link_github_ref": "#461,#447(c)",
        "enhancement_plan": "Plan: 7-section HTML page (TL;DR / 8 tasks w/ ELI5 / 5 best picks w/ rationale / 2-week short-term / 12-week long-term / risks / sources). Index entry inserted at the <!-- INSERT NEW ENTRY BELOW THIS LINE --> marker in updates/index.html. Ship via clean new branch with only my files to avoid rebase conflicts with concurrent auto-syncs."
      },
      {
        "enhancement_id": 95,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Walk-forward validated macd_rsi_m048 strategy (PF 3.33, 75.4% WR)",
        "description": "macd_rsi_m048 passed purged walk-forward validation: 65 trades, 75.4% WR, test PF 3.33, 5/5 folds profitable, negative decay (improves OOS). Best validated strategy in the system.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 2.0 on 30 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 96,
        "asset_class": "EQUITY",
        "source_ref": null,
        "title": "Equity Momentum 12-1 strategy (B-Tier on SPY/QQQ/GLD)",
        "description": "Jegadeesh-Titman momentum applied to single equities. B-Tier on SPY (Sharpe 1.62, +104%), QQQ (Sharpe 1.63, +165%), GLD (Sharpe 1.18, +128%). Walk-forward validated.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.3 on 30 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 97,
        "asset_class": "ETF",
        "source_ref": null,
        "title": "ETF Sector Rotation strategy (B-Tier on XLK/SPY)",
        "description": "Rotates among SPDR sector ETFs based on 3-month momentum. B-Tier on XLK (Sharpe 1.73, +217%), SPY (Sharpe 1.86, +122%).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.3 on 30 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 100,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Quant Ops Monitor (real-time health checks)",
        "description": "Monitors concentration HHI, resolver disputes, per-class health, strategy culling status. Run via python3 verified_strategies/quant_monitor.py.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Daily monitor runs, alerts on degradation",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "main 63bf21de0",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 102,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Donchian Breakout strategy (B-Tier on BTC/ETH/BNB)",
        "description": "Turtle Trading-inspired breakout for crypto. B-Tier on BTC (Sharpe 1.91, +371%), ETH (Sharpe 1.69, +574%), BNB (Sharpe 1.57, +358%).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.5 on 30 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 103,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Multi-Timeframe Momentum strategy (B-Tier on ETH/XRP)",
        "description": "Combines 20-day and 50-day momentum with 200 SMA filter. B-Tier on ETH (Sharpe 1.60, +272%), XRP (Sharpe 1.72, +1169%).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.5 on 30 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 104,
        "asset_class": "EQUITY",
        "source_ref": null,
        "title": "Blue-Chip Compounders strategy (NVDA/MSFT/AAPL/GOOGL)",
        "description": "Buy-and-hold mega-cap compounders with SMA trend filter. NVDA +2285% backtest, Sharpe 2.08. GOOGL +733%, AMZN +441%, JPM +336%.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.2 on 20 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 106,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE Swarm Synthesis \u2014 multi-model review of 8 EAGLE documents",
        "description": "Consolidated findings from Claude Opus 4.7, minimax-m3-free, Mimo v2.5 Pro, Grok. Identified AI tournament edge matrix, directional biases, best symbols, best personas.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 92,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Replace mutation_framework.compute_pf with proper PF formula + reject 999 fallback inflation",
        "description": "Replace mutation_framework.compute_pf with proper PF formula + reject 999 fallback inflation",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"verified_strategies/mutation_framework.py:48-50\", \"target\": \"sum(p for p in pnls if p>0) / abs(sum(p for p in pnls if p<0)); return None or NaN when losses sum to zero (do not invent fallback)\", \"current\": \"wins/losses (count ratio with 999 fallback)\", \"downstream_impact\": \"Re-run all 10 ADOPTED mutations with correct math; expect 9/10 to fall below PF=1.5 floor\"}",
        "success_metric": "All mutation PF values are computable from gross win/loss sums; no fallback artifact above 5.0",
        "target_release": "EAGLE-3 P0 follow-up",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:25:00",
        "updated_at": "2026-06-02 14:25:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 90,
        "asset_class": "CRYPTO",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "CRYPTO SHORT-only direction flip in production scanner",
        "description": "Tournament data: SHORT 67% WR / +3.74% avg PnL vs LONG 33% WR / -0.49% avg. Flip production scanner to SHORT-only for CRYPTO.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": "[\"SHORT-only CRYPTO\", \"persona kill list\", \"directional kill list\"]",
        "success_metric": "CRYPTO WR improves from ~45% to >55%",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "#445",
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/production_scanner.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Implemented in production_scanner.py EAGLE-4 admissibility gate."
      },
      {
        "enhancement_id": 73,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Fix MC null hypothesis: bootstrap-with-replacement -> block bootstrap",
        "description": "Fix MC null hypothesis: bootstrap-with-replacement -> block bootstrap",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"verified_strategies/strategy_verification_engine.py:243\", \"method\": \"block bootstrap for trend strategies, random-trade-entry for mean-reversion\"}",
        "success_metric": "MC p-value distribution shifts; previously rejected strategies (VWAPReversion OOS Sharpe 3.10) can promote",
        "target_release": "EAGLE-3 P1",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 77,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "DSR n_trials: read real cumulative hypothesis count from reports/hypothesis_registry.json",
        "description": "DSR n_trials: read real cumulative hypothesis count from reports/hypothesis_registry.json",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"alpha_engine/rigorous_backtest_harness.py:61\", \"target\": \"len(hypothesis_registry.json hypotheses) ~500-1000\", \"current_value\": 100}",
        "success_metric": "DSR values shift to correct multi-testing-deflated magnitudes",
        "target_release": "EAGLE-3 P1",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 82,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Land block-bootstrap helper in verified_strategies/strategy_verification_engine.py (file now on main via PR #455)",
        "description": "Land block-bootstrap helper in verified_strategies/strategy_verification_engine.py (file now on main via PR #455)",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"verified_strategies/strategy_verification_engine.py\", \"function_signature\": \"block_bootstrap_pvalue(returns, observed_stat, block_size, n_iter=1000)\", \"blackboxai_reference\": \"EAGLE2_EAGLE_2026-06-02_blackboxai.md section 3.4\"}",
        "success_metric": "MC null hypothesis preserves serial structure for trend strategies",
        "target_release": "EAGLE-3 P1 follow-up",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 70,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Merge PR #457 \u2014 resolver health forward_test fix + ALTER helper",
        "description": "Ship check_resolver_health.py fix (forward_test before close), tools/ensure_forward_test_outcome_columns.py idempotent ALTER, and stale-open batch-resolve documentation.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "ACCEPTED",
        "proposed_by": "cursor-composer-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "PR #457 merged; check_resolver_health exits 0 green on forward_test when columns present.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:30",
        "updated_at": "2026-06-02 14:17:30",
        "implemented_at": null,
        "link_md_path": "updates/2026-06-02-stale-open-picks-batch-resolve.md",
        "link_url": null,
        "link_github_ref": "457",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 65,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Hard-reject single-source-artifact sleeves at promotion",
        "description": "is_single_source_artifact currently advisory. Make it a hard reject (or require >=3 sources) before any sizing. Kills the 2 false-positive crypto sleeves until de-concentrated.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "No promoted sleeve with single_source_pct>0.6.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "470",
        "created_at": "2026-06-02 14:17:13",
        "updated_at": "2026-06-02 18:40:44",
        "implemented_at": "2026-06-02 18:40:44",
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": "470",
        "enhancement_plan": "Shipped shadow-first in PR #470: _single_source_gate() flags classes whose profitable edge is entirely single-source. Stamps single_source_ok/_single_source_recommend. Enforce via MONEY_READY_SINGLE_SOURCE_GATE=1."
      },
      {
        "enhancement_id": 55,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Daily operator bundle \u2014 run_eagle_suite.py + deploy audit JSON",
        "description": "Morning checklist: run_eagle_suite.py (--skip-swarm on laptop), verify money_ready_verdict, FTP strategy_admissibility.json + pilot_forward_dashboard.json, zero sizing on NOT_READY.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "ACCEPTED",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Suite runs green 7 consecutive days; verdict JSON fresh <24h on live /audit.",
        "target_release": "2026-06-09",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 58,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Pick-funnel \u2014 label discovery cells 'not capital ready'",
        "description": "All green pick_funnel cells carry discovery disclaimer; cross-link strategy_admissibility.json and money_ready_verdict. Prevents tournament/lab numbers sizing production.",
        "category": "UI",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Live pick_funnel.html shows disclaimer on every green cell; zero user reports of funnel=live edge.",
        "target_release": "2026-06-09",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 18:43:38",
        "implemented_at": "2026-06-02 18:43:38",
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/pick_funnel.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 49,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Update 'forward validator frozen 270h' incident title/description to accurate root cause (outcome resolver git add pathspec, not forward_validator)",
        "description": "From reports/2026-05-26_forward_validator_freeze_diagnosis.md + money maker v2 unblock plan. Current incidents.html / DB entry misattributes the 270h freeze. Accurate: outcome-resolver.yml failing on missing closed_picks.json in git add since 2026-05-25 19:54. This is the real blocker for signal_outcomes and downstream money maker v2 / forward WR claims.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "incidents.html and DB accurately reflect the outcome resolver root cause; triage focuses on the real one-line workflow fix",
        "target_release": "2026-06-01",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 06:08:15",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-26_forward_validator_freeze_diagnosis.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "---\ntitle: \"Phase 1.1 \u2014 'Forward validator frozen 270h' root-cause diagnosis\"\ndate: 2026-05-26\nstatus: diagnosed, fix proposed, NOT YET APPLIED (pending user authorization)\nrelates_to: reports/2026-05-26_money_maker_v2_unblock_plan.md\n---\n\n# Phase 1.1 diagnosis \u2014 what's actually frozen\n\n## TL;DR\n\nThe incident phrasing \"forward_validator frozen 270h\" is misdirected. `alpha_engine/forward_validator.py` is healthy and runs every ~2h green. The actual freeze is in a **different** workflow: **Outcome Resolver** has been failing every cycle for ~17h with `fatal: pathspec 'alpha_engine/data/closed_picks.json' did not match any files`. The signal_outcomes/MySQL-mirror downstream of it (P0 #10) is starved as a result.\n\nThis is a one-line workflow-file fix. It does not require touching the resolver code, the dashboard generator, or any picks data.\n\n## Evidence chain\n\n### 1. `alpha-engine-live.yml` is NOT frozen\nFive most recent runs all `success`, every ~2h on schedule:\n```\n26450458490  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T13:19:30Z\n26443995251  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T09:26:26Z\n26438658932  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T07:29:30Z\n```\nAnd `forward_validator.py` does not write `signal_outcomes` or `trust_score` \u2014 `grep -n \"signal_outcomes\\|trust_score\\|at_signal_outcomes\" alpha_engine/forward_validator.py` returns zero matches.\n\n### 2. `outcome-resolver.yml` IS frozen\nLast 15 runs all `failure`. Last success: 2026-05-25T18:51:38Z. First failure: 2026-05-25T19:54:08Z. Every hourly cron since has failed.\n\n### 3. Exact failure\nFrom `gh run view 26471783524 --log-failed`:\n```\nresolve-outcomes  Commit resolved picks  fatal: pathspec 'alpha_engine/data/closed_picks.json' did not match any files\nresolve-outcomes  Commit resolved picks  ##[error]Process completed with exit code 128.\n```\nThe failing step is the `git add` in `.github/workflows/outcome-resolver.yml` ~line 97:\n```yaml\ngit add alpha_engine/data/closed_picks.json alpha_engine/data/outcome_resolver_log.json\n```\n\n### 4. Why the file isn't there\n- `git ls-tree -r HEAD -- alpha_engine/data/closed_picks.json` returns empty \u2014 file is not tracked.\n- `ls alpha_engine/data/closed_picks.json` \u2192 No such file.\n- Existing files in that dir: `closed_picks.archive.jsonl`, `closed_picks_enriched.json`, `closed_picks_fast.json` (none of which the workflow git-adds).\n\nThe file was removed from the repo by the history rewrite `34463f11a` (2026-05-23 \"main-only stripped reset: remove heavy data artifacts\"), then gitignored by `8bc9cf075` (2026-05-25 19:34 UTC \"gitignore v3 \u2014 closed_picks*\"). The resolver workflow was never updated to match \u2014 it still tries to commit a file that:\n1. Is gitignored (so even if regenerated, `git add` without `-f` is a no-op).\n2. Isn't being regenerated on the runner (fresh checkout has nothing).\n\nThe first failure (19:54) is the first hourly cron tick that ran after `8bc9cf075` (19:34) \u2014 perfect causal match.\n\n### 5. Downstream cascade\n- The `git add` failure \u2192 `exit 128` \u2192 the whole step fails \u2192 the **INC #10 fix (MySQL mirror step that runs AFTER `git add` in workflow ordering)** never executes. Actually verifying ordering: the mirror step runs BEFORE `git add` in the YAML, so the mirror itself runs; only the commit step fails. **This means MySQL `at_signal_outcomes` IS being written hourly post-INC#10 \u2014 Kilo's concern was already addressed by commit `cc4159888`.**\n- However, because the resolver workflow as a whole exits non-zero, GitHub Actions marks it `failure`, and no new resolver log entries get committed \u2192 `alpha_engine/data/outcome_resolver_log.json` last entry remains 2026-05-21 \u2192 which is what spawned the \"270h frozen\" claim.\n- `signal_outcomes` 82d-staleness (P0 #10) was a true symptom of the same broken workflow PRE-cc4159888, but the INC #10 mirror added today decouples it. **Verify by querying MySQL `at_signal_outcomes` MAX(updated_at) \u2014 if it's within ~1h, P0 #10 is effectively cleared once the workflow stops failing.**\n\n## Proposed surgical fix\n\nEdit `.github/workflows/outcome-resolver.yml` line ~97. Current:\n\n```yaml\ngit add alpha_engine/data/closed_picks.json alpha_engine/data/outcome_resolver_log.json\n```\n\nChange to:\n\n```yaml\ngit add alpha_engine/data/outcome_resolver_log.json\ngit add alpha_engine/data/closed_picks.json 2>/dev/null || true\n```\n\nRationale:\n- `closed_picks.json` is gitignored intentionally (1.9 MB live file, 21 MB historical bloat per commit `8bc9cf075`). It SHOULD NOT be committed.\n- `outcome_resolver_log.json` is the file the workflow actually needs to commit (it's small, audit-grade, and not gitignored \u2014 confirmed by `grep outcome_resolver_log .gitignore` returning empty).\n- The `|| true` pattern matches the other `git add` lines in the same step (lines 99-103).\n\n## Blast radius\n\n- **Inside the workflow:** none. Other steps (resolver execution, MySQL mirror) already ran successfully before this failing step. We're fixing the cleanup-and-commit tail.\n- **Outside the workflow:**\n  - `closed_picks.json` is consumed by 8 readers + 5 writers per commit `8bc9cf075`. None of those read from git-checkout; they all assume the file exists locally on whichever runner generates it. Other workflows that need this file generate it themselves.\n  - GH Actions cron runners do NOT share state. Each resolver run starts fresh; the previous run's `closed_picks.json` was already lost-by-design (it's gitignored). So nothing breaks that wasn't already broken.\n\n## Rollback\n\n`git revert <fix-commit>` is safe. The pre-fix state is the current 17h freeze, so any rollback restores the freeze but doesn't break anything new.\n\n## Validation gate (before declaring Phase 1.1 done)\n\n1. After the fix lands on `main`, watch the next outcome-resolver cron tick (every hour at :15). Run should be `success`.\n2. `gh run view <run_id>` shows the \"Mirror resolved outcomes to MySQL\" step executed without error.\n3. Query MySQL `SELECT MAX(updated_at) FROM at_signal_outcomes` \u2014 must be within 2h of now.\n4. `alpha_engine/data/outcome_resolver_log.json` has a new entry committed with timestamp matching the run.\n\nOnly after all four hold do we move to Phase 1.2 (PnL integrity audit).\n\n## Open questions answered (revising plan v2)\n\n- **Plan Q1** (resolver upstream of PnL mismatch?): **Independent.** The resolver workflow failure was a commit-step bug, unrelated to PnL labelling logic. PnL mismatch (P0 #4/#5) is a separate resolver-code bug; this fix doesn't touch it.\n- **Plan Q5** (no-filter-this-week framing): Stronger case for **publish** now \u2014 once this fix lands, three of the P0s (#7, #10, and partial #4 visibility) effectively clear within 24h, and the \"no filter\" story becomes \"we found and fixed the freeze; filter resumes once Phase 1.2 lands.\"\n\n## Decision needed from user\n\nThis is a one-line YAML edit to a production workflow file. CLAUDE.md says \"never push without pulling first\" but doesn't bar workflow edits. Per the executing-actions guidance, I want explicit authorization before applying the change. Two options:\n\n1. **Apply now** \u2014 I make the edit, commit on a branch, open a PR with this diagnosis as the PR body, do NOT auto-merge. Wait for user to merge.\n2. **Hold** \u2014 User reviews this report first, then decides whether to proceed."
      },
      {
        "enhancement_id": 48,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Fix outcome-resolver.yml git add step (pathspec closed_picks.json error blocking signal_outcomes)",
        "description": "From reports/2026-05-26_forward_validator_freeze_diagnosis.md (cross-ref money maker v2 unblock plan). The 'forward validator frozen 270h' claim is misdirected. Real freeze is in outcome-resolver workflow: fatal pathspec 'alpha_engine/data/closed_picks.json'. Last success 2026-05-25 18:51, failures since. Directly starves signal_outcomes (P0 #10) and money maker v2.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "outcome-resolver.yml runs green hourly; signal_outcomes written <2h fresh; money maker v2 unblocked on data trust",
        "target_release": "2026-06-02 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 06:08:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-26_forward_validator_freeze_diagnosis.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "---\ntitle: \"Phase 1.1 \u2014 'Forward validator frozen 270h' root-cause diagnosis\"\ndate: 2026-05-26\nstatus: diagnosed, fix proposed, NOT YET APPLIED (pending user authorization)\nrelates_to: reports/2026-05-26_money_maker_v2_unblock_plan.md\n---\n\n# Phase 1.1 diagnosis \u2014 what's actually frozen\n\n## TL;DR\n\nThe incident phrasing \"forward_validator frozen 270h\" is misdirected. `alpha_engine/forward_validator.py` is healthy and runs every ~2h green. The actual freeze is in a **different** workflow: **Outcome Resolver** has been failing every cycle for ~17h with `fatal: pathspec 'alpha_engine/data/closed_picks.json' did not match any files`. The signal_outcomes/MySQL-mirror downstream of it (P0 #10) is starved as a result.\n\nThis is a one-line workflow-file fix. It does not require touching the resolver code, the dashboard generator, or any picks data.\n\n## Evidence chain\n\n### 1. `alpha-engine-live.yml` is NOT frozen\nFive most recent runs all `success`, every ~2h on schedule:\n```\n26450458490  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T13:19:30Z\n26443995251  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T09:26:26Z\n26438658932  success  ALPHA ENGINE - Live Autonomous Scanner  2026-05-26T07:29:30Z\n```\nAnd `forward_validator.py` does not write `signal_outcomes` or `trust_score` \u2014 `grep -n \"signal_outcomes\\|trust_score\\|at_signal_outcomes\" alpha_engine/forward_validator.py` returns zero matches.\n\n### 2. `outcome-resolver.yml` IS frozen\nLast 15 runs all `failure`. Last success: 2026-05-25T18:51:38Z. First failure: 2026-05-25T19:54:08Z. Every hourly cron since has failed.\n\n### 3. Exact failure\nFrom `gh run view 26471783524 --log-failed`:\n```\nresolve-outcomes  Commit resolved picks  fatal: pathspec 'alpha_engine/data/closed_picks.json' did not match any files\nresolve-outcomes  Commit resolved picks  ##[error]Process completed with exit code 128.\n```\nThe failing step is the `git add` in `.github/workflows/outcome-resolver.yml` ~line 97:\n```yaml\ngit add alpha_engine/data/closed_picks.json alpha_engine/data/outcome_resolver_log.json\n```\n\n### 4. Why the file isn't there\n- `git ls-tree -r HEAD -- alpha_engine/data/closed_picks.json` returns empty \u2014 file is not tracked.\n- `ls alpha_engine/data/closed_picks.json` \u2192 No such file.\n- Existing files in that dir: `closed_picks.archive.jsonl`, `closed_picks_enriched.json`, `closed_picks_fast.json` (none of which the workflow git-adds).\n\nThe file was removed from the repo by the history rewrite `34463f11a` (2026-05-23 \"main-only stripped reset: remove heavy data artifacts\"), then gitignored by `8bc9cf075` (2026-05-25 19:34 UTC \"gitignore v3 \u2014 closed_picks*\"). The resolver workflow was never updated to match \u2014 it still tries to commit a file that:\n1. Is gitignored (so even if regenerated, `git add` without `-f` is a no-op).\n2. Isn't being regenerated on the runner (fresh checkout has nothing).\n\nThe first failure (19:54) is the first hourly cron tick that ran after `8bc9cf075` (19:34) \u2014 perfect causal match.\n\n### 5. Downstream cascade\n- The `git add` failure \u2192 `exit 128` \u2192 the whole step fails \u2192 the **INC #10 fix (MySQL mirror step that runs AFTER `git add` in workflow ordering)** never executes. Actually verifying ordering: the mirror step runs BEFORE `git add` in the YAML, so the mirror itself runs; only the commit step fails. **This means MySQL `at_signal_outcomes` IS being written hourly post-INC#10 \u2014 Kilo's concern was already addressed by commit `cc4159888`.**\n- However, because the resolver workflow as a whole exits non-zero, GitHub Actions marks it `failure`, and no new resolver log entries get committed \u2192 `alpha_engine/data/outcome_resolver_log.json` last entry remains 2026-05-21 \u2192 which is what spawned the \"270h frozen\" claim.\n- `signal_outcomes` 82d-staleness (P0 #10) was a true symptom of the same broken workflow PRE-cc4159888, but the INC #10 mirror added today decouples it. **Verify by querying MySQL `at_signal_outcomes` MAX(updated_at) \u2014 if it's within ~1h, P0 #10 is effectively cleared once the workflow stops failing.**\n\n## Proposed surgical fix\n\nEdit `.github/workflows/outcome-resolver.yml` line ~97. Current:\n\n```yaml\ngit add alpha_engine/data/closed_picks.json alpha_engine/data/outcome_resolver_log.json\n```\n\nChange to:\n\n```yaml\ngit add alpha_engine/data/outcome_resolver_log.json\ngit add alpha_engine/data/closed_picks.json 2>/dev/null || true\n```\n\nRationale:\n- `closed_picks.json` is gitignored intentionally (1.9 MB live file, 21 MB historical bloat per commit `8bc9cf075`). It SHOULD NOT be committed.\n- `outcome_resolver_log.json` is the file the workflow actually needs to commit (it's small, audit-grade, and not gitignored \u2014 confirmed by `grep outcome_resolver_log .gitignore` returning empty).\n- The `|| true` pattern matches the other `git add` lines in the same step (lines 99-103).\n\n## Blast radius\n\n- **Inside the workflow:** none. Other steps (resolver execution, MySQL mirror) already ran successfully before this failing step. We're fixing the cleanup-and-commit tail.\n- **Outside the workflow:**\n  - `closed_picks.json` is consumed by 8 readers + 5 writers per commit `8bc9cf075`. None of those read from git-checkout; they all assume the file exists locally on whichever runner generates it. Other workflows that need this file generate it themselves.\n  - GH Actions cron runners do NOT share state. Each resolver run starts fresh; the previous run's `closed_picks.json` was already lost-by-design (it's gitignored). So nothing breaks that wasn't already broken.\n\n## Rollback\n\n`git revert <fix-commit>` is safe. The pre-fix state is the current 17h freeze, so any rollback restores the freeze but doesn't break anything new.\n\n## Validation gate (before declaring Phase 1.1 done)\n\n1. After the fix lands on `main`, watch the next outcome-resolver cron tick (every hour at :15). Run should be `success`.\n2. `gh run view <run_id>` shows the \"Mirror resolved outcomes to MySQL\" step executed without error.\n3. Query MySQL `SELECT MAX(updated_at) FROM at_signal_outcomes` \u2014 must be within 2h of now.\n4. `alpha_engine/data/outcome_resolver_log.json` has a new entry committed with timestamp matching the run.\n\nOnly after all four hold do we move to Phase 1.2 (PnL integrity audit).\n\n## Open questions answered (revising plan v2)\n\n- **Plan Q1** (resolver upstream of PnL mismatch?): **Independent.** The resolver workflow failure was a commit-step bug, unrelated to PnL labelling logic. PnL mismatch (P0 #4/#5) is a separate resolver-code bug; this fix doesn't touch it.\n- **Plan Q5** (no-filter-this-week framing): Stronger case for **publish** now \u2014 once this fix lands, three of the P0s (#7, #10, and partial #4 visibility) effectively clear within 24h, and the \"no filter\" story becomes \"we found and fixed the freeze; filter resumes once Phase 1.2 lands.\"\n\n## Decision needed from user\n\nThis is a one-line YAML edit to a production workflow file. CLAUDE.md says \"never push without pulling first\" but doesn't bar workflow edits. Per the executing-actions guidance, I want explicit authorization before applying the change. Two options:\n\n1. **Apply now** \u2014 I make the edit, commit on a branch, open a PR with this diagnosis as the PR body, do NOT auto-merge. Wait for user to merge.\n2. **Hold** \u2014 User reviews this report first, then decides whether to proceed."
      },
      {
        "enhancement_id": 46,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Schema drift watchdog nightly workflow (information_schema snapshot + automated diff vs version-controlled baseline)",
        "description": "From daily_ideas_edge_sweep_2026_05_17.md + synthesis + this Daily Ideas subagent. Nightly snapshot of information_schema to JSON + automated diff against version-controlled baseline in schemas/. Currently no such workflow despite high consensus. Integrates with existing db-freshness guardian and cross-DB audit.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Zero unexplained schema drift in CI; faster MTTR on generator/schema bugs; reproducible dashboard numbers",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:46:13",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_edge_sweep_2026_05_17.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Daily Ideas Edge Sweep \u2014 2026-05-17\n\n**Sources:** 19 DAILY_IDEAS files from 12+ AI agents (Antigravity, Cursor, Grok, Kimi, HuggingFace, Nvidia, Ollama, OpenMonoAgent, XiaoMi Mimo, GH Copilot, Kilocode, LMArena)  \n**Synthesized:** 2026-05-17T22:00Z  \n**Method:** Read all files; ranked by multi-agent consensus count + evidence quality + effort-to-impact\n\n## Current Performance Baseline\n\n| Class | PF | WR | n | Status |\n|---|---|---|---|---|\n| EQUITY | 1.56 | 51.5% | 425 | Tier 2 confirmed |\n| COMMODITY | 2.57 | 62.6% | 337 | Tier 1 candidate (CT=F probation) |\n| CRYPTO | 1.31\u20131.36 filtered | 46.5% | 7935 | Sub-floor; qualification gate needed |\n| ETF | 1.32 | 57% | 107 | Approaching T2 |\n| FOREX | 0.27 | 46.2% | 1355 | HARD_DISABLE active |\n| BOND | 0.66 | 54.5% | 11 | Too thin (n<30) |\n\n---\n\n## TOP 15 IDEAS \u2014 Ranked by Multi-Agent Consensus\n\n### #1: CRYPTO UTC-Hour Death-Zone Filter\n**Consensus:** 4 agents (Ollama, Edge-per-class, KimiCLI, Synthesis-05-15)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** XS  \n22:00 UTC = 61.2% WR; 08-09 UTC = 0% WR. Block 06:00\u201311:00 UTC.  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 6645\u20136682  \n**Projected impact:** +14pp WR for CRYPTO class\n\n---\n\n### #2: Remove MySQL Silent-Fail from Sync Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Fix | **Effort:** XS (5 min)  \n`|| echo \"non-fatal\"` in `mysql-trading-sync.yml` line 43 swallows DB failures silently.  \n**Status: \ud83d\udd04 OPEN** \u2014 5-minute fix  \n**Projected impact:** Catch DB outages instantly instead of hours later\n\n---\n\n### #3: COMMODITY COT Post-Dedup Verification Gate\n**Consensus:** 6 agents (Grok, Edge-per-class, KimiCLI, Cursor, Kilocode, Ollama)  \n**Asset class:** COMMODITY | **Type:** Gate | **Effort:** S  \n`multi_asset_cot` PF=21.33 may contain duplicated 144 trades \u2192 phantom 88.2% WR. Gate sizing behind MATCH + DSR\u22650.85 until ab_analysis confirms.  \n**Status: \u2705 DISPATCHED** \u2014 `ab_analysis.yml` runs daily; awaiting result  \n**Projected impact:** Unlock COMMODITY Tier 1 OR reveal artifact (PF 2.57 real either way)\n\n---\n\n### #4: CRYPTO Strategy-Level Drag Auto-Quarantine\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Synthesis-05-15, OpenMono, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** S  \nAuto-quarantine CRYPTO strategies >40% volume with PF<1.0 (kimi_signal_tracking PF=\u2212930%, crypto_winners PF=0.39).  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 5643\u20135690  \n**Projected impact:** +15-20pp WR for CRYPTO class\n\n---\n\n### #5: FOREX Hard-Disable Until Carry-Factor Ships\n**Consensus:** 5 agents (Edge-per-class, Kilocode, Synthesis-05-15, Cursor, Ollama)  \n**Asset class:** FOREX | **Type:** Safety gate | **Effort:** XS  \nWR=46.2%, PF=0.27, \u22121026% total PnL. Carry-factor (G10 high-yield long/low-yield short) is only documented 30-yr edge.  \n**Status: \u2705 SHIPPED** \u2014 `FOREX_HARD_DISABLE=1` active  \n**Projected impact:** Eliminate \u22121026% bleed; unlock FOREX T2 when carry ships\n\n---\n\n### #6: Replace Confidence with trust_score in HIGH_CONVICTION Gate\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Cursor, Synthesis-05-15, OpenMono)  \n**Asset class:** CRYPTO, ETF | **Type:** Score adjustment | **Effort:** S  \nConfidence is anti-edge on CRYPTO/ETF (higher conf \u2192 lower WR). Gate on `trust_score >= 0.6` instead.  \n**Status: \u2705 SHIPPED** \u2014 `template.html` HC filter patched  \n**Projected impact:** Prevent anti-edge picks from reaching dashboard\n\n---\n\n### #7: DB Freshness Guardian Workflow\n**Consensus:** 5 agents (Cursor, KimiCode, Copilot, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S  \nHourly GH Action checks live_picks/resolver_outputs/bt_backtest_trades stale > 6h; auto-opens GitHub Issue.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/db-freshness-guardian.yml`  \n**Projected impact:** MTTR hours \u2192 <15 min\n\n---\n\n### #8: EQUITY PEAD (Post-Earnings Drift) Strategy\n**Consensus:** 3 agents (Edge-per-class, Synthesis-05-15, Copilot)  \n**Asset class:** EQUITY | **Type:** New strategy | **Effort:** M  \nLong-only top-100 EQUITY in 2-day post-earnings window. Earnings feed via yfinance `ticker.earnings_dates`.  \n**Status: \u2705 SHIPPED** \u2014 `alpha_engine/strategies/pead_equity.py` wired  \n**Projected impact:** +3-8pp WR for EQUITY top-100 cohort\n\n---\n\n### #9: Schema Drift Watchdog Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S (3h)  \nNightly snapshot `information_schema` metadata \u2192 diff against version-controlled baseline in `schemas/`. CI fails on unexplained drift.  \n**Status: \ud83d\udd04 OPEN** \u2014 High value, no workflow found  \n**Projected impact:** Catch silent schema regressions before dashboard generator fails\n\n---\n\n### #10: Cross-DB Strategy Key Consistency Audit\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** M  \nCompare ejaguiar1_backtests vs ejaguiar1_stocks: strategies in backtests but never emitting live; symbol-class label mismatches.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/cross-db-audit.yml` daily  \n**Projected impact:** Reduce false-confidence misclassification 40-60%\n\n---\n\n### #11: Confidence Calibration Tracking Table\n**Consensus:** 4 agents (KimiCode, Cursor, LMArena, Synthesis-05-15)  \n**Asset class:** CRYPTO, ETF | **Type:** New data table | **Effort:** S  \n`at_confidence_calibration` MySQL table: per-bucket actual WR vs expected WR. Auto-quarantine when calibration_gap < \u221250pp.  \n**Status: \ud83d\udd04 BLOCKED** \u2014 Needs `at_pick_outcomes` table + DB_PASS_BACKTESTS secret  \n**Projected impact:** +8-12pp class WR by auto-preventing inverted-confidence picks\n\n---\n\n### #12: Meta-Labeler Gate for CRYPTO\n**Consensus:** 3 agents (LMArena, Cursor, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** M  \nWire `meta_labeler.py` into `quality_gates.passes_active_gate`. CRITICAL: must drop `forward_wr` (look-ahead leak) and `confidence` (known-inverted) from feature vector first.  \n**Status: \u2705 PARTIAL** \u2014 `meta_labeler.py` shipped with leak fixes; production gate wiring OPEN  \n**Projected impact:** +8-15pp WR for CRYPTO filtered subset (high risk if gates miss)\n\n---\n\n### #13: Regime-Alignment Multiplier + Overconfidence Decay\n**Consensus:** 3 agents (LMArena, Gemini, Ollama)  \n**Asset class:** All | **Type:** Score adjustment | **Effort:** S  \n`score_booster.py`: decay score \u00d70.8 when `abs(score) > THRESH`; regime multiplier \u00d70.6 counter-regime / \u00d71.2 with-regime.  \n**Status: \u2705 SHIPPED** \u2014 `_apply_overconfidence_decay` in `alpha_engine/score_booster.py`  \n**Projected impact:** +2-4pp WR on top-quartile cohorts; prevents overconfidence blowups\n\n---\n\n### #14: FOREX Carry-Factor Scaffold\n**Consensus:** 4 agents (Edge-per-class, Kilocode, Synthesis-05-15, Ollama)  \n**Asset class:** FOREX | **Type:** New strategy (research) | **Effort:** M (1 day)  \n`tools/research/forex_carry.py`: long G10 high-yielders, short low-yielders; monthly rebalance. AQR-documented 30-yr Sharpe 0.7-0.9. FRED_API_KEY already in secrets.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet scaffolded; FOREX hard-disabled until this ships  \n**Projected impact:** Only documented path from FOREX PF=0.27 to Tier 2\n\n---\n\n### #15: ETF Sector Rotation + Risk-Parity Overlay\n**Consensus:** 3 agents (Edge-per-class, Kilocode, Synthesis-05-15)  \n**Asset class:** ETF | **Type:** New strategy | **Effort:** M (1 day)  \nRelative-strength across 11 SPDRs (XLF/XLE/XLK/...) + Black-Litterman risk-parity. Wire into `alpha_engine/etf_rotation_strategy.py`.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet shipped  \n**Projected impact:** ETF PF 1.32\u21922.1 (target); n=107 accumulating toward T2 floor\n\n---\n\n## Multi-Agent Consensus Summary\n\n| Idea | Agents | Status |\n|---|---|---|\n| CRYPTO UTC-hour filter | 4 | \u2705 SHIPPED |\n| MySQL silent-fail removal | 4 | \ud83d\udd04 OPEN (5 min) |\n| COMMODITY COT post-dedup gate | 6 | \u2705 DISPATCHED |\n| CRYPTO drag auto-quarantine | 5 | \u2705 SHIPPED |\n| FOREX hard-disable | 5 | \u2705 SHIPPED |\n| Replace confidence w/ trust_score | 5 | \u2705 SHIPPED |\n| DB freshness guardian | 5 | \u2705 SHIPPED |\n| Cross-DB consistency audit | 4 | \u2705 SHIPPED |\n| Schema drift watchdog | 4 | \ud83d\udd04 OPEN (3h) |\n| Confidence calibration table | 4 | \ud83d\udd04 BLOCKED (DB secret) |\n\n## Critical Blockers (User Action Required)\n\n| Blocker | Impact | Fix |\n|---|---|---|\n| `DB_PASS_BACKTESTS` not in GH secrets | Blocks 4 P0/P1 items | `gh secret set DB_PASS_BACKTESTS` |\n| MySQL password rotation | P0 Security \u2014 `stocks123` in git history | Manual action (see PR #1086) |\n| CT=F PROBATION review | 2026-06-06 deadline | Run `ab_analysis.yml` daily; calendar reminder |\n\n## Open Action Items (Autonomous \u2014 No Approval Needed)\n\n1. **Remove MySQL silent-fail** (XS, 5 min) \u2014 `mysql-trading-sync.yml` line 43\n2. **Schema drift watchdog** (S, 3h) \u2014 new `schemas/baseline/` + workflow  \n3. **FOREX carry-factor scaffold** (M, 1 day) \u2014 `tools/research/forex_carry.py`\n4. **ETF sector rotation** (M, 1 day) \u2014 `alpha_engine/etf_rotation_strategy.py`"
      },
      {
        "enhancement_id": 47,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "MySQL sync workflow silent-fail removal + explicit failure + alert (remove || echo non-fatal swallow)",
        "description": "From daily_ideas_edge_sweep_2026_05_17.md + synthesis + this Daily Ideas subagent. Remove '|| echo \"non-fatal\"' in mysql-trading-sync.yml line 43 (and similar) that swallows DB failures. 4+ agent consensus; 5-min fix. Aligns with existing db-freshness guardian.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "DB outages surfaced in <15min (vs hours); higher fidelity live_picks/resolver data for audit",
        "target_release": "2026-06-08",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:46:13",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_edge_sweep_2026_05_17.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Daily Ideas Edge Sweep \u2014 2026-05-17\n\n**Sources:** 19 DAILY_IDEAS files from 12+ AI agents (Antigravity, Cursor, Grok, Kimi, HuggingFace, Nvidia, Ollama, OpenMonoAgent, XiaoMi Mimo, GH Copilot, Kilocode, LMArena)  \n**Synthesized:** 2026-05-17T22:00Z  \n**Method:** Read all files; ranked by multi-agent consensus count + evidence quality + effort-to-impact\n\n## Current Performance Baseline\n\n| Class | PF | WR | n | Status |\n|---|---|---|---|---|\n| EQUITY | 1.56 | 51.5% | 425 | Tier 2 confirmed |\n| COMMODITY | 2.57 | 62.6% | 337 | Tier 1 candidate (CT=F probation) |\n| CRYPTO | 1.31\u20131.36 filtered | 46.5% | 7935 | Sub-floor; qualification gate needed |\n| ETF | 1.32 | 57% | 107 | Approaching T2 |\n| FOREX | 0.27 | 46.2% | 1355 | HARD_DISABLE active |\n| BOND | 0.66 | 54.5% | 11 | Too thin (n<30) |\n\n---\n\n## TOP 15 IDEAS \u2014 Ranked by Multi-Agent Consensus\n\n### #1: CRYPTO UTC-Hour Death-Zone Filter\n**Consensus:** 4 agents (Ollama, Edge-per-class, KimiCLI, Synthesis-05-15)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** XS  \n22:00 UTC = 61.2% WR; 08-09 UTC = 0% WR. Block 06:00\u201311:00 UTC.  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 6645\u20136682  \n**Projected impact:** +14pp WR for CRYPTO class\n\n---\n\n### #2: Remove MySQL Silent-Fail from Sync Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Fix | **Effort:** XS (5 min)  \n`|| echo \"non-fatal\"` in `mysql-trading-sync.yml` line 43 swallows DB failures silently.  \n**Status: \ud83d\udd04 OPEN** \u2014 5-minute fix  \n**Projected impact:** Catch DB outages instantly instead of hours later\n\n---\n\n### #3: COMMODITY COT Post-Dedup Verification Gate\n**Consensus:** 6 agents (Grok, Edge-per-class, KimiCLI, Cursor, Kilocode, Ollama)  \n**Asset class:** COMMODITY | **Type:** Gate | **Effort:** S  \n`multi_asset_cot` PF=21.33 may contain duplicated 144 trades \u2192 phantom 88.2% WR. Gate sizing behind MATCH + DSR\u22650.85 until ab_analysis confirms.  \n**Status: \u2705 DISPATCHED** \u2014 `ab_analysis.yml` runs daily; awaiting result  \n**Projected impact:** Unlock COMMODITY Tier 1 OR reveal artifact (PF 2.57 real either way)\n\n---\n\n### #4: CRYPTO Strategy-Level Drag Auto-Quarantine\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Synthesis-05-15, OpenMono, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** S  \nAuto-quarantine CRYPTO strategies >40% volume with PF<1.0 (kimi_signal_tracking PF=\u2212930%, crypto_winners PF=0.39).  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 5643\u20135690  \n**Projected impact:** +15-20pp WR for CRYPTO class\n\n---\n\n### #5: FOREX Hard-Disable Until Carry-Factor Ships\n**Consensus:** 5 agents (Edge-per-class, Kilocode, Synthesis-05-15, Cursor, Ollama)  \n**Asset class:** FOREX | **Type:** Safety gate | **Effort:** XS  \nWR=46.2%, PF=0.27, \u22121026% total PnL. Carry-factor (G10 high-yield long/low-yield short) is only documented 30-yr edge.  \n**Status: \u2705 SHIPPED** \u2014 `FOREX_HARD_DISABLE=1` active  \n**Projected impact:** Eliminate \u22121026% bleed; unlock FOREX T2 when carry ships\n\n---\n\n### #6: Replace Confidence with trust_score in HIGH_CONVICTION Gate\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Cursor, Synthesis-05-15, OpenMono)  \n**Asset class:** CRYPTO, ETF | **Type:** Score adjustment | **Effort:** S  \nConfidence is anti-edge on CRYPTO/ETF (higher conf \u2192 lower WR). Gate on `trust_score >= 0.6` instead.  \n**Status: \u2705 SHIPPED** \u2014 `template.html` HC filter patched  \n**Projected impact:** Prevent anti-edge picks from reaching dashboard\n\n---\n\n### #7: DB Freshness Guardian Workflow\n**Consensus:** 5 agents (Cursor, KimiCode, Copilot, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S  \nHourly GH Action checks live_picks/resolver_outputs/bt_backtest_trades stale > 6h; auto-opens GitHub Issue.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/db-freshness-guardian.yml`  \n**Projected impact:** MTTR hours \u2192 <15 min\n\n---\n\n### #8: EQUITY PEAD (Post-Earnings Drift) Strategy\n**Consensus:** 3 agents (Edge-per-class, Synthesis-05-15, Copilot)  \n**Asset class:** EQUITY | **Type:** New strategy | **Effort:** M  \nLong-only top-100 EQUITY in 2-day post-earnings window. Earnings feed via yfinance `ticker.earnings_dates`.  \n**Status: \u2705 SHIPPED** \u2014 `alpha_engine/strategies/pead_equity.py` wired  \n**Projected impact:** +3-8pp WR for EQUITY top-100 cohort\n\n---\n\n### #9: Schema Drift Watchdog Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S (3h)  \nNightly snapshot `information_schema` metadata \u2192 diff against version-controlled baseline in `schemas/`. CI fails on unexplained drift.  \n**Status: \ud83d\udd04 OPEN** \u2014 High value, no workflow found  \n**Projected impact:** Catch silent schema regressions before dashboard generator fails\n\n---\n\n### #10: Cross-DB Strategy Key Consistency Audit\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** M  \nCompare ejaguiar1_backtests vs ejaguiar1_stocks: strategies in backtests but never emitting live; symbol-class label mismatches.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/cross-db-audit.yml` daily  \n**Projected impact:** Reduce false-confidence misclassification 40-60%\n\n---\n\n### #11: Confidence Calibration Tracking Table\n**Consensus:** 4 agents (KimiCode, Cursor, LMArena, Synthesis-05-15)  \n**Asset class:** CRYPTO, ETF | **Type:** New data table | **Effort:** S  \n`at_confidence_calibration` MySQL table: per-bucket actual WR vs expected WR. Auto-quarantine when calibration_gap < \u221250pp.  \n**Status: \ud83d\udd04 BLOCKED** \u2014 Needs `at_pick_outcomes` table + DB_PASS_BACKTESTS secret  \n**Projected impact:** +8-12pp class WR by auto-preventing inverted-confidence picks\n\n---\n\n### #12: Meta-Labeler Gate for CRYPTO\n**Consensus:** 3 agents (LMArena, Cursor, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** M  \nWire `meta_labeler.py` into `quality_gates.passes_active_gate`. CRITICAL: must drop `forward_wr` (look-ahead leak) and `confidence` (known-inverted) from feature vector first.  \n**Status: \u2705 PARTIAL** \u2014 `meta_labeler.py` shipped with leak fixes; production gate wiring OPEN  \n**Projected impact:** +8-15pp WR for CRYPTO filtered subset (high risk if gates miss)\n\n---\n\n### #13: Regime-Alignment Multiplier + Overconfidence Decay\n**Consensus:** 3 agents (LMArena, Gemini, Ollama)  \n**Asset class:** All | **Type:** Score adjustment | **Effort:** S  \n`score_booster.py`: decay score \u00d70.8 when `abs(score) > THRESH`; regime multiplier \u00d70.6 counter-regime / \u00d71.2 with-regime.  \n**Status: \u2705 SHIPPED** \u2014 `_apply_overconfidence_decay` in `alpha_engine/score_booster.py`  \n**Projected impact:** +2-4pp WR on top-quartile cohorts; prevents overconfidence blowups\n\n---\n\n### #14: FOREX Carry-Factor Scaffold\n**Consensus:** 4 agents (Edge-per-class, Kilocode, Synthesis-05-15, Ollama)  \n**Asset class:** FOREX | **Type:** New strategy (research) | **Effort:** M (1 day)  \n`tools/research/forex_carry.py`: long G10 high-yielders, short low-yielders; monthly rebalance. AQR-documented 30-yr Sharpe 0.7-0.9. FRED_API_KEY already in secrets.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet scaffolded; FOREX hard-disabled until this ships  \n**Projected impact:** Only documented path from FOREX PF=0.27 to Tier 2\n\n---\n\n### #15: ETF Sector Rotation + Risk-Parity Overlay\n**Consensus:** 3 agents (Edge-per-class, Kilocode, Synthesis-05-15)  \n**Asset class:** ETF | **Type:** New strategy | **Effort:** M (1 day)  \nRelative-strength across 11 SPDRs (XLF/XLE/XLK/...) + Black-Litterman risk-parity. Wire into `alpha_engine/etf_rotation_strategy.py`.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet shipped  \n**Projected impact:** ETF PF 1.32\u21922.1 (target); n=107 accumulating toward T2 floor\n\n---\n\n## Multi-Agent Consensus Summary\n\n| Idea | Agents | Status |\n|---|---|---|\n| CRYPTO UTC-hour filter | 4 | \u2705 SHIPPED |\n| MySQL silent-fail removal | 4 | \ud83d\udd04 OPEN (5 min) |\n| COMMODITY COT post-dedup gate | 6 | \u2705 DISPATCHED |\n| CRYPTO drag auto-quarantine | 5 | \u2705 SHIPPED |\n| FOREX hard-disable | 5 | \u2705 SHIPPED |\n| Replace confidence w/ trust_score | 5 | \u2705 SHIPPED |\n| DB freshness guardian | 5 | \u2705 SHIPPED |\n| Cross-DB consistency audit | 4 | \u2705 SHIPPED |\n| Schema drift watchdog | 4 | \ud83d\udd04 OPEN (3h) |\n| Confidence calibration table | 4 | \ud83d\udd04 BLOCKED (DB secret) |\n\n## Critical Blockers (User Action Required)\n\n| Blocker | Impact | Fix |\n|---|---|---|\n| `DB_PASS_BACKTESTS` not in GH secrets | Blocks 4 P0/P1 items | `gh secret set DB_PASS_BACKTESTS` |\n| MySQL password rotation | P0 Security \u2014 `stocks123` in git history | Manual action (see PR #1086) |\n| CT=F PROBATION review | 2026-06-06 deadline | Run `ab_analysis.yml` daily; calendar reminder |\n\n## Open Action Items (Autonomous \u2014 No Approval Needed)\n\n1. **Remove MySQL silent-fail** (XS, 5 min) \u2014 `mysql-trading-sync.yml` line 43\n2. **Schema drift watchdog** (S, 3h) \u2014 new `schemas/baseline/` + workflow  \n3. **FOREX carry-factor scaffold** (M, 1 day) \u2014 `tools/research/forex_carry.py`\n4. **ETF sector rotation** (M, 1 day) \u2014 `alpha_engine/etf_rotation_strategy.py`"
      },
      {
        "enhancement_id": 44,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Schema drift watchdog nightly workflow (information_schema snapshot + diff vs baseline in schemas/)",
        "description": "From daily_ideas_edge_sweep_2026_05_17.md + synthesis + this Daily Ideas subagent. Nightly snapshot of information_schema to JSON + automated diff against version-controlled baseline. Currently no such workflow despite high consensus. Integrates with existing db-freshness and cross-DB audit.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Zero unexplained schema drift in CI; faster detection of generator bugs; reproducible dashboard numbers",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:45:53",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_edge_sweep_2026_05_17.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Daily Ideas Edge Sweep \u2014 2026-05-17\n\n**Sources:** 19 DAILY_IDEAS files from 12+ AI agents (Antigravity, Cursor, Grok, Kimi, HuggingFace, Nvidia, Ollama, OpenMonoAgent, XiaoMi Mimo, GH Copilot, Kilocode, LMArena)  \n**Synthesized:** 2026-05-17T22:00Z  \n**Method:** Read all files; ranked by multi-agent consensus count + evidence quality + effort-to-impact\n\n## Current Performance Baseline\n\n| Class | PF | WR | n | Status |\n|---|---|---|---|---|\n| EQUITY | 1.56 | 51.5% | 425 | Tier 2 confirmed |\n| COMMODITY | 2.57 | 62.6% | 337 | Tier 1 candidate (CT=F probation) |\n| CRYPTO | 1.31\u20131.36 filtered | 46.5% | 7935 | Sub-floor; qualification gate needed |\n| ETF | 1.32 | 57% | 107 | Approaching T2 |\n| FOREX | 0.27 | 46.2% | 1355 | HARD_DISABLE active |\n| BOND | 0.66 | 54.5% | 11 | Too thin (n<30) |\n\n---\n\n## TOP 15 IDEAS \u2014 Ranked by Multi-Agent Consensus\n\n### #1: CRYPTO UTC-Hour Death-Zone Filter\n**Consensus:** 4 agents (Ollama, Edge-per-class, KimiCLI, Synthesis-05-15)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** XS  \n22:00 UTC = 61.2% WR; 08-09 UTC = 0% WR. Block 06:00\u201311:00 UTC.  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 6645\u20136682  \n**Projected impact:** +14pp WR for CRYPTO class\n\n---\n\n### #2: Remove MySQL Silent-Fail from Sync Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Fix | **Effort:** XS (5 min)  \n`|| echo \"non-fatal\"` in `mysql-trading-sync.yml` line 43 swallows DB failures silently.  \n**Status: \ud83d\udd04 OPEN** \u2014 5-minute fix  \n**Projected impact:** Catch DB outages instantly instead of hours later\n\n---\n\n### #3: COMMODITY COT Post-Dedup Verification Gate\n**Consensus:** 6 agents (Grok, Edge-per-class, KimiCLI, Cursor, Kilocode, Ollama)  \n**Asset class:** COMMODITY | **Type:** Gate | **Effort:** S  \n`multi_asset_cot` PF=21.33 may contain duplicated 144 trades \u2192 phantom 88.2% WR. Gate sizing behind MATCH + DSR\u22650.85 until ab_analysis confirms.  \n**Status: \u2705 DISPATCHED** \u2014 `ab_analysis.yml` runs daily; awaiting result  \n**Projected impact:** Unlock COMMODITY Tier 1 OR reveal artifact (PF 2.57 real either way)\n\n---\n\n### #4: CRYPTO Strategy-Level Drag Auto-Quarantine\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Synthesis-05-15, OpenMono, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** S  \nAuto-quarantine CRYPTO strategies >40% volume with PF<1.0 (kimi_signal_tracking PF=\u2212930%, crypto_winners PF=0.39).  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 5643\u20135690  \n**Projected impact:** +15-20pp WR for CRYPTO class\n\n---\n\n### #5: FOREX Hard-Disable Until Carry-Factor Ships\n**Consensus:** 5 agents (Edge-per-class, Kilocode, Synthesis-05-15, Cursor, Ollama)  \n**Asset class:** FOREX | **Type:** Safety gate | **Effort:** XS  \nWR=46.2%, PF=0.27, \u22121026% total PnL. Carry-factor (G10 high-yield long/low-yield short) is only documented 30-yr edge.  \n**Status: \u2705 SHIPPED** \u2014 `FOREX_HARD_DISABLE=1` active  \n**Projected impact:** Eliminate \u22121026% bleed; unlock FOREX T2 when carry ships\n\n---\n\n### #6: Replace Confidence with trust_score in HIGH_CONVICTION Gate\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Cursor, Synthesis-05-15, OpenMono)  \n**Asset class:** CRYPTO, ETF | **Type:** Score adjustment | **Effort:** S  \nConfidence is anti-edge on CRYPTO/ETF (higher conf \u2192 lower WR). Gate on `trust_score >= 0.6` instead.  \n**Status: \u2705 SHIPPED** \u2014 `template.html` HC filter patched  \n**Projected impact:** Prevent anti-edge picks from reaching dashboard\n\n---\n\n### #7: DB Freshness Guardian Workflow\n**Consensus:** 5 agents (Cursor, KimiCode, Copilot, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S  \nHourly GH Action checks live_picks/resolver_outputs/bt_backtest_trades stale > 6h; auto-opens GitHub Issue.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/db-freshness-guardian.yml`  \n**Projected impact:** MTTR hours \u2192 <15 min\n\n---\n\n### #8: EQUITY PEAD (Post-Earnings Drift) Strategy\n**Consensus:** 3 agents (Edge-per-class, Synthesis-05-15, Copilot)  \n**Asset class:** EQUITY | **Type:** New strategy | **Effort:** M  \nLong-only top-100 EQUITY in 2-day post-earnings window. Earnings feed via yfinance `ticker.earnings_dates`.  \n**Status: \u2705 SHIPPED** \u2014 `alpha_engine/strategies/pead_equity.py` wired  \n**Projected impact:** +3-8pp WR for EQUITY top-100 cohort\n\n---\n\n### #9: Schema Drift Watchdog Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S (3h)  \nNightly snapshot `information_schema` metadata \u2192 diff against version-controlled baseline in `schemas/`. CI fails on unexplained drift.  \n**Status: \ud83d\udd04 OPEN** \u2014 High value, no workflow found  \n**Projected impact:** Catch silent schema regressions before dashboard generator fails\n\n---\n\n### #10: Cross-DB Strategy Key Consistency Audit\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** M  \nCompare ejaguiar1_backtests vs ejaguiar1_stocks: strategies in backtests but never emitting live; symbol-class label mismatches.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/cross-db-audit.yml` daily  \n**Projected impact:** Reduce false-confidence misclassification 40-60%\n\n---\n\n### #11: Confidence Calibration Tracking Table\n**Consensus:** 4 agents (KimiCode, Cursor, LMArena, Synthesis-05-15)  \n**Asset class:** CRYPTO, ETF | **Type:** New data table | **Effort:** S  \n`at_confidence_calibration` MySQL table: per-bucket actual WR vs expected WR. Auto-quarantine when calibration_gap < \u221250pp.  \n**Status: \ud83d\udd04 BLOCKED** \u2014 Needs `at_pick_outcomes` table + DB_PASS_BACKTESTS secret  \n**Projected impact:** +8-12pp class WR by auto-preventing inverted-confidence picks\n\n---\n\n### #12: Meta-Labeler Gate for CRYPTO\n**Consensus:** 3 agents (LMArena, Cursor, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** M  \nWire `meta_labeler.py` into `quality_gates.passes_active_gate`. CRITICAL: must drop `forward_wr` (look-ahead leak) and `confidence` (known-inverted) from feature vector first.  \n**Status: \u2705 PARTIAL** \u2014 `meta_labeler.py` shipped with leak fixes; production gate wiring OPEN  \n**Projected impact:** +8-15pp WR for CRYPTO filtered subset (high risk if gates miss)\n\n---\n\n### #13: Regime-Alignment Multiplier + Overconfidence Decay\n**Consensus:** 3 agents (LMArena, Gemini, Ollama)  \n**Asset class:** All | **Type:** Score adjustment | **Effort:** S  \n`score_booster.py`: decay score \u00d70.8 when `abs(score) > THRESH`; regime multiplier \u00d70.6 counter-regime / \u00d71.2 with-regime.  \n**Status: \u2705 SHIPPED** \u2014 `_apply_overconfidence_decay` in `alpha_engine/score_booster.py`  \n**Projected impact:** +2-4pp WR on top-quartile cohorts; prevents overconfidence blowups\n\n---\n\n### #14: FOREX Carry-Factor Scaffold\n**Consensus:** 4 agents (Edge-per-class, Kilocode, Synthesis-05-15, Ollama)  \n**Asset class:** FOREX | **Type:** New strategy (research) | **Effort:** M (1 day)  \n`tools/research/forex_carry.py`: long G10 high-yielders, short low-yielders; monthly rebalance. AQR-documented 30-yr Sharpe 0.7-0.9. FRED_API_KEY already in secrets.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet scaffolded; FOREX hard-disabled until this ships  \n**Projected impact:** Only documented path from FOREX PF=0.27 to Tier 2\n\n---\n\n### #15: ETF Sector Rotation + Risk-Parity Overlay\n**Consensus:** 3 agents (Edge-per-class, Kilocode, Synthesis-05-15)  \n**Asset class:** ETF | **Type:** New strategy | **Effort:** M (1 day)  \nRelative-strength across 11 SPDRs (XLF/XLE/XLK/...) + Black-Litterman risk-parity. Wire into `alpha_engine/etf_rotation_strategy.py`.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet shipped  \n**Projected impact:** ETF PF 1.32\u21922.1 (target); n=107 accumulating toward T2 floor\n\n---\n\n## Multi-Agent Consensus Summary\n\n| Idea | Agents | Status |\n|---|---|---|\n| CRYPTO UTC-hour filter | 4 | \u2705 SHIPPED |\n| MySQL silent-fail removal | 4 | \ud83d\udd04 OPEN (5 min) |\n| COMMODITY COT post-dedup gate | 6 | \u2705 DISPATCHED |\n| CRYPTO drag auto-quarantine | 5 | \u2705 SHIPPED |\n| FOREX hard-disable | 5 | \u2705 SHIPPED |\n| Replace confidence w/ trust_score | 5 | \u2705 SHIPPED |\n| DB freshness guardian | 5 | \u2705 SHIPPED |\n| Cross-DB consistency audit | 4 | \u2705 SHIPPED |\n| Schema drift watchdog | 4 | \ud83d\udd04 OPEN (3h) |\n| Confidence calibration table | 4 | \ud83d\udd04 BLOCKED (DB secret) |\n\n## Critical Blockers (User Action Required)\n\n| Blocker | Impact | Fix |\n|---|---|---|\n| `DB_PASS_BACKTESTS` not in GH secrets | Blocks 4 P0/P1 items | `gh secret set DB_PASS_BACKTESTS` |\n| MySQL password rotation | P0 Security \u2014 `stocks123` in git history | Manual action (see PR #1086) |\n| CT=F PROBATION review | 2026-06-06 deadline | Run `ab_analysis.yml` daily; calendar reminder |\n\n## Open Action Items (Autonomous \u2014 No Approval Needed)\n\n1. **Remove MySQL silent-fail** (XS, 5 min) \u2014 `mysql-trading-sync.yml` line 43\n2. **Schema drift watchdog** (S, 3h) \u2014 new `schemas/baseline/` + workflow  \n3. **FOREX carry-factor scaffold** (M, 1 day) \u2014 `tools/research/forex_carry.py`\n4. **ETF sector rotation** (M, 1 day) \u2014 `alpha_engine/etf_rotation_strategy.py`"
      },
      {
        "enhancement_id": 41,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Fix duplicate leaderboard entries (source=\"\" inflation) + reconcile alpha_engine aggregate loss vs sub-strat buried winners",
        "description": "From AUDIT_DASHBOARD_BURIED_WINNERS_2026-05-29.md + this subagent. Every leaderboard entry appears exactly twice (source=\"\" + real); inflates counts. alpha_engine aggregate losing (\u22125.56, 37.1% WR) while sub-strats (mega_mutation etc.) win big. Dedup by strategy+source + surface buried + per-strategy health panels.",
        "category": "UI",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-05-27-synth-05-29-hunt-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "No double-counting on /audit; buried winners (mega_mutation PF4.39 etc.) appear in Smart Picks/aggregates; accurate counts",
        "target_release": "2026-06-08",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:42:41",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/AUDIT_DASHBOARD_BURIED_WINNERS_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Audit Dashboard Buried Winners Analysis\n\n**Date:** 2026-05-29  \n**Analyst:** Grok 4.3 (autonomous)  \n**Data source:** `audit_dashboard/data/dashboard_data.json` (2026-05-28T21:29Z)\n\n---\n\n## Executive Summary\n\n**CRITICAL FINDING:** Multiple extremely profitable strategies are buried in the leaderboard with zero or minimal active picks, while the main `alpha_engine` system is **LOSING** (-$75.56 PnL, 37.1% WR). The dashboard aggregates hide winners in per-strategy noise.\n\n### Top Buried Winners (fwd_pf > 3.0, n >= 10, 0 active picks)\n\n| Strategy | Fwd PF | Fwd WR | Trades | Total PnL | Active | Source System |\n|----------|--------|--------|--------|-----------|--------|---------------|\n| **mega_mutation_macd_rsi_m048** | **4.39** | **67.3%** | **110** | **$377.24** | **0** | mega_mutation |\n| **donchian-stock-breakout** | **7.14** | **78.6%** | **14** | **$87.45** | **0** | kimi_riseoftheclaw |\n| **rs-breakout-scout** | **3.98** | **72.1%** | **43** | **$98.64** | **1** | kimi_riseoftheclaw |\n| drawdown_recovery_rsi_eth | 5.98 | 73.9% | 46 | $29.87 | 1 | alpha_engine |\n| drawdown_recovery_rsi_sol | 8.44 | 61.5% | 13 | $16.37 | 0 | alpha_engine |\n| strong consensus (AE + ml_crypto_pred) | 2.92 | 67.3% | 55 | $75.50 | 0 | aggregated |\n| mega_mutation_macd_rsi_m017 | 4.49 | 66.7% | 18 | $40.42 | 0 | mega_mutation |\n| ema-ribbon-momentum-scout | 2.78 | 68.4% | 19 | $44.03 | 2 | kimi_riseoftheclaw |\n| mtf-align-scout | 2.51 | 54.5% | 22 | $42.07 | 0 | kimi_riseoftheclaw |\n| price-accel-scout | 2.27 | 57.9% | 19 | $38.51 | 0 | kimi_riseoftheclaw |\n| crypto-momentum-scout | 2.04 | 58.6% | 29 | $43.99 | 0 | kimi_riseoftheclaw |\n\n---\n\n## Problem 1: mega_mutation Strategies Completely Buried\n\n**mega_mutation** is the #1 system by WR (62.9%, 124 resolved, PnL +$246.20) but has only **1 active pick**. Its strategies:\n\n| Strategy | WR | Trades | PnL | Active |\n|----------|-----|--------|-----|--------|\n| mega_mutation_macd_rsi_m048 | 67.3% | 110 | $377.24 | 0 |\n| mega_mutation_macd_rsi_m017 | 66.7% | 18 | $40.42 | 0 |\n| mega_mutation_ema_momentum_m006 | 56.2% | 73 | $17.41 | 0 |\n\n**Why buried:** mega_mutation strategies have 0 active picks. They appear in the leaderboard but are NOT feeding into Smart Picks or the dashboard's headline metrics.\n\n**Impact:** $435+ in realized PnL from a single mutation system, invisible on the main dashboard.\n\n---\n\n## Problem 2: kimi_riseoftheclaw Strategies Under-Sized\n\n**kimi_riseoftheclaw** is the #1 system by total PnL ($410.77) with 751 resolved picks. Its best strategies:\n\n| Strategy | WR | Trades | PnL | Active |\n|----------|-----|--------|-----|--------|\n| rs-breakout-scout | 72.1% | 43 | $98.64 | 1 |\n| donchian-stock-breakout | 78.6% | 14 | $87.45 | 0 |\n| ema-ribbon-momentum-scout | 68.4% | 19 | $44.03 | 2 |\n| crypto-momentum-scout | 58.6% | 29 | $43.99 | 0 |\n| mtf-align-scout | 54.5% | 22 | $42.07 | 0 |\n| price-accel-scout | 57.9% | 19 | $38.51 | 0 |\n\n**Why buried:** These are scout-level strategies with low active pick counts. They perform well historically but aren't being sized up.\n\n---\n\n## Problem 3: alpha_engine Main System is LOSING\n\nThe primary `alpha_engine` system:\n- **WR: 37.1%** (143 resolved, 53 wins, 90 losses)\n- **PnL: -$75.56**\n- **28 active picks**\n\nThis is the system generating most of the dashboard's headline numbers. Meanwhile, strategies WITHIN alpha_engine (like drawdown_recovery_rsi_eth at 73.9% WR) are winners but get averaged into the losing aggregate.\n\n---\n\n## Problem 4: Duplicate Leaderboard Entries\n\nEvery leaderboard entry appears **exactly twice** \u2014 once with `source=\"\"` and once with the actual source. Example:\n\n```\nmega_mutation_macd_rsi_m048: source=\"\"              n=110\nmega_mutation_macd_rsi_m048: source=\"mega_mutation\"  n=110\n```\n\nThis inflates the apparent count of strategies and may affect aggregation.\n\n---\n\n## Problem 5: Smart Picks Only Has 4 Picks\n\nThe Smart Picks feed contains only **4 picks** despite:\n- 16+ strategies with forward PF > 2.0 and n >= 10\n- 1,021 leaderboard entries\n- 126 source systems\n\nCurrent Smart Picks:\n- MeanReversionBB (2 picks)\n- drawdown_recovery_rsi_xrp (1 pick)\n- VWAP Deviation Scalp (1 pick)\n\n**Missing from Smart Picks:** mega_mutation, donchian-stock-breakout, rs-breakout-scout, strong consensus picks.\n\n---\n\n## Problem 6: AI Tournament Leaders Not Leveraged\n\nTop AI tournament models by accuracy (n>=10 resolved):\n\n| Model | WR | Resolved | Avg PnL |\n|-------|-----|----------|---------|\n| llm7_qwen | 66.0% | 53 | +0.86% |\n| cursor_agent | 65.5% | 55 | +1.37% |\n| minimax_m2_5 | 63.8% | 47 | +0.38% |\n| command_a | 62.9% | 62 | +0.54% |\n| llama4_scout | 61.5% | 52 | +1.39% |\n| grok3 | 59.0% | 83 | +1.81% |\n\nThese models are picking at 59-66% accuracy but their picks don't appear to feed into Smart Picks sizing decisions.\n\n---\n\n## Problem 7: Per-Asset-Class Health vs Reality\n\nDashboard shows:\n\n| Class | Status | WR | PF |\n|-------|--------|-----|-----|\n| CRYPTO | stressed | 35.0% | 0.87 |\n| EQUITY | thin_sample | 27.3% | 0.05 |\n| FOREX | thin_sample | 27.8% | 0.89 |\n| COMMODITY | insufficient | 42.9% | 1.96 |\n| BOND | insufficient | 0% | null |\n\nBut the **leaderboard** shows winning strategies in EVERY class:\n- CRYPTO: mega_mutation (67.3% WR), drawdown_recovery_rsi_eth (73.9%)\n- EQUITY: donchian-stock-breakout (78.6%), gap-and-go-stocks (66.7%)\n- FOREX: drawdown_recovery_rsi_sol (61.5%)\n- COMMODITY: (needs more data)\n\nThe per-class health metrics are averaging ALL strategies (including losers), hiding the winners.\n\n---\n\n## Problem 8: Predictions Leaderboard Anomaly\n\n| Predictor | WR | N | Avg PnL | Tier |\n|-----------|-----|---|---------|------|\n| stocktwits:JaredSotken | 100% | 31 | +1.19% | PROVEN |\n| polymarket:consensus | 95.6% | 45 | **-47.57%** | PROVEN |\n\n**polymarket:consensus** has 95.6% accuracy but **-47.57% avg PnL** \u2014 winning predictions but losing money on sizing. This suggests the tier system is broken for prediction markets.\n\n---\n\n## Recommendations\n\n### Immediate Fixes\n\n1. **Promote mega_mutation to Smart Picks** \u2014 PF 4.39, n=110, $377 PnL deserves active sizing\n2. **Size up kimi_riseoftheclaw scout strategies** \u2014 donchian, rs-breakout, ema-ribbon all have PF > 2.5\n3. **Fix duplicate leaderboard entries** \u2014 deduplicate by (strategy, source_system) pair\n4. **Add per-strategy filtering to Smart Picks** \u2014 don't just use aggregate system WR\n\n### Architecture Changes\n\n5. **Per-strategy health panels** on dashboard \u2014 show top 10 strategies by forward PF, not just system-level\n6. **Smart Picks should consider strategy-level performance**, not just system-level\n7. **AI tournament model consensus** should feed into Smart Picks when multiple top models agree\n8. **Fix predictions tier system** \u2014 polymarket consensus should be LOSING tier despite high accuracy\n\n### Monitoring\n\n9. **Alert when a strategy has PF > 3.0 and 0 active picks** \u2014 this is the buried winner pattern\n10. **Track strategy-to-Smart-Picks pipeline** \u2014 ensure winners flow through to active picks\n\n---\n\n## Files to Check\n\n- `audit_dashboard/data/dashboard_data.json` \u2014 main data source\n- `audit_dashboard/data/ai_tournament_model_summary.json` \u2014 AI model performance\n- `audit_dashboard/data/pick_summary_stats_48h.json` \u2014 recent pick stats\n- `audit_dashboard/pick_funnel.html` \u2014 pick funnel display\n- `audit_dashboard/template.html` \u2014 main dashboard\n- `alpha_engine/smart_picks_engine.py` \u2014 Smart Picks selection logic\n- `audit_trail/dashboard_generator.py` \u2014 dashboard data generation"
      },
      {
        "enhancement_id": 40,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Fix incidents.html EST timestamps + add enhancement_plan + target_date columns to ENHANCEMENT tables",
        "description": "From 2026-05-29-COMPREHENSIVE-QUANT-ANALYSIS.md + this subagent (Tier 1 recs #3/#4). incidents.html timestamps broken; no audit trail for enhancement plans/dates. Add schema columns + population + generator fixes for credible /audit/incidents.html as Goal #1 task board.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-05-27-synth-05-29-hunt-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "incidents.html shows correct EST + every enhancement has plan + target_date; full audit trail",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:42:34",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-29-COMPREHENSIVE-QUANT-ANALYSIS.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Comprehensive Quant Data Dive \u2014 May 29, 2026\n\n> **Purpose:** Full-spectrum quantitative audit of pick performance, edge readiness, diversification, and signal quality across all asset classes. Generated from live DB + canonical JSON data sources.\n>\n> **Data sources:** `at_raw_picks` (ejaguiar1_stocks), `money_ready_verdict.json`, `pf_registry.json`, `correlation_regime.json`, `nav_surface_edge_matrix.json`, `ai_tournament_leaderboard.json`\n\n---\n\n## Table of Contents\n\n1. [Executive Summary](#1-executive-summary)\n2. [Ground Truth \u2014 Money Ready Verdict](#2-ground-truth--money-ready-verdict)\n3. [PF Registry \u2014 Raw vs Policy-Clean](#3-pf-registry--raw-vs-policy-clean)\n4. [Bayesian Confidence \u2014 Credible Intervals](#4-bayesian-confidence--credible-intervals)\n5. [Correlation Matrix \u2014 Portfolio Diversification](#5-correlation-matrix--portfolio-diversification)\n6. [Information Coefficient \u2014 Signal Quality](#6-information-coefficient--signal-quality)\n7. [Per-Strategy Performance](#7-per-strategy-performance)\n8. [Nav Surface Edge Matrix](#8-nav-surface-edge-matrix)\n9. [AI Tournament Leaderboard](#9-ai-tournament-leaderboard)\n10. [Strategy Gap Audit & Hypothesis Registry](#10-strategy-gap-audit--hypothesis-registry)\n11. [Key Recommendations](#11-key-recommendations)\n\n---\n\n## 1. Executive Summary\n\n| Metric | Value |\n|--------|-------|\n| Total picks in DB | **150,070** |\n| Resolved picks (WON/LOST) | **23,048** |\n| Picks still OPEN | **45,411** |\n| Unique strategies with resolved picks | **323** |\n| Classes tracked | 8 (CRYPTO, EQUITY, FOREX, FUTURES, COMMODITY, ETF, PENNY_STOCK, UNKNOWN) |\n| Classes passing Tier-2 (policy-clean) | **0 / 8** |\n\n**Core finding:** 0/8 asset classes pass the Tier-2 policy-clean threshold for production readiness. CRYPTO is the closest (PF 1.31, 652 resolved) but fails on WR < 50% and extreme MDD. Every other class has insufficient data (n < 100) for statistically significant conclusions.\n\n---\n\n## 2. Ground Truth \u2014 Money Ready Verdict\n\n**Source:** `audit_dashboard/data/money_ready_verdict.json` (generated 2026-05-28T21:12 UTC)\n\n| Class | n_resolved | n_raw | WR | PF | Verdict | Top Issue |\n|-------|-----------|-------|-----|------|---------|-----------|\n| **CRYPTO** | 652 | ? | 41.4% | 1.31 | **NOT_READY** | WR < 50%, MDD 100%, CVaR -86% |\n| **UNKNOWN** | 36 | ? | 50.0% | 1.54 | INSUFFICIENT_DATA | n < 100, source concentration |\n| **EQUITY** | 24 | ? | 25.0% | 0.04 | INSUFFICIENT_DATA | n < 100, MDD 97%, CVaR -84% |\n| **FOREX** | 20 | ? | 30.0% | 0.92 | INSUFFICIENT_DATA | n < 100, PF < 1, USDJPY concentration |\n| **FUTURES** | 11 | ? | 9.1% | 0.48 | INSUFFICIENT_DATA | n < 100, ~95% single-engine |\n| **COMMODITY** | 9 | ? | 44.4% | 1.81 | INSUFFICIENT_DATA | n < 100, gold concentration |\n| **ETF** | 3 | ? | 33.3% | 0.19 | INSUFFICIENT_DATA | n < 100 |\n| **PENNY_STOCK** | 1 | ? | 0.0% | 0.00 | INSUFFICIENT_DATA | n < 100 |\n\n**Key insight:** The policy-clean verdict strips away dup-inflated and single-source picks. CRYPTO drops from ~30% raw WR to 35.6% policy-clean \u2014 the raw WR was inflated by undeduplicated picks from the same source.\n\n---\n\n## 3. PF Registry \u2014 Raw vs Policy-Clean\n\n**Source:** `audit_dashboard/data/pf_registry.json`\n\n### Raw (all resolved picks)\n\n| Class | n | Wins | Losses | WR | PF |\n|-------|---|------|--------|-----|-----|\n| CRYPTO | 837 | 251 | 531 | **30.0%** | **0.300** |\n| FOREX | 48 | 20 | 28 | **41.7%** | **1.444** |\n| COMMODITY | 26 | 5 | 21 | **19.2%** | **0.772** |\n| EQUITY | 24 | 6 | 18 | **25.0%** | **0.045** |\n| FUTURES | 13 | 1 | 12 | **7.7%** | **0.400** |\n| UNKNOWN | 5 | 3 | 2 | **60.0%** | **1.705** |\n| ETF | 3 | 1 | 2 | **33.3%** | **0.202** |\n| BOND | 2 | 0 | 2 | **0.0%** | **0.000** |\n| PENNY_STOCK | 1 | 0 | 1 | **0.0%** | **0.000** |\n\n### Policy-Clean (deduped, filtered)\n\n| Class | n | Wins | Losses | WR | PF |\n|-------|---|------|--------|-----|-----|\n| CRYPTO | 526 | 187 | 339 | **35.6%** | **0.864** |\n| EQUITY | 24 | 6 | 18 | **25.0%** | **0.043** |\n| FOREX | 21 | 7 | 14 | **33.3%** | **0.988** |\n| FUTURES | 11 | 1 | 10 | **9.1%** | **0.475** |\n| COMMODITY | 9 | 4 | 5 | **44.4%** | **1.812** |\n| UNKNOWN | 4 | 2 | 2 | **50.0%** | **1.362** |\n| ETF | 3 | 1 | 2 | **33.3%** | **0.193** |\n| PENNY_STOCK | 1 | 0 | 1 | **0.0%** | **0.000** |\n\n**Gap analysis:** The policy-clean filter removes ~37% of CRYPTO picks (311 of 837) as dupes or single-source artifacts. FOREX drops from 48 to 21 (~56% filtered). The raw WRs are significantly inflated by undeduplicated data \u2014 always trust policy-clean.\n\n---\n\n## 4. Bayesian Confidence \u2014 Credible Intervals\n\nWilson score 95% credible intervals (uniform Beta(1,1) prior) per asset class:\n\n| Class | n | WR | CI Lo | CI Hi | CI Width | Verdict |\n|-------|---|-----|-------|-------|----------|---------|\n| **CRYPTO** | 837 | 30.0% | 27.0% | 33.2% | **6.2pp** | \u2705 Tight \u2014 actionable |\n| **FOREX** | 48 | 41.7% | 29.2% | 55.9% | **26.7pp** | \u26a0\ufe0f Wide |\n| **COMMODITY** | 26 | 19.2% | 10.0% | 40.2% | **30.3pp** | \u26a0\ufe0f Wide |\n| **EQUITY** | 24 | 25.0% | 13.4% | 46.7% | **33.3pp** | \u26a0\ufe0f Very wide |\n| **FUTURES** | 13 | 7.7% | 3.4% | 40.5% | **37.2pp** | \u26a0\ufe0f Almost meaningless |\n| **ETF** | 3 | 33.3% | 5.6% | 80.7% | **75.1pp** | \u274c Unreliable |\n| **BOND** | 2 | 0.0% | 0.7% | 66.4% | **65.8pp** | \u274c Unreliable |\n| **PENNY_STOCK** | 1 | 0.0% | 0.1% | 79.4% | **79.4pp** | \u274c Unreliable |\n\n**Key insight:** CRYPTO is the ONLY class where the CI width (< 7pp) is tight enough for statistical confidence. Every other class needs minimum 100+ resolved picks before its WR is trustworthy.\n\nThe CI width follows an approximate \u221a(1/n) relationship:\n- n=837 \u2192 6.2pp width\n- n=100 \u2192 ~14pp width\n- n=50 \u2192 ~20pp width\n- n=25 \u2192 ~28pp width\n- n=10 \u2192 ~40pp width\n\n---\n\n## 5. Correlation Matrix \u2014 Portfolio Diversification\n\n**Source:** `correlation_regime.json`, n=411 observations, 30-day window\n\n```\n                BOND  CRYPTO  EQUITY  ETF_SMALL  FOREX_USD  FUTURES_COT\nBOND          1.000   0.052   0.181    -0.038      0.141      -0.198\nCRYPTO        0.052   1.000   0.134     0.132      0.147       0.089\nEQUITY        0.181   0.134   1.000     0.785      0.155       0.082\nETF_SMALLCAP -0.038   0.132   0.785     1.000      0.024       0.046\nFOREX_USD     0.141   0.147   0.155     0.024      1.000       0.301\nFUTURES_COT  -0.198   0.089   0.082     0.046      0.301       1.000\n```\n\n### Key Diversification Insights\n\n| Pair | Correlation | Diversification Value |\n|------|-------------|----------------------|\n| **EQUITY \u2194 ETF_SMALLCAP** | **0.785** | \u274c Highly redundant \u2014 no benefit holding both |\n| **BOND \u2194 CRYPTO** | 0.052 | \u2705 Near-zero \u2014 genuine diversifier |\n| **CRYPTO \u2194 EQUITY** | 0.134 | \u2705 Low \u2014 strong diversifier |\n| **CRYPTO \u2194 BOND** | 0.052 | \u2705 Near-zero \u2014 best diversifier pair |\n| **FUTURES_COT \u2194 BOND** | -0.198 | \u2705 Negative \u2014 hedge |\n| **FOREX_USD \u2194 ETF_SMALLCAP** | 0.024 | \u2705 Near-zero \u2014 diversifier |\n| **FOREX_USD \u2194 EQUITY** | 0.155 | \u2705 Low \u2014 diversifier |\n| **FUTURES_COT \u2194 CRYPTO** | 0.089 | \u2705 Near-zero \u2014 diversifier |\n\n### Over-Concentrated Cluster\n\nEQUITY / ETF_SMALLCAP / (BOND to lesser extent) form a high-correlation cluster (0.18\u20130.79). These classes move together and offer minimal diversification benefit when held together.\n\n**Best diversifiers:** CRYPTO (near-zero vs everything), FUTURES_COT (slightly negative vs BOND/CRYPTO), FOREX_USD (low vs EQUITY/ETF).\n\n---\n\n## 6. Information Coefficient \u2014 Signal Quality\n\n**Source:** Live DB query on `at_raw_picks` \u2014 confidence score vs outcome correlation.\n\nTotal resolved picks: **23,048**\nPicks with confidence scores: **21,373** (93%)\n\n### Top Positive IC Strategies\n\n| Strategy | Class | n | WR | Avg Conf | Conf(Won) | Conf(Lost) | IC(\u0394) |\n|----------|-------|---|-----|----------|-----------|-----------|-------|\n| regime_mild_bull | EQUITY | 1008 | 98.6% | 0.903 | 0.897 | 0.807 | **+0.0897** |\n| myfxbook_retail_contrarian | FOREX | 220 | 81.4% | 0.789 | 0.795 | 0.707 | **+0.0877** |\n| combined_confidence | FOREX | 120 | 90.0% | 0.750 | 0.753 | 0.685 | **+0.0682** |\n| liquidity_capture_v1 | FOREX | 99 | 100.0% | 0.909 | 0.909 | \u2014 | +0.0681 |\n| trend_momentum_micro | EQUITY | 444 | 33.6% | 0.383 | 0.438 | 0.372 | **+0.0653** |\n| volatility_regime_adaptive | FOREX | 746 | 97.5% | 0.756 | 0.756 | 0.692 | +0.0647 |\n| multi_timeframe_alignment | FOREX | 202 | 93.6% | 0.682 | 0.683 | 0.619 | +0.0633 |\n| ic_contrarian_sentiment | FOREX | 212 | 100.0% | 0.972 | 0.972 | \u2014 | +0.0593 |\n\n### Bottom (Negative IC) Strategies\n\n| Strategy | Class | n | WR | Avg Conf | Conf(Won) | Conf(Lost) | IC(\u0394) |\n|----------|-------|---|-----|----------|-----------|-----------|-------|\n| copy_trader_realized | CRYPTO | 102 | 43.1% | 0.404 | 0.388 | 0.416 | **-0.0279** |\n| copy_trader_intraday_top | CRYPTO | 102 | 41.2% | 0.498 | 0.489 | 0.504 | **-0.0154** |\n| copy_trader_spot | CRYPTO | 115 | 27.0% | 0.465 | 0.457 | 0.468 | **-0.0109** |\n\n**Key insight:** Most strategies (65%) have IC(\u0394) near zero \u2014 their confidence scores don't predict outcomes. The strongest positive IC comes from FOREX strategies (+0.06 to +0.09), suggesting the FOREX confidence model is the most calibrated. CRYPTO copy-trader strategies show negative IC \u2014 higher confidence predicts worse outcomes.\n\n---\n\n## 7. Per-Strategy Performance\n\n**Source:** Live DB query on `at_raw_picks`, n \u2265 20 resolved.\n\n### Top Strategies by Volume (n)\n\n| Strategy | Class | n | WR | PF | Avg PnL% |\n|----------|-------|---|-----|------|----------|\n| smart_money_consensus | EQUITY | 5,084 | 71.4% | 9.245 | \u2014 |\n| stocks_rsi2_pullback | EQUITY | 2,417 | 56.9% | 2.259 | \u2014 |\n| ig_contrarian_sentiment | FOREX | 2,038 | 97.7% | 108.745 | \u2014 |\n| combined_confidence | FOREX | 1,368 | 87.4% | 9.126 | \u2014 |\n| myfxbook_retail_contrarian | FOREX | 1,293 | 82.2% | 6.123 | \u2014 |\n| volatility_regime_adaptive | FOREX | 1,042 | 95.7% | 27.875 | \u2014 |\n| regime_mild_bull | EQUITY | 1,008 | 98.6% | 227.273 | \u2014 |\n| copy_trader_intel | CRYPTO | 871 | 45.7% | 1.305 | \u2014 |\n| copy_trader_realized | CRYPTO | 843 | 43.2% | 0.872 |"
      },
      {
        "enhancement_id": 36,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "triage_dashboard_P0_regression_diff_and_escalation",
        "description": "Add post-render job + TRIAGE DASHBOARD section on incidents.html showing P0 counts, age>7d escalation, and OPEN->RESOLVED->OPEN regressions. From 2026-05-25_incidents_triage_consult_codex + grok. Makes nightly incidents page credible for Goal #1 work.",
        "category": "UI",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-EAGLE-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All P0s >7d or regressed flagged daily; triage becomes actionable",
        "target_release": "2026-06-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:40:19",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_incidents_triage_consult_codex.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Incidents Triage Consult \u2014 codex\n\n**Date:** 2026-05-25\n**Engine:** codex\n**Prompt:** see /tmp/consult_prompt.md (also reproduced inline below)\n\n## Reply\n\n```\nOpenAI Codex v0.133.0\n--------\nworkdir: /home/eaguiar2015/findtorontoevents_antigravity.ca\nmodel: gpt-5.5\nprovider: openai\napproval: never\nsandbox: workspace-write [workdir, /tmp, $TMPDIR]\nreasoning effort: none\nreasoning summaries: none\nsession id: 019e5da8-ceb9-7401-a73e-100ef5721d4c\n--------\nuser\n# Context\n\nRepo: findtorontoevents.ca/audit \u2014 a multi-asset-class trading-signal dashboard.\n\nA nightly workflow (`.github/workflows/incidents-enhancements-nightly.yml`) renders an \"Incidents + Enhancements\" page from MySQL tables seeded by `tools/audit_pick_funnel/seed_incidents_enhancements.py`. The seed script writes findings from multi-AI audits into rows tagged by asset class.\n\n## Current snapshot (2026-05-25 05:16 UTC)\n\n- 38 incidents total, 38 enhancements total\n- Severity mix: 18 P0, 12 P1, 5 P2, 3 P3\n- Status mix: 33 OPEN, 4 TRIAGED, 1 RESOLVED\n- All 38 enhancements are BACKLOG, none assigned\n- 33/38 OPEN incidents are unassigned\n- All incidents were CREATED in the last ~1.6h (the seed script reinserts them every nightly run; no real per-row \"age\" data \u2014 the table is effectively a fresh snapshot of a curated findings backlog, not a live ticketing system)\n- Reporter field in JSON is null for 38/38 \u2014 the seed has the reporter but it isn't surfaced in the JSON sidecar (a small bug to flag)\n\n## Top 10 by priority\n\n1. P0 OVERALL \u2014 trust_score NULL on 99.99% of closed picks (HC overlay unverifiable)\n2. P0 OVERALL \u2014 5 FOREX rows have pnl_pct < -100% (one at -106,700%) \u2014 clamp bug, distorts class\n3. P0 OVERALL \u2014 signal_outcomes table 82 days stale (resolver dead)\n4. P0 OVERALL \u2014 COT paper pilot over-emission (counts 1 weekly CFTC release as ~100 trades; inflates DSR=1.0/WR=86.5% SUPREME EDGE)\n5. P0 OVERALL \u2014 ML calibration system-wide INVERTED (conf>=0.9 -> WR 14.4%; conf 0.5-0.6 -> WR 60.3%); smart_picks_engine weights confidence-derived signal at 35%\n6. P0 OVERALL \u2014 smart_picks.json 25 days stale\n7. P0 STOCKS \u2014 PEAD equity strategy stuck in shadow (only WF-verified equity strategy; broken earnings_drift is live instead)\n8. P0 OVERALL \u2014 PnL integrity mismatch on 38.97% of sampled closed picks (>1% delta between stored pnl_pct and recomputed)\n9. P0 OVERALL \u2014 WON status rows show avg pnl_pct = -41.1% (labeling bug)\n10. P0 OVERALL \u2014 56,559 ghost rows in trading_picks (top cohort: 20,474 identical MATICUSDT entries)\n\nAlso notable: P0 OVERALL \u2014 29.2M open positions; forward_validator frozen 270h; trust_score NULL bug above blocks the High-Conviction overlay.\n\n## Proposed triage process (lightweight)\n\nTrigger: nightly cron 04:30 UTC (post-seed) + manual `workflow_dispatch`. Plus a weekly Sunday \"stale audit\" pass.\n\nRoles (all AI agents, kicked off via existing swarm tooling):\n1. CLAIM \u2014 agent picks a P0 from OPEN, sets status=TRIAGED, writes assigned_to.\n2. INVESTIGATE \u2014 pulls evidence (DB query / log tail / report cross-link), writes a short investigation note into reports/triage/INCIDENT_<id>_<slug>.md.\n3. PROPOSE-FIX \u2014 outputs either (a) a one-shot SQL/code patch with the success metric, or (b) a Wire-Up Plan per CLAUDE.md if the fix needs a new module.\n4. VERIFY \u2014 separate engine re-runs the success metric. On pass, sets status=RESOLVED + resolution_notes + resolved_at. On fail, kicks back to INVESTIGATE.\n\nExit criteria for each row: success_metric reproducible by an independent engine OR the row is RESOLVED-as-DUPLICATE/WONTFIX with a stated reason.\n\nIntegration with the nightly workflow:\n- Add a \"post-render\" job that diffs the new JSON against the previous commit to flag any P0 that went from OPEN -> RESOLVED -> OPEN (regression) or any P0 with age > 7 days since first created_at (escalate).\n- Surface a TRIAGE DASHBOARD section at the top of incidents.html with: \"X P0 OPEN, Y P0 TRIAGED, Z resolved this week, oldest unresolved age\".\n- The seed script becomes append-only (ON DUPLICATE KEY UPDATE only touches updated_at, not status/assigned_to/resolution_notes) so triage state isn't blown away every night.\n\n# Questions for you\n\n1. Is this triage process the right shape, or am I over-engineering it for a 38-row backlog?\n2. Of the top 10, what would YOU prioritize first and why? (Specifically: is the COT over-emission item more important than the trust_score NULL item, given the SUPREME EDGE narrative on the page?)\n3. What's the biggest risk you see in this incident backlog that I might be missing?\n4. Any change to the proposed nightly workflow that would meaningfully reduce false-positive churn?\n\nKeep your answer under 600 words. Be direct.\n\nwarning: Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.\ncodex\nI\u2019ll first load the workspace context the repo asks for, then I\u2019ll answer the triage questions directly.\ncodex\nThe required context reads hit a sandbox failure before any file content loaded: `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted`. I\u2019ll retry a single plain read without the login shell; if the sandbox still blocks it, I\u2019ll proceed from the provided incident context and note that limitation.\ncodex\n1. The process is the right shape, but keep it thin. For 38 rows, don\u2019t build a full incident-management system. Do build: persistent status, assignee, first_seen_at, resolved_at, resolution_notes, reproducible success_metric. The CLAIM \u2192 INVESTIGATE \u2192 PROPOSE-FIX \u2192 VERIFY loop is sane if each step writes one small artifact and updates one row.\n\n2. I would prioritize the **data-integrity spine** first:\n   1. `signal_outcomes` 82 days stale / `forward_validator` frozen / `smart_picks.json` stale\n   2. PnL integrity mismatch + WON rows with negative avg PnL\n   3. `trust_score` NULL\n   4. COT over-emission\n   5. ML calibration inverted\n\n   On COT vs `trust_score`: I\u2019d fix **trust_score NULL first** unless the COT \u201cSUPREME EDGE\u201d claim is highly visible to users. `trust_score` blocks the High-Conviction overlay across the whole system. COT is narrower but reputationally dangerous because it creates a fake success narrative. If the page is currently showcasing COT as proof of edge, put COT immediately after liveness/integrity, possibly before `trust_score`.\n\n3. Biggest missing risk: **you may be measuring a corrupted universe**. Ghost rows, stale outcomes, broken PnL, bad WON labels, and reinsertion snapshots mean rankings, severity, win rates, and \u201cresolved\u201d state can all be artifacts. Before optimizing strategies, protect the audit pipeline from garbage-in confidence. Add invariant checks: no duplicate natural keys, no impossible PnL, no stale resolver beyond threshold, no WON with negative recomputed return unless explicitly defined.\n\n4. To reduce false-positive churn, add stable identity and first-seen tracking. The seed should use a deterministic `finding_key` derived from asset_class + issue_type + affected_table/module + normalized title, then `ON DUPLICATE KEY UPDATE` only evidence fields and `updated_at`. Never overwrite `status`, `assigned_to`, `first_seen_at`, or `resolution_notes`.\n\nAlso add a \u201csuppressed/resolved regression\u201d rule: if a resolved P0 reappears with the same `finding_key`, mark it `REGRESSED` instead of creating a fresh OPEN row. That will make the nightly page much more actionable.\ntokens used\n25,297\n1. The process is the right shape, but keep it thin. For 38 rows, don\u2019t build a full incident-management system. Do build: persistent status, assignee, first_seen_at, resolved_at, resolution_notes, reproducible success_metric. The CLAIM \u2192 INVESTIGATE \u2192 PROPOSE-FIX \u2192 VERIFY loop is sane if each step writes one small artifact and updates one row.\n\n2. I would prioritize the **data-integrity spine** first:\n   1. `signal_outcomes` 82 days stale / `forward_validator` frozen / `smart_picks.json` stale\n   2. PnL integrity mismatch + WON rows with negative avg PnL\n   3. `trust_score` NULL\n   4. COT over-emission\n   5. ML calibration inverted\n\n   On COT vs `trust_score`: I\u2019d fix **trust_score NULL first** unless the COT \u201cSUPREME EDGE\u201d claim is highly visible to users. `trust_score` blocks the High-Conviction overlay across the whole system. COT is narrower but reputationally dangerous because it creates a fake success narrative. If the page is currently showcasing COT as proof of edge, put COT immediately after liveness/integrity, possibly before `trust_score`.\n\n3. Biggest missing risk: **you may be measuring a corrupted universe**. Ghost rows, stale outcomes, broken PnL, bad WON labels, and reinsertion snapshots mean rankings, severity, win rates, and \u201cresolved\u201d state can all be artifacts. Before optimizing strategies, protect the audit pipeline from garbage-in confidence. Add invariant checks: no duplicate natural keys, no impossible PnL, no stale resolver beyond threshold, no WON with negative recomputed return unless explicitly defined.\n\n4. To reduce false-positive churn, add stable identity and first-seen tracking. The seed should use a deterministic `finding_key` derived from asset_class + issue_type + affected_table/module + normalized title, then `ON DUPLICATE KEY UPDATE` only evidence fields and `updated_at`. Never overwrite `status`, `assigned_to`, `first_seen_at`, or `resolution_notes`.\n\nAlso add a \u201csuppressed/resolved regression\u201d rule: if a resolved P0 reappears with the same `finding_key`, mark it `REGRESSED` instead of creating a fresh OPEN row. That will make the nightly page much more actionable.\n```"
      },
      {
        "enhancement_id": 37,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "multi_AI_panel_grounding_failure_mandate",
        "description": "Ungrounded 5-engine panel called COMMODITY #1 alpha (PF 4.64 from 85% CT=F leakage); grounded panel correctly flagged DATA_QUALITY_LEAKAGE. From 2026-05-25_multi_ai_panel_meta_review. Mandate leakage signals + hypothesis_registry rejected entries in every consult prompt.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-EAGLE-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "0 ungrounded COMMODITY-style false positives in future panels",
        "target_release": "2026-06-08",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:40:19",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_multi_ai_panel_meta_review.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Multi-AI Panel Meta-Review \u2014 2026-05-25\n\n**TL;DR:** Two parallel multi-AI panels reached **opposite verdicts on the same COMMODITY question.** The difference was prompt grounding, not model capability. A 5-engine NVIDIA NIM panel (working from pre-dedup numbers) called COMMODITY the system's #1 alpha; a 3-engine codex/grok/gemini panel (shown the same numbers PLUS the leakage signals) classified it `DATA_QUALITY_LEAKAGE` at ~90% confidence. **Independent in-house verification confirmed the leakage panel.** This is the most important lesson of the session: multi-AI consensus is only as good as the prompt grounding.\n\n---\n\n## The two panels\n\n### Panel A \u2014 NVIDIA NIM 5-model (DeepSeek/Roo session, 2026-05-25)\n\nEngines: Kimi K2.6, GPT-OSS-120B, GLM-5.1, Nemotron Super 49B, Mistral Nemotron.\nPrompt: per-class WR/PF/Sharpe + 7d/30d/90d windows, **without** leakage signals or dedup history.\nVerdict: **5/5 agreed COMMODITY is #1 alpha, allocate 20-30%.**\nReport: [`reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`](2026-05-25_asset_class_edge_audit_deepseek_session.md) (Roo's audit).\n\n### Panel B \u2014 Codex / Grok / Gemini (this session, also 2026-05-25)\n\nEngines: OpenAI Codex, xAI Grok, Google Gemini.\nPrompt: same JSON cell **PLUS** the leakage concerns (single-symbol concentration, train_pf vs holdout_pf discontinuity, source-system mechanics, prior 2026-05-16 autopsy).\nVerdict: **3/3 agreed `DATA_QUALITY_LEAKAGE`, ~90% confidence**, recognized as residue from already-rejected H-001 (CFTC COT publication-lag look-ahead, REJECTED 2026-05-20 under M-095).\nReports: [`reports/2026-05-25_commodity_cot_edge_triangulation.md`](2026-05-25_commodity_cot_edge_triangulation.md) + per-engine consult files.\n\n---\n\n## In-house ground-truth verification\n\nThree independent investigations (committed `28d221116` / `406661cf9` / `a93dec2af`) confirmed Panel B:\n\n1. **DB trade-level forensics:** 87.6% (120/137) of the headline cell is one symbol (CT=F cotton); other 17 trades are wheat/soybean losses. 136 of 137 trades fall in the last 30 days, 0 in 60-90d. Mean win is +0.0255%/trade via PRICE_RESOLVED intraday drift \u2014 realistic CT=F round-trip cost (~2-4 bp) wipes the edge. Effective independent Bonferroni tests \u2248 7, not 200 (25 cells share identical trade-id sets).\n2. **Filter pipeline tracing:** `top_edges.py` runs no dedup; the same source/cell collapsed PF 20.54 \u2192 0.17 after 72h COT dedup in a 2026-05-16 swarm autopsy (cited in `quality_gates.py:5575-5581`).\n3. **Merged-cohort `build_pf_registry` rerun** (the new MySQL flag `PF_REGISTRY_INCLUDE_DB=1` from `a93dec2af`): COMMODITY by_asset_class_policy_clean_net PF moves from 0.18 \u2192 **0.937** when DB is merged \u2014 well under T2's 1.5 bar, matching Panel B's prediction range of 0.3-1.0.\n\n**The \"edge\" was already known-bad as of 2026-05-20.** Panel A reconstituted it from ungrounded numbers.\n\n---\n\n## What Panel A got right anyway\n\nRoo's session surfaced one striking finding that does NOT depend on the COMMODITY cell and is worth following up:\n\n> **648 un-gated picks went 0-for-648 over the 6-day window (2026-05-16 \u2192 21), destroying \u2212825% PnL.**\n> - `moderate_confidence`: 455 picks, 0.0% WR, \u22121.47%/pick avg\n> - `low_confidence`: 193 picks, 0.0% WR, \u22120.82%/pick avg\n> - Meanwhile 300 gated picks (elite_a + profitable_tp) generated +994%.\n\nIf real, this is the single most powerful filter in the system \u2014 gating alone would flip aggregate PnL from \u2212825% to +994% on the same emission. **But** the same scientific standard that debunked COMMODITY applies here:\n\n- 0-for-455 on `moderate_confidence` is statistically implausible (p \u2248 0.5^455) on *honest* trades; the bucket may be **defined by what falls through all gates**, i.e., circular by construction.\n- Need to verify whether the live system actually allocates capital to those buckets or just labels them \u2014 if they're already filtered upstream, \"gate them\" is a no-op.\n\n**Action queued (NOT yet executed):** drop a verification agent on the quality-tier definition + verify the 0-for-648 claim against `audit_dashboard/data/dashboard_data.json::picks.recent_closed` filtered to 2026-05-16..21.\n\nRoo also re-confirmed (in agreement with the .md sweep this session):\n- `regime_adaptive \u00d7 ETF` is the only persona\u00d7asset pair passing all statistical gates (Wilson CI 49.7\u201391.8%).\n- `kimi_signal_tracking` is the top source-system by total PnL over the 6-day window (168 picks, WR 53.6%, +257.34%).\n- `aggregated_picks` shows 74.1% WR at n=58 \u2014 interesting but underpowered for Bonferroni.\n\nThese three findings deserve verification with the same rigor that killed the COMMODITY claim.\n\n---\n\n## Lessons\n\n1. **Prompt grounding is the variable, not model count.** Both panels used reputable models. The 5-engine panel reached a wrong consensus because it never saw the leakage evidence. Future multi-AI consults must include all known leakage signals + a sentence: *\"Be skeptical; if the data suggests one symbol/source dominates, flag concentration risk.\"*\n2. **Multi-AI consensus does not increase signal-to-noise on ungrounded prompts.** It compounds whatever bias is in the prompt by averaging plausible-sounding fabrications.\n3. **The H-001 rejection on 2026-05-20 was real progress** \u2014 the system *had* this lesson on file. It just didn't propagate to Panel A's prompt context. The fix is operational, not statistical: when running `consult-nvidia-models` or `consult-cloudflare-models`, mandate inclusion of `reports/hypothesis_registry.json` rejected-hypothesis entries that intersect the prompt's asset class.\n4. **The `build_pf_registry` MySQL extension (`a93dec2af`) is the load-bearing infrastructure fix here.** It collapsed two divergent cohorts (top_edges raw n=1219 vs verdict policy-clean n=28) into one dedup+policy+NET pipeline. Future \"edge claims\" can be A/B'd against the merged cohort by toggling `PF_REGISTRY_INCLUDE_DB=1`.\n\n---\n\n## Action list\n\n| # | Action | Owner | Status |\n|---|---|---|---|\n| 1 | Save Roo's session report to canonical `reports/` path | session | DONE \u2014 `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md` |\n| 2 | Write this meta-review reconciling the two panels | session | DONE \u2014 this file |\n| 3 | Add an `updates/index.html` card | session | DONE \u2014 same commit |\n| 4 | Add incident \"Multi-AI panel grounding failure\" + 2 enhancements to seed_incidents_enhancements.py | session | DONE \u2014 same commit |\n| 5 | Verify the 0-for-648 quality-gate claim against raw DB cohort | follow-up agent | OPEN |\n| 6 | Verify `regime_adaptive \u00d7 ETF` Wilson CI 49.7-91.8% claim | follow-up agent | OPEN |\n| 7 | Verify `kimi_signal_tracking` / `aggregated_picks` per-source claims | follow-up agent | OPEN |\n| 8 | Update CLAUDE.md guardrail to require leakage-context in multi-AI prompts | session | OPEN |\n\n---\n\n## Related artifacts\n\n- Roo's original report: `audit_reports/ASSET_CLASS_EDGE_AUDIT_2026-05-25.md` and the canonical copy at `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`\n- Codex/Grok/Gemini panel synthesis: `reports/2026-05-25_commodity_cot_edge_triangulation.md`\n- Per-engine consult files: `reports/2026-05-25_commodity_cot_edge_consult_{codex,gemini,grok}.md`\n- DB-level forensics: `reports/2026-05-25_commodity_cot_edge_deep_dive.md`\n- Filter-pipeline tracing: `reports/2026-05-25_policy_clean_vs_top_edges_funnel.md`\n- Pre-registered hypothesis H-101 with kill criteria: `reports/hypothesis_registry.json`\n- MySQL registry extension: `tools/build_pf_registry.py` (gated by `PF_REGISTRY_INCLUDE_DB=1`)"
      },
      {
        "enhancement_id": 35,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "append_only_incidents_seed_with_finding_key",
        "description": "Nightly seed_incidents_enhancements.py re-inserts destroy triage state and create false 'new' P0 churn. From 2026-05-25_incidents_triage_consult_codex.md + gemini. Add deterministic finding_key (asset_class + issue_type + normalized_title) + INSERT ... ON DUPLICATE KEY that only touches evidence/updated_at.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-EAGLE-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Stable status/assigned_to across nightly runs; zero duplicate 'new' P0s on identical findings",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:40:13",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_incidents_triage_consult_codex.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Incidents Triage Consult \u2014 codex\n\n**Date:** 2026-05-25\n**Engine:** codex\n**Prompt:** see /tmp/consult_prompt.md (also reproduced inline below)\n\n## Reply\n\n```\nOpenAI Codex v0.133.0\n--------\nworkdir: /home/eaguiar2015/findtorontoevents_antigravity.ca\nmodel: gpt-5.5\nprovider: openai\napproval: never\nsandbox: workspace-write [workdir, /tmp, $TMPDIR]\nreasoning effort: none\nreasoning summaries: none\nsession id: 019e5da8-ceb9-7401-a73e-100ef5721d4c\n--------\nuser\n# Context\n\nRepo: findtorontoevents.ca/audit \u2014 a multi-asset-class trading-signal dashboard.\n\nA nightly workflow (`.github/workflows/incidents-enhancements-nightly.yml`) renders an \"Incidents + Enhancements\" page from MySQL tables seeded by `tools/audit_pick_funnel/seed_incidents_enhancements.py`. The seed script writes findings from multi-AI audits into rows tagged by asset class.\n\n## Current snapshot (2026-05-25 05:16 UTC)\n\n- 38 incidents total, 38 enhancements total\n- Severity mix: 18 P0, 12 P1, 5 P2, 3 P3\n- Status mix: 33 OPEN, 4 TRIAGED, 1 RESOLVED\n- All 38 enhancements are BACKLOG, none assigned\n- 33/38 OPEN incidents are unassigned\n- All incidents were CREATED in the last ~1.6h (the seed script reinserts them every nightly run; no real per-row \"age\" data \u2014 the table is effectively a fresh snapshot of a curated findings backlog, not a live ticketing system)\n- Reporter field in JSON is null for 38/38 \u2014 the seed has the reporter but it isn't surfaced in the JSON sidecar (a small bug to flag)\n\n## Top 10 by priority\n\n1. P0 OVERALL \u2014 trust_score NULL on 99.99% of closed picks (HC overlay unverifiable)\n2. P0 OVERALL \u2014 5 FOREX rows have pnl_pct < -100% (one at -106,700%) \u2014 clamp bug, distorts class\n3. P0 OVERALL \u2014 signal_outcomes table 82 days stale (resolver dead)\n4. P0 OVERALL \u2014 COT paper pilot over-emission (counts 1 weekly CFTC release as ~100 trades; inflates DSR=1.0/WR=86.5% SUPREME EDGE)\n5. P0 OVERALL \u2014 ML calibration system-wide INVERTED (conf>=0.9 -> WR 14.4%; conf 0.5-0.6 -> WR 60.3%); smart_picks_engine weights confidence-derived signal at 35%\n6. P0 OVERALL \u2014 smart_picks.json 25 days stale\n7. P0 STOCKS \u2014 PEAD equity strategy stuck in shadow (only WF-verified equity strategy; broken earnings_drift is live instead)\n8. P0 OVERALL \u2014 PnL integrity mismatch on 38.97% of sampled closed picks (>1% delta between stored pnl_pct and recomputed)\n9. P0 OVERALL \u2014 WON status rows show avg pnl_pct = -41.1% (labeling bug)\n10. P0 OVERALL \u2014 56,559 ghost rows in trading_picks (top cohort: 20,474 identical MATICUSDT entries)\n\nAlso notable: P0 OVERALL \u2014 29.2M open positions; forward_validator frozen 270h; trust_score NULL bug above blocks the High-Conviction overlay.\n\n## Proposed triage process (lightweight)\n\nTrigger: nightly cron 04:30 UTC (post-seed) + manual `workflow_dispatch`. Plus a weekly Sunday \"stale audit\" pass.\n\nRoles (all AI agents, kicked off via existing swarm tooling):\n1. CLAIM \u2014 agent picks a P0 from OPEN, sets status=TRIAGED, writes assigned_to.\n2. INVESTIGATE \u2014 pulls evidence (DB query / log tail / report cross-link), writes a short investigation note into reports/triage/INCIDENT_<id>_<slug>.md.\n3. PROPOSE-FIX \u2014 outputs either (a) a one-shot SQL/code patch with the success metric, or (b) a Wire-Up Plan per CLAUDE.md if the fix needs a new module.\n4. VERIFY \u2014 separate engine re-runs the success metric. On pass, sets status=RESOLVED + resolution_notes + resolved_at. On fail, kicks back to INVESTIGATE.\n\nExit criteria for each row: success_metric reproducible by an independent engine OR the row is RESOLVED-as-DUPLICATE/WONTFIX with a stated reason.\n\nIntegration with the nightly workflow:\n- Add a \"post-render\" job that diffs the new JSON against the previous commit to flag any P0 that went from OPEN -> RESOLVED -> OPEN (regression) or any P0 with age > 7 days since first created_at (escalate).\n- Surface a TRIAGE DASHBOARD section at the top of incidents.html with: \"X P0 OPEN, Y P0 TRIAGED, Z resolved this week, oldest unresolved age\".\n- The seed script becomes append-only (ON DUPLICATE KEY UPDATE only touches updated_at, not status/assigned_to/resolution_notes) so triage state isn't blown away every night.\n\n# Questions for you\n\n1. Is this triage process the right shape, or am I over-engineering it for a 38-row backlog?\n2. Of the top 10, what would YOU prioritize first and why? (Specifically: is the COT over-emission item more important than the trust_score NULL item, given the SUPREME EDGE narrative on the page?)\n3. What's the biggest risk you see in this incident backlog that I might be missing?\n4. Any change to the proposed nightly workflow that would meaningfully reduce false-positive churn?\n\nKeep your answer under 600 words. Be direct.\n\nwarning: Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.\ncodex\nI\u2019ll first load the workspace context the repo asks for, then I\u2019ll answer the triage questions directly.\ncodex\nThe required context reads hit a sandbox failure before any file content loaded: `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted`. I\u2019ll retry a single plain read without the login shell; if the sandbox still blocks it, I\u2019ll proceed from the provided incident context and note that limitation.\ncodex\n1. The process is the right shape, but keep it thin. For 38 rows, don\u2019t build a full incident-management system. Do build: persistent status, assignee, first_seen_at, resolved_at, resolution_notes, reproducible success_metric. The CLAIM \u2192 INVESTIGATE \u2192 PROPOSE-FIX \u2192 VERIFY loop is sane if each step writes one small artifact and updates one row.\n\n2. I would prioritize the **data-integrity spine** first:\n   1. `signal_outcomes` 82 days stale / `forward_validator` frozen / `smart_picks.json` stale\n   2. PnL integrity mismatch + WON rows with negative avg PnL\n   3. `trust_score` NULL\n   4. COT over-emission\n   5. ML calibration inverted\n\n   On COT vs `trust_score`: I\u2019d fix **trust_score NULL first** unless the COT \u201cSUPREME EDGE\u201d claim is highly visible to users. `trust_score` blocks the High-Conviction overlay across the whole system. COT is narrower but reputationally dangerous because it creates a fake success narrative. If the page is currently showcasing COT as proof of edge, put COT immediately after liveness/integrity, possibly before `trust_score`.\n\n3. Biggest missing risk: **you may be measuring a corrupted universe**. Ghost rows, stale outcomes, broken PnL, bad WON labels, and reinsertion snapshots mean rankings, severity, win rates, and \u201cresolved\u201d state can all be artifacts. Before optimizing strategies, protect the audit pipeline from garbage-in confidence. Add invariant checks: no duplicate natural keys, no impossible PnL, no stale resolver beyond threshold, no WON with negative recomputed return unless explicitly defined.\n\n4. To reduce false-positive churn, add stable identity and first-seen tracking. The seed should use a deterministic `finding_key` derived from asset_class + issue_type + affected_table/module + normalized title, then `ON DUPLICATE KEY UPDATE` only evidence fields and `updated_at`. Never overwrite `status`, `assigned_to`, `first_seen_at`, or `resolution_notes`.\n\nAlso add a \u201csuppressed/resolved regression\u201d rule: if a resolved P0 reappears with the same `finding_key`, mark it `REGRESSED` instead of creating a fresh OPEN row. That will make the nightly page much more actionable.\ntokens used\n25,297\n1. The process is the right shape, but keep it thin. For 38 rows, don\u2019t build a full incident-management system. Do build: persistent status, assignee, first_seen_at, resolved_at, resolution_notes, reproducible success_metric. The CLAIM \u2192 INVESTIGATE \u2192 PROPOSE-FIX \u2192 VERIFY loop is sane if each step writes one small artifact and updates one row.\n\n2. I would prioritize the **data-integrity spine** first:\n   1. `signal_outcomes` 82 days stale / `forward_validator` frozen / `smart_picks.json` stale\n   2. PnL integrity mismatch + WON rows with negative avg PnL\n   3. `trust_score` NULL\n   4. COT over-emission\n   5. ML calibration inverted\n\n   On COT vs `trust_score`: I\u2019d fix **trust_score NULL first** unless the COT \u201cSUPREME EDGE\u201d claim is highly visible to users. `trust_score` blocks the High-Conviction overlay across the whole system. COT is narrower but reputationally dangerous because it creates a fake success narrative. If the page is currently showcasing COT as proof of edge, put COT immediately after liveness/integrity, possibly before `trust_score`.\n\n3. Biggest missing risk: **you may be measuring a corrupted universe**. Ghost rows, stale outcomes, broken PnL, bad WON labels, and reinsertion snapshots mean rankings, severity, win rates, and \u201cresolved\u201d state can all be artifacts. Before optimizing strategies, protect the audit pipeline from garbage-in confidence. Add invariant checks: no duplicate natural keys, no impossible PnL, no stale resolver beyond threshold, no WON with negative recomputed return unless explicitly defined.\n\n4. To reduce false-positive churn, add stable identity and first-seen tracking. The seed should use a deterministic `finding_key` derived from asset_class + issue_type + affected_table/module + normalized title, then `ON DUPLICATE KEY UPDATE` only evidence fields and `updated_at`. Never overwrite `status`, `assigned_to`, `first_seen_at`, or `resolution_notes`.\n\nAlso add a \u201csuppressed/resolved regression\u201d rule: if a resolved P0 reappears with the same `finding_key`, mark it `REGRESSED` instead of creating a fresh OPEN row. That will make the nightly page much more actionable.\n```"
      },
      {
        "enhancement_id": 30,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Verify the 648-for-0 un-gated-picks claim (DeepSeek session)",
        "description": "Roo's NIM panel session (2026-05-25) reports moderate_confidence (n=455) and low_confidence (n=193) buckets went 0-for-648 over the 6-day window 2026-05-16..21, destroying -825% PnL, while 300 gated picks generated +994%. If real this is the single highest-leverage filter in the system. 0-for-455 is statistically implausible (p~=0.5^455) on honest trades \u2014 the bucket may be circularly defined by 'failed all upstream gates.' Verify against audit_dashboard/data/dashboard_data.json::picks.recent_closed filtered to that date range; if buckets are post-gate residuals, 'gate them' is already done.",
        "category": "",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Verified n / WR per quality_tier bucket from raw DB; circular-definition determination documented in reports/",
        "target_release": "2026-06-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:32",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_multi_ai_panel_meta_review.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Multi-AI Panel Meta-Review \u2014 2026-05-25\n\n**TL;DR:** Two parallel multi-AI panels reached **opposite verdicts on the same COMMODITY question.** The difference was prompt grounding, not model capability. A 5-engine NVIDIA NIM panel (working from pre-dedup numbers) called COMMODITY the system's #1 alpha; a 3-engine codex/grok/gemini panel (shown the same numbers PLUS the leakage signals) classified it `DATA_QUALITY_LEAKAGE` at ~90% confidence. **Independent in-house verification confirmed the leakage panel.** This is the most important lesson of the session: multi-AI consensus is only as good as the prompt grounding.\n\n---\n\n## The two panels\n\n### Panel A \u2014 NVIDIA NIM 5-model (DeepSeek/Roo session, 2026-05-25)\n\nEngines: Kimi K2.6, GPT-OSS-120B, GLM-5.1, Nemotron Super 49B, Mistral Nemotron.\nPrompt: per-class WR/PF/Sharpe + 7d/30d/90d windows, **without** leakage signals or dedup history.\nVerdict: **5/5 agreed COMMODITY is #1 alpha, allocate 20-30%.**\nReport: [`reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`](2026-05-25_asset_class_edge_audit_deepseek_session.md) (Roo's audit).\n\n### Panel B \u2014 Codex / Grok / Gemini (this session, also 2026-05-25)\n\nEngines: OpenAI Codex, xAI Grok, Google Gemini.\nPrompt: same JSON cell **PLUS** the leakage concerns (single-symbol concentration, train_pf vs holdout_pf discontinuity, source-system mechanics, prior 2026-05-16 autopsy).\nVerdict: **3/3 agreed `DATA_QUALITY_LEAKAGE`, ~90% confidence**, recognized as residue from already-rejected H-001 (CFTC COT publication-lag look-ahead, REJECTED 2026-05-20 under M-095).\nReports: [`reports/2026-05-25_commodity_cot_edge_triangulation.md`](2026-05-25_commodity_cot_edge_triangulation.md) + per-engine consult files.\n\n---\n\n## In-house ground-truth verification\n\nThree independent investigations (committed `28d221116` / `406661cf9` / `a93dec2af`) confirmed Panel B:\n\n1. **DB trade-level forensics:** 87.6% (120/137) of the headline cell is one symbol (CT=F cotton); other 17 trades are wheat/soybean losses. 136 of 137 trades fall in the last 30 days, 0 in 60-90d. Mean win is +0.0255%/trade via PRICE_RESOLVED intraday drift \u2014 realistic CT=F round-trip cost (~2-4 bp) wipes the edge. Effective independent Bonferroni tests \u2248 7, not 200 (25 cells share identical trade-id sets).\n2. **Filter pipeline tracing:** `top_edges.py` runs no dedup; the same source/cell collapsed PF 20.54 \u2192 0.17 after 72h COT dedup in a 2026-05-16 swarm autopsy (cited in `quality_gates.py:5575-5581`).\n3. **Merged-cohort `build_pf_registry` rerun** (the new MySQL flag `PF_REGISTRY_INCLUDE_DB=1` from `a93dec2af`): COMMODITY by_asset_class_policy_clean_net PF moves from 0.18 \u2192 **0.937** when DB is merged \u2014 well under T2's 1.5 bar, matching Panel B's prediction range of 0.3-1.0.\n\n**The \"edge\" was already known-bad as of 2026-05-20.** Panel A reconstituted it from ungrounded numbers.\n\n---\n\n## What Panel A got right anyway\n\nRoo's session surfaced one striking finding that does NOT depend on the COMMODITY cell and is worth following up:\n\n> **648 un-gated picks went 0-for-648 over the 6-day window (2026-05-16 \u2192 21), destroying \u2212825% PnL.**\n> - `moderate_confidence`: 455 picks, 0.0% WR, \u22121.47%/pick avg\n> - `low_confidence`: 193 picks, 0.0% WR, \u22120.82%/pick avg\n> - Meanwhile 300 gated picks (elite_a + profitable_tp) generated +994%.\n\nIf real, this is the single most powerful filter in the system \u2014 gating alone would flip aggregate PnL from \u2212825% to +994% on the same emission. **But** the same scientific standard that debunked COMMODITY applies here:\n\n- 0-for-455 on `moderate_confidence` is statistically implausible (p \u2248 0.5^455) on *honest* trades; the bucket may be **defined by what falls through all gates**, i.e., circular by construction.\n- Need to verify whether the live system actually allocates capital to those buckets or just labels them \u2014 if they're already filtered upstream, \"gate them\" is a no-op.\n\n**Action queued (NOT yet executed):** drop a verification agent on the quality-tier definition + verify the 0-for-648 claim against `audit_dashboard/data/dashboard_data.json::picks.recent_closed` filtered to 2026-05-16..21.\n\nRoo also re-confirmed (in agreement with the .md sweep this session):\n- `regime_adaptive \u00d7 ETF` is the only persona\u00d7asset pair passing all statistical gates (Wilson CI 49.7\u201391.8%).\n- `kimi_signal_tracking` is the top source-system by total PnL over the 6-day window (168 picks, WR 53.6%, +257.34%).\n- `aggregated_picks` shows 74.1% WR at n=58 \u2014 interesting but underpowered for Bonferroni.\n\nThese three findings deserve verification with the same rigor that killed the COMMODITY claim.\n\n---\n\n## Lessons\n\n1. **Prompt grounding is the variable, not model count.** Both panels used reputable models. The 5-engine panel reached a wrong consensus because it never saw the leakage evidence. Future multi-AI consults must include all known leakage signals + a sentence: *\"Be skeptical; if the data suggests one symbol/source dominates, flag concentration risk.\"*\n2. **Multi-AI consensus does not increase signal-to-noise on ungrounded prompts.** It compounds whatever bias is in the prompt by averaging plausible-sounding fabrications.\n3. **The H-001 rejection on 2026-05-20 was real progress** \u2014 the system *had* this lesson on file. It just didn't propagate to Panel A's prompt context. The fix is operational, not statistical: when running `consult-nvidia-models` or `consult-cloudflare-models`, mandate inclusion of `reports/hypothesis_registry.json` rejected-hypothesis entries that intersect the prompt's asset class.\n4. **The `build_pf_registry` MySQL extension (`a93dec2af`) is the load-bearing infrastructure fix here.** It collapsed two divergent cohorts (top_edges raw n=1219 vs verdict policy-clean n=28) into one dedup+policy+NET pipeline. Future \"edge claims\" can be A/B'd against the merged cohort by toggling `PF_REGISTRY_INCLUDE_DB=1`.\n\n---\n\n## Action list\n\n| # | Action | Owner | Status |\n|---|---|---|---|\n| 1 | Save Roo's session report to canonical `reports/` path | session | DONE \u2014 `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md` |\n| 2 | Write this meta-review reconciling the two panels | session | DONE \u2014 this file |\n| 3 | Add an `updates/index.html` card | session | DONE \u2014 same commit |\n| 4 | Add incident \"Multi-AI panel grounding failure\" + 2 enhancements to seed_incidents_enhancements.py | session | DONE \u2014 same commit |\n| 5 | Verify the 0-for-648 quality-gate claim against raw DB cohort | follow-up agent | OPEN |\n| 6 | Verify `regime_adaptive \u00d7 ETF` Wilson CI 49.7-91.8% claim | follow-up agent | OPEN |\n| 7 | Verify `kimi_signal_tracking` / `aggregated_picks` per-source claims | follow-up agent | OPEN |\n| 8 | Update CLAUDE.md guardrail to require leakage-context in multi-AI prompts | session | OPEN |\n\n---\n\n## Related artifacts\n\n- Roo's original report: `audit_reports/ASSET_CLASS_EDGE_AUDIT_2026-05-25.md` and the canonical copy at `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`\n- Codex/Grok/Gemini panel synthesis: `reports/2026-05-25_commodity_cot_edge_triangulation.md`\n- Per-engine consult files: `reports/2026-05-25_commodity_cot_edge_consult_{codex,gemini,grok}.md`\n- DB-level forensics: `reports/2026-05-25_commodity_cot_edge_deep_dive.md`\n- Filter-pipeline tracing: `reports/2026-05-25_policy_clean_vs_top_edges_funnel.md`\n- Pre-registered hypothesis H-101 with kill criteria: `reports/hypothesis_registry.json`\n- MySQL registry extension: `tools/build_pf_registry.py` (gated by `PF_REGISTRY_INCLUDE_DB=1`)"
      },
      {
        "enhancement_id": 23,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Runtime _assert_no_lookahead leakage guard in walk-forward harness",
        "description": "Qwen step-2: assert no test-period features were populated during training. Check columns NaN pre-cutoff AND populated post-cutoff as red-flag for forward-fill leakage. Raise DataLeakageError on detection inside every fold iteration.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "zero leakage flags across all candidate strategies in CI",
        "target_release": "2026-06-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 8,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "WON-vs-PnL backfill SQL \u2014 re-label legacy contradicted rows",
        "description": "Opencode P0 DRAFT. UPDATE pass that re-computes status from pnl_pct for any (status='WON', pnl_pct<0) or (status='LOST', pnl_pct>0) row. Sign-coherence guard already stops NEW contradictions; this backfills the historical 2,531+ WON rows with negative PnL flagged in db_health.json::won_pnl_contradiction.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "opencode/ring-2.6-1t",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All WON rows have pnl_pct >= 0; all LOST/SL_HIT rows have pnl_pct <= 0; aggregates re-published",
        "target_release": "2026-06-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:45:06",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "session-ses_1a2d.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit picks methodology and UI edge validation\n\n**Session ID:** ses_1a2d77a8dffe4tBYbdlLp6CGV2\n**Created:** 5/25/2026, 3:23:17 AM\n**Updated:** 5/25/2026, 3:44:25 AM\n\n---\n\n## User\n\nreview our methodology of picks per asset class under findtorontoevents.ca/audit on the user interface, look at stuff 'like \"smart picks\" (button vs tab), the active picks by various scores/tags such as \"strong\" etc.. and also check smart picks tab, US Equity picks tab.. and all other tabs.. and see if we have any \"edge\" in the user interface and if so where. and double-check if its legit.  double-check how realstitic the picks are.. for example if you put real money into the \"smart picks\"at their time of entry till now would we have been profitable ? also double-check the \"smart picks\" tab I am seeing signal time EST 1.4 h ago.. is that actually truE?  or is it stale datA? \n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 12.5s)\n\n_Thinking:_\n\nThe user is asking me to review the methodology of picks per asset class under findtorontoevents.ca/audit on the user interface. They want me to look at:\n\n1. \"Smart picks\" (button vs tab)\n2. Active picks by various scores/tags such as \"strong\"\n3. Smart picks tab, US Equity picks tab, and all other tabs\n4. Whether there's any \"edge\" in the user interface and if so where\n5. Whether the picks are realistic - would putting real money into \"smart picks\" at their time of entry till now be profitable?\n6. Whether the \"smart picks\" tab showing \"signal time EST 1.4 h ago\" is actually true or stale data\n\nLet me first check what's in the workspace related to this, and also try to fetch the website to understand the UI.\n\nLet me start by exploring the project structure and understanding what's available.\n\nI'll systematically review the audit UI, smart picks methodology, and data freshness. Let me start by exploring the project structure and fetching the live site.\n\n**Tool: task**\n\n**Input:**\n```json\n{\n  \"description\": \"Explore audit UI structure\",\n  \"prompt\": \"Explore the findtorontoevents.ca website, specifically the /audit section and related pages. I need to understand:\\n\\n1. Fetch https://findtorontoevents.ca/audit - look at the full page structure, tabs, buttons, data tables\\n2. Look for \\\"Smart Picks\\\" tab/button, \\\"US Equity\\\" tab, and any other asset class tabs\\n3. Look for any \\\"edge\\\" indicators, score tags like \\\"strong\\\", active pick counts\\n4. Check for signal timestamps, data freshness indicators\\n5. Look at the methodology section if any\\n\\nAlso explore:\\n- The project structure in /home/eaguiar2015/findtorontoevents_antigravity.ca - look at audit_dashboard/, alpha_engine/, and any related files\\n- Check audit_dashboard/template.html for the UI template\\n- Check any JSON data files that feed the dashboard\\n\\nReturn all findings in detail including file paths, line numbers, and relevant code snippets.\",\n  \"subagent_type\": \"explore\",\n  \"task_id\": \"audit-ui-review-1\"\n}\n```\n\n**Error:**\n```\nExpected a string starting with \"ses\", got \"audit-ui-review-1\"\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 6.3s)\n\n_Thinking:_\n\nLet me fix the task call and explore the project structure directly.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: invalid**\n\n**Input:**\n```json\n{\n  \"tool\": \"explore\",\n  \"error\": \"Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\"\n}\n```\n\n**Output:**\n```\nThe arguments provided to the tool are invalid: Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 3.9s)\n\n_Thinking:_\n\nI need to explore the project structure and the live website myself. Let me start by:\n1. Fetching the live audit page from findtorontoevents.ca\n2. Exploring the project directory structure\n3. Looking at the audit dashboard template and data files\n\nLet me do these in parallel.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: webfetch**\n\n**Input:**\n```json\n{\n  \"url\": \"https://findtorontoevents.ca/audit\",\n  \"format\": \"markdown\",\n  \"timeout\": 30\n}\n```\n\n**Output:**\n```\n  Unified Audit Dashboard - Antigravity  \n\n# Unified Audit Dashboard v99.0\n\nBirds-eye view of ALL picks, portfolios, and system performance - loading...\n\n[\u2728 Jump to Active Picks](#) [\ud83d\udcd6 Research](research_index.html \"Per-asset-class research runs (sourced + backtested + multi-AI consensus picks)\") [\ud83d\udcca Edge Stability](edge_stability.html \"Per-asset-class edge stability across 7d/30d/90d/all-time windows\") [\ud83c\udfc6 AI Leaderboard](ai_leaderboard.html \"Per-AI pick attribution: which AI engine picks best, per asset class and horizon\") [\ud83d\udc1d Swarm Paper Picks](#swarm-pick-tracking-section \"Swarm-generated paper-trade picks across theswarm / Leap / V4 / zerounderscore with per-tier and per-model leaderboard\")\n\n\u26a0 TRUTH LAYER Dashboard vs DB-reality gap \u00b7 Per-class tiles below show **post-resolver-v2 filtered** performance. RAW at\\_raw\\_picks across 55,510 closed picks (Kimi audit + 2026-05-12 user audit): **11.13% WR / \u22123.56% avg / Sharpe \u22122.34 / PF 0.46**.\n\n**No asset class** currently passes industry-standard real-money thresholds (DSR>0.95, PBO<0.05, WFE>60%, live-Sharpe>0.5, n\u2265100). The one DSR=1.0 candidate (`cot_positioning + CT=F`) is in 4-week paper-pilot SHADOW per [paper\\_pilot.html](/audit/paper_pilot.html); see also [real\\_money.html](/audit/real_money.html) for the 10-step Lopez de Prado readiness gate. **NFA** \u2014 no real-money sizing without explicit greenlight + all gates clear.\n\n**\u26a0 COMMODITY filter-survival gap (2026-05-17):** dashboard shows WR=85.5% (n=228) vs raw WR=60.2% (n=354). The \u2212126 difference is picks excluded by `_is_valid_resolved_pick()` (missing / corrupt pnl\\_pct \u2014 concentrated in losing cta\\_replicator and combined\\_confidence trades). The 85.5% reflects only picks with validated pnl data, not the full cohort. Raw 60.2% is the conservative estimate. FOREX: WR=57.8% but PF=0.85 \u2014 wins avg 0.62% vs losses avg 1.00% (tight-TP / wide-SL asymmetry); total PnL=\u221215.84% confirms it is net-negative despite majority wins.\n\n\ud83d\udccf ML CALIBRATION INVERTED High confidence != high win rate. CRYPTO conf\u22650.90 \u2192 **14.4% WR**; conf 0.50-0.60 \u2192 **60.3% WR**. \u00b7 EQUITY 0.85-0.90 \u2192 **20% WR (worst band)**; >0.90 recovers. \u00b7 FOREX peak **0.75-0.80**; 0.70-0.75 = danger.\n\nScore-booster now applies per-class penalty/reward at `alpha_engine/score_booster._calibrate_confidence()` (CRYPTO >0.85 = \u221212, <0.6 = +3; EQUITY 0.85-0.90 = \u221215; FOREX \u22650.85 = \u221210). Until upstream generators recalibrate, do not size off raw confidence \u2014 weight off post-booster `score`.\n\n\ud83c\udfaf MAJOR GOAL Phenomenal performance across **ALL** asset classes \u2014 sustainable, hedge-fund-grade.\n\nSports betting tracked at [/live-monitor/sports-betting.html](/live-monitor/sports-betting.html) (separate KPIs).\n\n**EQUITY** \u2014 T2 candidate (PF 1.55, WR 51.4%, n=426). Scale.\u24d8 **CRYPTO** \u2014 PF 1.30, WR 46.3%, n=8115. Sub-T2; `quan_engine`/`luxalgo_filters` drag; 12 crypto\\_soc baby\\_strats quarantined (4-6\u03c3 WR decay). **ETF** \u2014 PF 1.33, WR 57.4%, n=108. Charter floor met (n\u2265100); lift PF to 1.5 for T2. **COMMODITY** \u2014 **PF 2.48**, WR 61.2%, n=345 (post-resolver-v2). \u24d8 Headline inflated by CT=F COT dedup artifact \u2014 COT-dedup guard now active; awaiting 100 clean picks. **FOREX** \u2014 PF 0.86, WR 55.0%, n=309 (post-resolver-v2). Sub-floor (PF<1.0). Mutation protocol active; LONG-direction blocks pending 2026-05-22 re-eval. **BOND** \u2014 PF 0.66, WR 54.5%, n=11. Sub-floor (PF<1.0); n<100 charter floor. Scanner active; accumulating picks. Static data updated 2026-05-21 \u2014 source: asset\\_class\\_health (resolved\\_n, post-resolver-v2). JS banner auto-updates on page load.\n\n**Tier definitions:** T1 PF>2/WR>55/MDD<10 (Renaissance). T2 PF>1.5/WR>50/MDD<20 (Institutional). T3 PF>1.2/WR>48/MDD<30 (Retail-OK). Source: `asset_class_health` in `audit_dashboard/data/dashboard_data.json` (post-resolver-v2 noise filter, generated 2026-05-05T01:37Z). Resolver v2 shipped 2026-04-28; v2.1 bug bundle 2026-05-02. Historical re-resolve (`re_resolve_historical_v2.py`) pending \u2014 pre-fix labels still in closed\\_picks for picks closed before 2026-04-28.\n\n**\u26a0\ufe0f Two PF/WR figures may appear per class on this page.** The card above pulls `asset_class_health` (full-history closed-trade aggregate, post-resolver-v2 noise filter). The lower-down `hf_stats.by_asset_class` panel uses a recent-subset window (typically last 60-90d closed picks). Recent figures often diverge from headline \u2014 CRYPTO recent PF 0.89 vs headline 1.25 (n=1650 vs n=8067), COMMODITY recent 1.09 vs 1.78. **For deploy/sizing decisions, weigh the recent panel.** For long-horizon strategy validation, weigh the headline. Source: `dashboard_data.json::hf_stats.by_asset_class`.\n\n\ud83d\udcca Per-asset-class walk-forward (OOS) Out-of-sample metrics from `walk_forward_by_class()` \u2014 Sharpe colored: green > 0.5, yellow 0\u20130.5, red < 0.\n\nLoading\u2026\n\n\ud83c\udfc6 TIER-2 PROVEN Buried high-edge strategies promoted from the alphabetical systems grid. Tier badges per [CHARTER \u00a72](/docs/PERFORMANCE_CHARTER.md).\n\n\ud83d\udcca TA BASELINE TradingView 6-strategy benchmark (ema\\_cross/macd/rsi/bollinger/donchian/supertrend) vs buy-hold. Promotion gate: walk-forward robustness \u22650.60 AND trades \u22655.\n\nSource: `tradingview-mcp/src/tradingview_mcp/core/services/backtest_service.py`. Generator: `tools/run_tv_backtest_benchmark.py`.\n\n### Strategy detail\n\n\u00d7\n\n### Crypto + Non-Crypto Performance ? Guide\n\n### How to Find the Best Picks \u2014 Definitions & Edge\n\n\u00d7\n\n#### \ud83d\udcd6 Definitions (No Fancy Words Without Meaning)\n\n**PROVEN** \u2014 A pick qualifies as PROVEN when its *strategy* has: (1) \u22655 closed trades, (2) \u226555% win rate after Bayesian shrink, (3) Profit Factor \u22651.5, and (4) confidence \u22650.7. Manually vetted systems (e.g., alpha\\_engine, battleground+) can also earn PROVEN status.  \n**Smart Picks** \u2014 An AI-curated basket. Every active pick is scored on 6 dimensions: *R"
      },
      {
        "enhancement_id": 5,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add VIX/realised-vol regime tag at pick submission",
        "description": "Cheapest single fix per persona-survey \u2014 addresses 7 personas / ~470 picks. ~30% of picks fire in the wrong regime today.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude+persona_survey",
        "related_persona_id": "mean_reversion+momentum_scalp+sharma_quant_momentum",
        "proposed_features": null,
        "success_metric": "Picks tagged with regime; backtest shows >=3pp WR improvement when filtering by regime-aligned subset",
        "target_release": "2026-06-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_persona_improvement_survey.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Persona Improvement Survey \u2014 AI Tournament\n\n**Date:** 2026-05-25\n**Author:** investigation subagent\n**Goal alignment:** Goal #1 (phenomenal performance across all asset classes on `findtorontoevents.ca/audit`)\n**Mandate:** for every persona in the AI tournament with n>=5 picks, identify the data inputs / external signals that would most improve pick quality.\n\n## Sources\n\n- Picks corpus: `audit_dashboard/data/ai_tournament_picks_latest.json` (1,411 records, 1,055,454 bytes, snapshot 2026-05-25 02:08 UTC). 1,105 records carry a `persona_id`; 306 do not (legacy `data_source` rows from `alpha_engine` and `quan_engine`, plus a handful of free-text-thesis grok3 rows that the cerebras/gpt4o submission layer never tagged).\n- New submissions (2026-05-25, added on top of the dashboard snapshot for completeness, even though none reach n>=5 individually):\n  - `data/ai_tournament/submissions/mercury_v2_20260525.json` \u2014 20 picks across 5 hedge-fund personas (voss_global_macro, reed_long_short_fundamental, sharma_quant_momentum, chen_thematic_ai_growth, lang_value_contrarian; 4 picks each).\n  - `data/ai_tournament/submissions/grok3_hedgefund_20260525.json` \u2014 12 picks across 6 grok-prefixed personas (vargas/chen/sharma/okonkwo/reyes/li; 1\u20133 picks each).\n  - `data/ai_tournament/submissions/qwen3_6_max_hedgefund_20260525.json` \u2014 18 picks across 6 qwen-prefixed personas (value_hunter/momentum_rider/quant_systematic/macro_global/contrarian/carry_yield; 3 picks each).\n- Registry: `tools/ai_tournament/persona_registry.py` (17 canonical personas as of 2026-05-25; the picks corpus also references ~25 additional `persona_id` strings used by various model adapters that have not been canonicalised into the registry yet \u2014 e.g. `momentum_momentum`, `quality_compound`, `growth_at_reasonable_price`, `gamma_raid`, `cta_trend`, `bayesian_breakout`, `inventory_cycle`, `macro_hedge`, `purchasing_power_parity`, `seasonal_pattern`, `bankruptcy_recovery`, `correlation_breaker`, `cross_sectional_momentum`, `supply_demand`, `volatility_breakout`, `grid_trader`). The improvement recommendations below treat the picks-corpus tag as the source of truth.\n\n**Note on overrepresentation:** several personas are dominated by a single model resubmitting near-identical picks at each daily tournament tick (e.g. `breakout_scanner` n=204 is 51\u00d7FIL + 51\u00d7ZK + 51\u00d7NEAR + variations \u2014 all from `grok3`). I flag those cases inline and treat them as effectively n\u22484 of *distinct* signals, even though the raw n is large.\n\n## Qualifying personas (n>=5)\n\n22 personas reach the threshold from the dashboard snapshot. None of the brand-new hedge-fund personas (`voss_*`, `reed_*`, `sharma_*`, `chen_*`, `lang_*`, `grok_*`, `qwen_*`) yet do \u2014 they sit at n=1\u20134 and are listed at the end as \"watchlist\".\n\n---\n\n### 1. `breakout_scanner` \u2014 Breakout Scanner (technical_breakout)\n\n- **n=204, resolved=2, WR=100% (2/2), avg unrealized PnL = n/a (mostly OPEN)** \u2014 but n is misleading: 51+51+51 are repeated FIL/ZK/NEAR submissions by `grok3`, so true distinct-signal n \u2248 12.\n- **Asset class:** CRYPTO 100%. **Direction:** 99.5% LONG.\n- **Already relies on:** `ml_crypto_pred` confidence score, \"multi-timeframe EMA alignment\", volume signal, 20-day consolidation range.\n- **Top 3 missing inputs:**\n  1. **True consolidation-width vs realised volatility** \u2014 the persona claims \"20-day consolidation\" but never publishes the \u03c3-of-\u03c3 ratio that distinguishes a real coiled range from a slow drift. Adding the Bollinger-Bandwidth percentile (current width vs prior 250d distribution) would let it reject the false breakouts that dominate crypto.\n  2. **Order-book depth / spot CVD divergence at the breakout candle** \u2014 every entry would be filterable by \"were aggressive market buys present, or was the breakout passive-bid-lift on thin book?\" Without this the persona is short-volatility in disguise.\n  3. **Funding-rate and perp basis at entry** \u2014 crypto breakouts often coincide with funding>0.05%/8h, which converts the trade into a carry headwind. A funding-percentile filter (top decile = stand aside) would lift hold-period PnL.\n- **Tier promotion plan:** WR=100% on n=2 is meaningless. Need n>=50 distinct breakouts (not symbol repeats) over 60+ days; require BB-width percentile <30 AND funding-percentile <70 to fire. Target PF>1.8 on CRYPTO is realistic with those filters; without them the persona will likely settle at PF~0.9 (the strategy is paying spread + funding without an edge source).\n- **Cross-persona conflict:** directly contradicts `mean_reversion` and `volatility_breakout` on the same crypto symbols (`mean_reversion` is long BTC where `breakout_scanner` is long alt-breakouts \u2014 different symbol universes, low overlap). Conflicts with `bayesian_breakout` (same setup, different probabilistic gate) \u2014 ~30% same-symbol overlap on ETH/SOL/AVAX; the bayesian variant adds a Bayesian posterior that the raw scanner lacks.\n\n### 2. `momentum_momentum` \u2014 3-6mo Equity Momentum (technical_momentum, grok3)\n\n- **n=92, resolved=33, WR=57.6%, avg PnL +4.03%.** EQUITY 100%, 89% LONG.\n- **Heavy-tail caveat:** 46/92 are repeated MU submissions; distinct-symbol n \u2248 25.\n- **Already relies on:** `growth_stock_screener` engine, \"relative strength in semiconductor sector\", confidence scores 70\u201384%.\n- **Top 3 missing inputs:**\n  1. **Sector-relative momentum z-score** (vs SPY or sector ETF), not just absolute price action. MU is bid because semis are bid; the persona should fade MU when its z-score vs SOXX collapses, which is the historical reversal tell.\n  2. **Earnings-revision breadth from FactSet/Refinitiv (or Yahoo as a proxy)** \u2014 momentum that is *not* backed by upward EPS revisions is the classic late-stage failure pattern. Adding a simple \"3-month EPS revision up?\" gate is the largest single edge available.\n  3. **Short-interest delta / days-to-cover** \u2014 momentum that is short-interest-driven mean-reverts violently. Filter out names with SI>15% of float.\n- **Tier promotion plan:** already past T2 on WR (57.6%). Need PF \u2014 current avg PnL/avg loss not computed, but trend looks positive. With EPS-revisions filter and a beta-neutral pair (short SPY same-dollar), this persona can stretch to T1 territory. Need n>=50 distinct symbols (not 25\u00d7 MU).\n- **Conflict:** sometimes contradicts `mean_reversion` (same EQUITY symbols on opposite sides) and `growth_at_reasonable_price` (NVDA: GARP says long, momentum says long \u2014 agreement, not conflict). Overlaps `cross_sectional_momentum` heavily (~40% symbol overlap with PYPL/ADBE/CRM); the persona-level redundancy is real and should be collapsed.\n\n### 3. `quality_compound` \u2014 Quality Compounder (fundamental_quality, cursor_agent)\n\n- **n=68, resolved=17, WR=100% (17/17), avg unrealized PnL \u22122.39%.** Universe is 51\u00d7 NVDA + 17\u00d7 IWM. Distinct n=2. WR=100% is an artefact of duplicate resolution.\n- **Already relies on:** Two-Day RSI Reversal signal, \"ROE>15%, debt/equity<0.5\" (per persona name) \u2014 though the actual thesis text is technical, not fundamental.\n- **Top 3 missing inputs:**\n  1. **Actual fundamental data** \u2014 ROIC, FCF/EV, accruals quality (Sloan ratio). The persona is named \"quality_compound\" but the thesis cites RSI(2), which is the opposite of a fundamental gate. Either rename it or wire in a Compustat-equivalent feed (Yahoo `getKeyStatistics` is a free starting point).\n  2. **Universe expansion** \u2014 running this on NVDA alone is concentration risk, not a strategy. Needs a quality screen producing 20\u201350 names per quarter.\n  3. **Pricing-power signal** \u2014 gross-margin expansion YoY is the cleanest moat tell; without it the persona is just buying expensive stocks.\n- **Tier promotion plan:** the WR=100% is unreal; needs forced de-duplication of repeated picks. After de-dup, expect PF~1.1 (the \u22122.39% avg PnL is a tell). Promotion requires rebuilding the entry gate from fundamentals.\n- **Conflict:** overlaps `growth_at_reasonable_price` (NVDA) and `chen_thematic_ai_growth` (NVDA) \u2014 three personas chasing the same name through different doors.\n\n### 4. `growth_at_reasonable_price` \u2014 GARP (cerebras_llama4)\n\n- **n=67, resolved=11, WR=54.5%, avg PnL \u22123.31%.** EQUITY 100%, 92% LONG. 56/67 are NVDA repeats; distinct n \u2248 12.\n- **Already relies on:** \"PEG<1.5, revenue growth>15%\", MACD divergence, 20-day EMA.\n- **Top 3 missing inputs:**\n  1. **Forward PEG using consensus EPS** (current persona is using trailing PEG inferred from thesis text). Forward PEG is the only GARP signal that backtests.\n  2. **Capex intensity vs FCF conversion** \u2014 a true GARP filter rejects companies with rising capex/revenue and stagnant FCF (the AMD/INTC failure pattern). Without this gate, GARP repeatedly picks tops in capex-heavy semis.\n  3. **Sell-side estimate-dispersion** \u2014 narrow dispersion + upward revisions = high-quality GARP signal; wide dispersion = noise. Free proxy via Yahoo analyst count + high/low estimate range.\n- **Tier promotion plan:** avg PnL \u22123.31% is sub-floor. Need forward-EPS + dispersion filters before any size; expect to halve trade count and double per-trade edge. Target WR 55%+ at PF>1.4.\n- **Conflict:** redundant with `quality_compound` and `value_investor`; rename to `growth_momentum_combo` or merge.\n\n### 5. `trend_follower` \u2014 Trend Follower (technical_trend, deepseek_v4)\n\n- **n=67, resolved=55 (highest resolution rate of any persona), WR=34.5%, avg PnL +4.20%.** EQUITY 100%, 70% LONG.\n- **Already relies on:** \"20/50 EMA cross\", ADX>25, \"higher lows/higher highs\", ISM/credit-spreads (per thesis text).\n- **Top 3 missing inputs:**\n  1. **ADX-regime gate** \u2014 the registry says \"require ADX>25 at entry\" but the WR=34.5% suggests it isn't actually being enforced. Add a hard pre-trade ADX measurement.\n  2. **Cross-sectional trend strength** \u2014 trend-following alpha lives in being long *the strongest* trends and short the weakest, not in catching every cross. A 12-1 momentum ranking + decile filter is the canonical fix.\n  3. **Volatility-target sizing input (annualised \u03c3 over last 21d)** \u2014 equal-dollar s"
      },
      {
        "enhancement_id": 163,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Look-ahead leakage guard as a pipeline-failing CI gate",
        "description": "A look-ahead/leakage check exists only in research tools, not as a CI gate that fails the pipeline. Given the honest-measurement layer now shipped (entry-anchored resolver, intrabar_truth), a CI guard that asserts no future-bar references in the resolver/feature path would prevent regression of the exact bug class that inflated WR 23-24%. (2-month sweep O3.)",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-fable-masterrun",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CI fails on any new look-ahead in resolver/feature code; protects the honest measurement chain",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-10 18:24:55",
        "updated_at": "2026-06-10 18:24:55",
        "implemented_at": null,
        "link_md_path": "reports/md_2month_findings_sweep_2026-06-10.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 160,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Wire TSMOM/residual/carry as opt-in sidecars post-P0 (intrabar/OHLCV/TP-SL) for low-n classes (ETF/FUTURES proxies, FOREX carry, EQUITY residual)",
        "description": null,
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3 (subagents 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "n>=50 clean post-filters for pilots; >=1 class reaches n>=100 WR>=50 PF>=1.5 on policy-clean + forward 4wk",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 18:12:42",
        "updated_at": "2026-06-09 18:12:42",
        "implemented_at": null,
        "link_md_path": "reports/money_ready_bridge_summary_2026-06-09.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 158,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Non-crypto edge guard + class-specific source curation and score floors for FOREX/COMMODITIES/ETFS/FUTURES",
        "description": "Implemented non_crypto_edge_guard in quality_gates.passes_active_gate to hard-block emission for these classes unless from proven carry/COT/seasonal/risk_parity/proxy sources. Banned additional universal losers (etf_all_strategies, multi_asset_cot, futures_connors_rsi2) in config.PERMANENTLY_KILLED_STRATEGIES. Tightened MIN_ELITE_SCORE_BY_CLASS (ETFS:50, FOREX:65, COMMODITIES:40). Promotes good sleeves per prior carry unlock and deep dives. Ties to ORB retest + HTF/structure work.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3 (subagents 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "n_resolved >=50 clean per class with WR>=48% PF>=1.1 on resolved; reduced concentration in bad universal scanners; progress toward money_ready for 1+ non-crypto class",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 18:05:15",
        "updated_at": "2026-06-09 18:12:18",
        "implemented_at": null,
        "link_md_path": "reports/money_ready_bridge_summary_2026-06-09.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 151,
        "asset_class": "OVERALL",
        "source_ref": "OBS_FINDING_JUNE8 save-the-system",
        "title": "Deepen crypto_ohlcv 1h history to >=180 days (gating dependency for intrabar re-resolution)",
        "description": "crypto_ohlcv holds only ~30d contiguous 1h bars (720/symbol). reresolve_intrabar.py dry-run: 1422/3000 picks no_data. Without deep history, full-book intrabar re-baseline is impossible.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "cursor-agent 2026-06-09 save-the-system audit",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": ">=180d 1h bars for top symbols; reresolve no_data rate <10%",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:08:03",
        "updated_at": "2026-06-09 03:08:03",
        "implemented_at": null,
        "link_md_path": "reports/OBS_FINDING_JUNE8.MD",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 152,
        "asset_class": "OVERALL",
        "source_ref": "OBS_FINDING_JUNE8 save-the-system",
        "title": "Apply intrabar re-resolution to production pick book (backup-first)",
        "description": "Dry-run: CRYPTO orig WR 52.3% -> intrabar-true 42.9%, PF 1.22. 26.4% TP->SL reclassification. tools/reresolve_intrabar.py --apply gated.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "cursor-agent 2026-06-09 save-the-system audit",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Clean+intrabar cohort n>=2000; at least one strategy clears n>=100/3mo/PF>1.5/WR>52% OR honest no-edge verdict",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:08:03",
        "updated_at": "2026-06-09 03:08:03",
        "implemented_at": null,
        "link_md_path": "reports/OBS_FINDING_JUNE8.MD",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 148,
        "asset_class": "OVERALL",
        "source_ref": "edge_validation_roadmap 2026-06-09",
        "title": "SAVE-3: Re-baseline every class on clean+intrabar cohort, then paper-pilot survivors only",
        "description": "After SAVE-1/2 + the shipped artifact filters (backfill quarantine, sane-pnl guard, EXPIRED-honest, banned-source exclusion), re-run the clean-cohort money-ready screen. Only strategies clearing n>=100, >=3 months, PF>1.5, WR>52%, intrabar-validated, multi-source advance to a >=4-week forward paper-pilot. Real capital only after the pilot holds.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (save-the-system roadmap 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": ">=1 strategy x class clears the full bar on a forward (post-fix) cohort before any sizing.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:06:16",
        "updated_at": "2026-06-09 03:06:16",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/edge_validation_roadmap.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 149,
        "asset_class": "OVERALL",
        "source_ref": "edge_validation_roadmap 2026-06-09",
        "title": "SAVE-4: Wire dormant academic sleeves (TSMOM / residual-momentum / carry) AFTER resolver is trustworthy",
        "description": "Strategy supply is fine; the academically-correct sleeves are already coded but dormant: tsmom_strategy.py+cta_bridge.py (universal, trailing-stop exits avoid the expiry trap), residual_momentum.py (EQUITY), bond_strategy_harness.py + commodity_basis_carry.py (carry). Promote into production_scanner ONLY after SAVE-2 (wiring great strategies into a broken resolver just makes more expired noise).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (save-the-system roadmap 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "TSMOM + residual-momentum + carry each have >=1 production caller; forward-tracked.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:06:16",
        "updated_at": "2026-06-09 03:06:16",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/edge_validation_roadmap.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 142,
        "asset_class": "OVERALL",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Wire Time-Series Momentum (vol-scaled) as the universal cross-class sleeve",
        "description": "TSMOM (Moskowitz-Ooi-Pedersen 2012) is validated across every class in this audit; exits on trailing stop / sign-flip rather than far fixed TP, structurally curing the TIME_EXPIRED disease. tsmom_strategy.py + cta_bridge.py already exist but are dormant. Pair with Moreira-Muir (2017) vol-managed sizing. Honest OOS net Sharpe ~0.5-0.8.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "After resolver fix: TSMOM sleeve live in production_scanner with vol-targeting; >=3 months clean forward n>=30/mo PF>1.3.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 13:33:04",
        "updated_at": "2026-06-06 13:33:04",
        "implemented_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 143,
        "asset_class": "EQUITY",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Promote residual (idiosyncratic) momentum into production_scanner",
        "description": "Blitz-Huij-Martens (2011) residual momentum ~doubles vanilla-momentum Sharpe (~0.8-1.0) and is crash-resistant. residual_momentum.py / equity_qmom_residual.py already coded but stranded in the academic sidecar (no production caller). v1 needs only stock_ohlcv + SPY-residual.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "residual_momentum wired into production_scanner equity path; forward PF>1.3 on clean cohort.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 13:33:04",
        "updated_at": "2026-06-06 13:33:04",
        "implemented_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 133,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Wire st_fear_greed_contrarian into AI tournament provider pool",
        "description": "st_fear_greed_contrarian was just promoted to anti-overfit registry (DSR=19.70, FDR p=0.0, WR=53%, n=430). Currently emits only via paper_trading pipeline. Should be wired into the AI tournament ingestion so its FNG-driven crypto picks appear alongside OpenAI/DeepSeek/Google. Strategy: BUY when Fear & Greed Index \u2264 20, SELL when \u2265 80. Alternative.me API.",
        "category": "PERSONA",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-sonnet-4-6 2026-06-06",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "fear_greed_contrarian picks appear in ai_tournament_picks_latest.json within 1 week. Target: \u226550 tournament picks from this strategy in the first week.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 05:58:31",
        "updated_at": "2026-06-06 05:58:31",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 132,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Tournament leaderboard JSON missing per-row DISPUTED/artifact caveat field",
        "description": "ai_tournament_leaderboard.json tags 67-91% WR models as tier=T1/T2 with NO per-row disputed/artifact/caveat field. Per memory ai-tournament-wr-artifact-2026-06-03, these WRs are suspected single-snapshot resolver artifacts (fix = intrabar OHLC replay). The DISPUTED banner is HTML-only \u2014 non-browser consumers (LLMs scraping JSON, downstream cron jobs, dashboards in other surfaces) see 'T1' without caveat. Top examples: kimi_direct n=52 WR 67.31% PF 2.78 T1; llm7_qwen n=39 WR 69.23% PF 2.40 T1.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7 /loop-1h",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "ai_tournament_leaderboard.json includes 'caveat' or 'wr_artifact_risk' per row when WR>=60% AND resolution method = daily-OHLC. UI banner pulls from this field instead of hardcoding.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 05:48:40",
        "updated_at": "2026-06-05 05:48:40",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 126,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Live-or-die kill switch monitoring auto-files P0 incidents on breach (MASTERPLAN action 5)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "See MASTERPLAN_JUNE52026_CLAUDE.MD for acceptance criteria, dependencies, and 30-day timeline. Reviewed by 2-engine swarm (DeepSeek + xAI) \u2014 both unanimous on action item priority.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:50:42",
        "updated_at": "2026-06-05 04:50:42",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 122,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Freeze LLM tournament for 30-day live-or-die test of 7 confirmed micro-edges (MASTERPLAN action 1)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "See MASTERPLAN_JUNE52026_CLAUDE.MD for acceptance criteria, dependencies, and 30-day timeline. Reviewed by 2-engine swarm (DeepSeek + xAI) \u2014 both unanimous on action item priority.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:50:41",
        "updated_at": "2026-06-05 04:50:41",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 125,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Harden promotion_gate.py with walk-forward + DSR>=0.80 + two-regime test (MASTERPLAN action 4)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "See MASTERPLAN_JUNE52026_CLAUDE.MD for acceptance criteria, dependencies, and 30-day timeline. Reviewed by 2-engine swarm (DeepSeek + xAI) \u2014 both unanimous on action item priority.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:50:41",
        "updated_at": "2026-06-05 04:50:41",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 121,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Strategy-level tracking gap: FUTURES/ETF/BOND/COMMODITY/PENNY emit picks, 0 perf rows",
        "description": "at_strategy_stats covers only CRYPTO/MEMECOIN (+thin EQUITY). FUTURES (4094 raw picks, 246/14d), ETF (421), BOND (90), COMMODITY (5723 outcomes), PENNY (494) have ZERO strategy-level perf rows \u2014 only raw/outcome ledgers. Can't evaluate per-class edge without tracking. Build per-class strategy stats population (extend the at_strategy_stats rebuild to all classes from at_pick_outcomes).",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "532",
        "created_at": "2026-06-05 02:34:56",
        "updated_at": "2026-06-05 02:42:47",
        "implemented_at": "2026-06-05 02:42:47",
        "link_md_path": "reports/STRATEGY_AND_AUDIT_REVIEW_2026-06-04.md",
        "link_url": null,
        "link_github_ref": "532",
        "enhancement_plan": "Shipped: tools/rebuild_strategy_stats_all_classes.py + daily cron build strategy_perf_by_class for all 11 classes (542 cells, FUTURES/ETF/BOND/COMMODITY/PENNY now tracked). Next: surface on /audit + apply #111 attribution before edge claims."
      },
      {
        "enhancement_id": 118,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "CRYPTO LONG\u2192SHORT flip bypass: 10 emitters skip production_scanner gate (991 LONG/BUY in 7d)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Add the _EAGLE4_CRYPTO_FLIP_TO_SHORT flip at alpha_engine/mysql_trading_sync.py upsert layer so it catches all 10 bypass paths (ml_crypto_predictor 230, copy_trader_polymarket 172, luxalgo_filters 116, alpha_engine_fast 116, prediction_market_agents 106, alpha_engine 87, ml_strategy_reviver 84, quan_engine 29, genome_mutations 26, battleground_luxalgo 25). Risk: changes direction on ~900 picks/week \u2014 needs operator approval + canary mode. Alternative: keep current per-scanner approach and add fl",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 15:53:30",
        "updated_at": "2026-06-04 15:53:30",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 117,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Promote inverse_ml_enhanced_ADAUSDT_15m_D \u2014 PF 1.73 / WR 55.6% / avg +0.11% (n=36)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Strongest verified strategy post-INCIDENT-94 backfill. Reach n=100 forward closed and reconfirm PF>1.5 before any live capital. Reference: reports/verified_strategies_unlock_2026-06-04.md",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 14:33:52",
        "updated_at": "2026-06-04 14:33:52",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 114,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Paper pilot signal rarity blocks promotion \u2014 b_flip n=2, inverse_ml_btc n=3 (need n>=100)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Both strategies reach n=100 forward closed within 60 days. b_flip lab PF=35.91 from 157 trades but forward gen too sparse. Options: (1) loosen entry filters, (2) add more symbols to universe, (3) extend timeframe coverage. Reference: reports/bootstrap_forward_stats_latest.json (2026-06-04T11:24)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 11:53:46",
        "updated_at": "2026-06-04 11:53:46",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 110,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE4_2026-06-03_CLAUDE_OPUS_4_7.MD",
        "title": "SL/TP audit using intrabar OHLC replay (EAGLE_JUNE2 \u00a77.1 #3)",
        "description": "SL/TP audit using intrabar OHLC replay (EAGLE_JUNE2 \u00a77.1 #3)",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"prereq\": \"universal_resolver healthy (now +123, stale_open: 0 per memory)\", \"source\": \"EAGLE_JUNE2 \u00a77.1 #3\", \"audit_target\": \"Per-class SL hit-rate, TP hit-rate, avg-bars-to-hit, distance-from-entry-at-exit\", \"downstream_unblock\": \"Mimo 626-SL-hits-at-0.5%-WR finding now back-testable against intrabar truth\"}",
        "success_metric": "Per-class SL/TP audit report with concrete tightening/widening recommendations",
        "target_release": "next sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-03 01:50:49",
        "updated_at": "2026-06-03 01:50:49",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 101,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Admissibility Pipeline (10-step promotion gate)",
        "description": "Pre-register, data validation, purged walk-forward, cost model, DSR/PBO, block bootstrap, regime robustness, concentration check, forward validation, promotion decision.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All new strategies pass pipeline before capital deployment",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE2_2026-06-02_MIMO_FINAL.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 93,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Daily verified pilot loop (PR #452 MERGED): ETF dual_momentum + crypto WF forward stats + faber forward stats",
        "description": "Daily verified pilot loop (PR #452 MERGED): ETF dual_momentum + crypto WF forward stats + faber forward stats",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"cron\": \".github/workflows/verified-pilot-daily.yml at 06:15 UTC\", \"files\": [\"tools/run_verified_pilots_daily.py\", \"tools/run_eagle_suite.py\", \"verified_strategies/paper_pilot/etf_dual_momentum_pilot.py\"], \"source\": \"cursor session 2026-06-02\", \"merged_pr\": 452, \"first_pilot\": \"ETF XLK virtual signal vs SPY\", \"current_state\": \"n_closed=0, promotion_ready=false (need n>=100)\"}",
        "success_metric": "Forward n >= 30 (checkpoint) / n >= 100 (promotion) on ETF dual_momentum pilot",
        "target_release": "30-90 days forward data accumulation",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:25:00",
        "updated_at": "2026-06-02 14:25:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 86,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "Block-bootstrap MC null for strategy verification",
        "description": "Replace bootstrap-with-replacement with moving-block bootstrap (Kunsch 1989) for Monte Carlo null hypothesis testing. Preserves serial correlation, trend/momentum structure, and volatility clustering.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "kilo-mimo-free",
        "related_persona_id": null,
        "proposed_features": "[\"block_bootstrap_null()\", \"block_bootstrap_sharpe_null()\", \"block_bootstrap_pf_null()\", \"optimal_block_size()\"]",
        "success_metric": "Sharpe p-values for top strategies drop to 0.000 (strong edge signal)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "#452",
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/strategy_verification_engine.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Implemented in alpha_engine/strategy_verification_engine.py. Block size auto-computed via n^(1/3)."
      },
      {
        "enhancement_id": 87,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "PBO via parameter grid permutations (not sign flips)",
        "description": "Implement Probability of Backtest Overfitting per Bailey & Lopez de Prado (2015) using parameter grid permutations. 5 perturbation types: window shift, threshold flip, holding period, trailing stop, volatility scaling.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "kilo-mimo-free",
        "related_persona_id": null,
        "proposed_features": "[\"5 perturbation types\", \"deterministic\", \"49 perms + original = 50 strategies\"]",
        "success_metric": "PBO distinguishes robust (PBO<0.10) from overfit (PBO>0.50)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "#452",
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/strategy_verification_engine.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Implemented in strategy_verification_engine.py compute_pbo_parameter_perms()."
      },
      {
        "enhancement_id": 89,
        "asset_class": "ETF",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "ETF Dual Momentum as first promotion candidate",
        "description": "ETF Dual Momentum (Antonacci 2013) is only lab strategy passing Tier-2 gates: PF 1.60, n=104, Sharpe 1.91. First candidate for paper trading pilot.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "ACCEPTED",
        "proposed_by": "kilo-mimo-free",
        "related_persona_id": null,
        "proposed_features": "[\"absolute + relative momentum\", \"12-month lookback\", \"monthly rebalance\"]",
        "success_metric": "Forward test PF>1.2, Sharpe>0.8, MDD<15% over 60-day pilot",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/backtest_etf_dual_momentum.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Created alpha_engine/backtest_etf_dual_momentum.py (1056 lines)."
      },
      {
        "enhancement_id": 84,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-5 promotion gate (minimax-m3-free, 2026-06-02)",
        "description": "Second in-pipeline gate (6f2.6 in production_scanner.py) that BOOSTS confidence for 33 tournament-validated symbols and 16 personas that have demonstrated >=60% win rates. Multiplicative boost: +20% on whitelisted symbol (_EAGLE5_SYMBOL_BOOST=1.20), +15% on whitelisted persona (_EAGLE5_PERSONA_BOOST=1.15), capped at 1.0 so it can never break downstream thresholds. Equities: BAC, JPM, MSFT, AMZN, GOOGL, AAPL, PEP, MU, TSLA, AMD, INTC, META, XOM, NVDA, KO, WMT. ETFs: EEM, IWM, GLD, XLK, XLE. PENNY (artifact risk): KULR, RGTI, ASTS, RKLB, BBAI, PLTR, SOFI, NIO. COMMODITY: GLD, SLV, USO. FUTURES: ES. Personas: macro_hedge, microcap_momentum, pivot_catcher, momentum_momentum, momentum_breakout, gamma_raid, cycle_rotator, trend_follower, cta_trend, invert_losers, sector_rotation, systematic_momentum, inflation_hedge, vol_arb, statistical_arb, deep_value (ETF-only). Sits on top of EAGLE-4 in the pipeline.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Distribution of _eagle5_boosted picks on whitelisted symbols matches the scanner universe; paper-trade forward PnL on whitelisted symbols is > paper-trade PnL on non-whitelisted within 4 weeks; no picked confidence >1.0 (cap holds).",
        "target_release": "2026-06-02 12:00 UTC",
        "review_notes": null,
        "implementation_pr": "#447",
        "created_at": "2026-06-02 14:18:04",
        "updated_at": "2026-06-02 18:20:02",
        "implemented_at": null,
        "link_md_path": "EAGLE4_2026-06-02_minimax-m3-free.MD",
        "link_url": null,
        "link_github_ref": "7510035f1,447)guide-doc:PR #461",
        "enhancement_plan": "Shipped 2026-06-02. Implementation: alpha_engine/eagle_gates.py (standalone module) + alpha_engine/production_scanner.py main() at 6f2.6 (apply_eagle5_promotion, try/except import to survive concurrent agent edits). Boost flag stored as _eagle5_boosted on each pick. Document: EAGLE4_2026-06-02_minimax-m3-free.MD (combined with EAGLE-4). PR: #447 (HTML guide)."
      },
      {
        "enhancement_id": 83,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-4 admissibility gate (minimax-m3-free, 2026-06-02)",
        "description": "First in-pipeline gate (6f2.5 in production_scanner.py) that operates on the 4 noise personas + 8 negative-edge class x direction combos identified in the AI tournament analysis (5,492 picks, 3,692 resolved). Three actions: (1) KILL 4 NOISE personas \u2014 momentum_scalp (28% WR), breakout_scanner (28% WR), reflexivity_trader (35% WR), deep_value (44% WR n=9). (2) KILL 8 negative-edge class x direction combos \u2014 PENNY/SHORT, PENNY/SELL, COMMODITY/SHORT, COMMODITY/SELL, ETF/SHORT, ETF/SELL, EQUITY/SHORT, EQUITY/SELL. (3) FLIP CRYPTO LONG->SHORT \u2014 the highest-leverage single change in the entire EAGLE stack: n=216 CRYPTO LONG was 33%/-0.49% avg loss; CRYPTO SHORT was 67%/+3.74% avg win. Persona lookup falls back from persona_id to pick['strategy'] (production uses 'strategy' field). Flip flag stored as _eagle4_flipped on each pick for downstream observability.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All 3 action categories execute on every scanner run; live CRYPTO SHORT ratio jumps from pre-gate to >=60% within 1 week of forward data; NOISE personas emit 0 picks post-gate; PENNY/COMMODITY/ETF/EQUITY SHORT/SELL count drops to 0 post-gate.",
        "target_release": "2026-06-02 12:00 UTC",
        "review_notes": null,
        "implementation_pr": "#447",
        "created_at": "2026-06-02 14:17:51",
        "updated_at": "2026-06-02 18:20:02",
        "implemented_at": null,
        "link_md_path": "EAGLE4_2026-06-02_minimax-m3-free.MD",
        "link_url": null,
        "link_github_ref": "e9b2d73fd,7510035f1,447)guide-doc:PR #461",
        "enhancement_plan": "Shipped 2026-06-02. Implementation: alpha_engine/eagle_gates.py (standalone module) + alpha_engine/production_scanner.py main() at 6f2.5 (apply_eagle4_admissibility). Logic order: persona kill -> CRYPTO flip -> directional kill (flip MUST happen before directional kill or CRYPTO LONG would get killed before being flipped). Document: EAGLE4_2026-06-02_minimax-m3-free.MD. PR: #447 (HTML guide)."
      },
      {
        "enhancement_id": 74,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Wire promotion_gate.is_admissible_for_production() into production_scanner emission path",
        "description": "Wire promotion_gate.is_admissible_for_production() into production_scanner emission path",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"alpha_engine/production_scanner.py\", \"function\": \"is_admissible_for_production(strategy_key, asset_class)\", \"first_candidate\": \"etf_verified_dual_momentum\"}",
        "success_metric": "Strategies emit only when on PROMOTED_STRATEGIES allowlist + class not frozen",
        "target_release": "after first 30d shadow on ETF Verified DM",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 76,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Add current_price + unrealized_pnl_pct columns to PF_POSITION + daily mark step",
        "description": "Add current_price + unrealized_pnl_pct columns to PF_POSITION + daily mark step",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"new_columns\": [\"current_price DECIMAL(18,4)\", \"unrealized_pnl_pct DECIMAL(8,4)\"], \"schema_file\": \"tools/portfolios/schema.sql\"}",
        "success_metric": "CURRENT $ and UNREALIZED % cells on portfolio drill pages show live numbers",
        "target_release": "next sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 78,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Real k-fold PBO using 8-fold purged WF (already coded at rigorous_backtest_harness.py:249-320 but never called)",
        "description": "Real k-fold PBO using 8-fold purged WF (already coded at rigorous_backtest_harness.py:249-320 but never called)",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"alpha_engine/rigorous_backtest_harness.py:391-395 (current sign-flip clones) -> 249-320 (existing purged WF)\"}",
        "success_metric": "PBO numbers become meaningful; can detect real overfitting",
        "target_release": "EAGLE-3 P1",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 81,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Symbol whitelist: restrict production emission to AI-tournament-proven symbols (BAC/JPM/MSFT 64-100% WR; KULR/RGTI/ASTS/RKLB 83-100% WR for penny)",
        "description": "Symbol whitelist: restrict production emission to AI-tournament-proven symbols (BAC/JPM/MSFT 64-100% WR; KULR/RGTI/ASTS/RKLB 83-100% WR for penny)",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"source\": \"zoo EAGLE2 + AI tournament leaderboard\", \"proven_etf\": [\"EEM\", \"IWM\", \"GLD\", \"XLE\"], \"proven_penny\": [\"KULR\", \"RGTI\", \"ASTS\", \"RKLB\"], \"proven_equity\": [\"BAC\", \"JPM\", \"MSFT\", \"AMZN\", \"GOOGL\", \"AAPL\", \"NVDA\"]}",
        "success_metric": "Live aggregate WR per asset class lifts to within 80% of tournament WR",
        "target_release": "after data hygiene fixes land",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 71,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Daily verified pilots operator loop (EAGLE suite + forward stats)",
        "description": "Cron/local: run_eagle_suite.py then run_verified_pilots_daily.py (ETF dual momentum pilot, crypto_wf/faber/etf forward stats, pilot_forward_dashboard.json). GitHub workflow verified-pilot-daily.yml 06:15 UTC.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "cursor-composer-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "pilot_forward_dashboard.json refreshed daily; verified_edge_status honest empty states when no logs.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:30",
        "updated_at": "2026-06-02 14:17:30",
        "implemented_at": null,
        "link_md_path": "updates/2026-06-02-eagle2-operational-next-steps.md",
        "link_url": "https://findtorontoevents.ca/audit/data/pilot_forward_dashboard.json",
        "link_github_ref": "452",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 72,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Continue stale OPEN resolution \u2014 bounded batch operator runbook",
        "description": "After first 5\u00d7500 batch (~100k\u2192~3.8k OPEN), schedule additional resolve_stale_open_picks.py runs until OPEN count matches hold-window expectations per asset class.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "ACCEPTED",
        "proposed_by": "cursor-composer-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "OPEN count <5k and check_resolver_health overall GREEN on open_pick_staleness.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:30",
        "updated_at": "2026-06-02 14:17:30",
        "implemented_at": null,
        "link_md_path": "updates/2026-06-02-stale-open-picks-batch-resolve.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 64,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Bonferroni/FDR multiple-testing pre-gate before DSR/SPA",
        "description": "Add cross-section multiple-testing correction (Bonferroni or BH-FDR q=0.10) as a hard pre-gate before DSR/SPA in money_ready_verdict. Closes the false-Tier1-PASS hole.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "0 promotions that fail BH-FDR; documented adjusted-p per promoted sleeve.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "466",
        "created_at": "2026-06-02 14:17:12",
        "updated_at": "2026-06-02 18:17:02",
        "implemented_at": "2026-06-02 18:17:02",
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": "466",
        "enhancement_plan": "Shipped shadow-first in PR #466: _fdr_gate() per-strategy BH-FDR q=0.10 + Bonferroni, stamps fdr_ok/n_fdr_pass/n_bonferroni_pass/_fdr_recommend on every verdict. Enforce via MONEY_READY_FDR_GATE=1. 6 unit tests. Next: run shadow 1-2 weeks, review _fdr_recommend stamps, then enable enforce."
      },
      {
        "enhancement_id": 63,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-6 statistical admissibility gate v1 (minimax-m3-free, 2026-06-02)",
        "description": "Final production pipeline gate (6f2.7 in production_scanner.py) sitting on top of EAGLE-4 (6f2.5) and EAGLE-5 (6f2.6). Kills picks whose strategies fail any of: (a) DSR noise filter \u2014 strategy NOT in the 27 dead strategies from tools/deflated_sharpe_results.json (sr_haircut=2.5034 for 164 strategies, 48.1% survival), (b) Insufficient-n \u2014 <30 trades per strategy (_EAGLE6_MIN_TRADES), (c) Source HHI concentration \u2014 per-strategy pick share <=0.20 (_EAGLE6_MAX_SOURCE_HHI). Fail-open on missing DSR JSON so a missing data file does not break production. Tags every pick with _eagle6_verdict (ADMISSIBLE/INADMISSIBLE/UNSCORED) and _eagle6_gates (per-gate pass + numerics) for downstream observability.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Live scanner emits _eagle6_verdict on 100% of picks; live ratio of INADMISSIBLE picks reflects DSR-noise set membership (target: ~25-35% INADMISSIBLE for the strategies currently in the live scanner universe); no false-positive kills on strategies with n>=30 and HHI<=0.20",
        "target_release": "2026-06-02 14:00 UTC",
        "review_notes": null,
        "implementation_pr": "#456",
        "created_at": "2026-06-02 14:17:07",
        "updated_at": "2026-06-02 18:20:02",
        "implemented_at": "2026-06-02 14:30:00",
        "link_md_path": "EAGLE6_2026-06-02_minimax-m3-free.MD",
        "link_url": null,
        "link_github_ref": "2b4d7ce36,036599997,456",
        "enhancement_plan": "v1 (shipped): DSR noise + n>=30 + HHI<=0.20. v2 backlog: (a) PBO<0.5 gate (blocked on tools/cpcv_pbo_results.json not yet generated), (b) walk-forward OOS PF>=0.8x IS PF gate (blocked on per-strategy walk-forward payload), (c) bootstrap CI on PF (must not cross 1.0), (d) windowed-HHI to avoid over-zealous kill on small populations (single pick in universe = HHI 1.0). Implementation: alpha_engine/eagle_gates.py (standalone module to survive concurrent agent edits) + alpha_engine/production_scanner.py main() at 6f2.7. Document: EAGLE6_2026-06-02_minimax-m3-free.MD. PR: #456."
      },
      {
        "enhancement_id": 56,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Merge PR stack #458 #447 #444 \u2014 walkforward pilots + admissibility + HTML",
        "description": "PR #458 and #457 merged on main 2026-06-02. walkforward_suite pilot PASS etf_dual_momentum OOS PF 2.75. #447/#444/#461 still open.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "walkforward_suite.py --only pilot completes on CI; PRs merged; WALKFORWARD_REPORT.json refreshed.",
        "target_release": "2026-06-09",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 18:37:37",
        "implemented_at": "2026-06-02 18:37:33",
        "link_md_path": "reports/EAGLE_SWARM_SYNTHESIS_2026-06-02.md",
        "link_url": null,
        "link_github_ref": "PR #458,PR #457",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 59,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Weeks 1\u20132 resolver audit \u2014 EXPIRED+PnL, duplicate signal_ts, emitter census",
        "description": "Weekly SQL from EAGLE doc Part E: CRYPTO/FOREX EXPIRED wins, duplicate signal_ts groups, depromote battleground/regime_terminal concentration emitters.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "ACCEPTED",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Resolver dispute rate <1%; duplicate-ts groups trending down; census report in reports/.",
        "target_release": "2026-06-16",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "reports/EAGLE_2026-06-02_GROK.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 60,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: strategy_admit.py for every promotion candidate + Bonferroni from registry",
        "description": "Re-run walkforward_suite on 50webs when source available; strategy_admit per sleeve; Bonferroni \u03b1_adj from hypothesis_registry.json (M-107).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Every promotion PR cites admit verdict JSON; no sleeve promoted without harness row.",
        "target_release": "2026-06-23",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "tools/strategy_admit.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 54,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Wire proven-but-dormant backtest edges to live emission (highest-ROI money-ready bridge)",
        "description": "Fleet investigation: the bottleneck is NOT strategy discovery or Monte-Carlo (validation is over-served, runs hourly) \u2014 it is live signal VOLUME. Multiple PROVEN backtest edges exist but emit ~0 live picks: ETF etf_cross_sectional_momentum (PF 2.05/WR 70/Sharpe 0.97, wired+ENABLED, just young); EQUITY vt_pattern_sweep (PF 1.48/n=245, wired but DORMANT 0 emissions); EQUITY trend_strength_200ma_adx (PF 2.06 TIER-1, ORPHAN no emitter); COMMODITY diwali_gold (PF 1.98/n=21/21y, ORPHAN); EQUITY PEAD (62% OOS WR, WIRED but PEAD_EQUITY_ENABLED=0). Wiring/un-dormanting these routes already-proven edge into the only thing the gate starves for (n>=50).",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Each wired edge accumulates n>=30 live resolved at PF>=1.3 within 60-90d; >=2 classes reach Tier-2",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-31 02:24:46",
        "updated_at": "2026-05-31 02:24:46",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 52,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Masking-policy linter + baselined manifest (PR-only gate)",
        "description": "Tiered continue-on-error policy: manifest grandfathers 38 existing silent maskers; lint_workflow_masking.py --fail-on-new blocks only NEW silent maskers at PR time (zero new red X). PR-only, never on push-to-main.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "ACCEPTED",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "0 new silent maskers merged; known_silent baseline drawn down over time",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 11:47:38",
        "updated_at": "2026-05-29 11:47:38",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #51",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 53,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Guardian step-level masked-failure detection",
        "description": "Extend failure-guardian to surface green-job/failed-step masking (the 316-coe blind spot) via the /runs/{id}/jobs API, bounded for quota, report + Discord.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "ACCEPTED",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "masked failures appear in actions_failure_guardian.json + amber Discord alert",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 11:47:38",
        "updated_at": "2026-05-29 11:47:38",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "PR #50",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 51,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Wire ADX_Trend (and donchian_vol_breakout companion) as first universal cross-asset momentum strategy with n>=30 + 5-fold OOS/MC p<0.05 gate",
        "description": "From reports/CYCLE_12_STRATEGY_HUNT_2026-05-29.md: 'Key Discovery: **ADX_Trend is a universal winner across ALL asset classes** \u2014 the first strategy to show PF>1.5 on EQUITY, ETF, COMMODITY, FOREX, and CRYPTO simultaneously.' Table with specific Tier 1: 'ADX_Trend | NVDA | EQUITY | 5.17 | 80.0% | 10 | 14.33 | Wide'; 'Comm_ADX_Trend | SI=F | COMMODITY | 3.85 | 68.4% | 19 | 9.97'; 'ETF_ADX_Trend | XLK | ETF | 4.04 | 71.4% | 14'; 'Forex_ADX_Trend | USDJPY=X | FOREX | 1.45 | 41.2% | 17'; 'Crypto_ADX_Trend | ETH-USD | CRYPTO | 1.74 | 54.2% | 48'. 'Wiring Recommendations \u2014 Priority 1: Wire  to production... Add  to STRATEGY_FAMILIES as 'trend' family'; 'Priority 2: Wire  for EQUITY/COMMODITY'; 'Next Steps \u2014 Immediate: Wire  and  to '. 'Sample sizes are dangerously small: Most Cycle 12 strategies have n=3-9. Need n>=30 before wiring to production' (C12_NEW_STRATEGIES:106,112-113). Optimal geometry per class (C12_STRATEGY_HUNT:73-78). Ties to C11_OOS_MC: MTF_RSI/ADX variants with '5/5 folds' OOS + MC p=0.024 (C11:29-37,61).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "EQUITY (currently FAIL+INSUFF-N) + other 5 classes reach pf_registry Tier 2 (PF>1.5/WR>50/MDD<20, n_resolved>=100 policy-clean); incidents.html row closure; measurable lift in 14d/48h WR/PF and pick_funnel.html.",
        "target_release": "2026-06-09 18:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 10:40:39",
        "updated_at": "2026-05-29 10:40:39",
        "implemented_at": null,
        "link_md_path": "reports/CYCLE_12_STRATEGY_HUNT_2026-05-29.md,reports/CYCLE_12_NEW_STRATEGIES_2026-05-29.md,reports/CYCLE_11_OOS_MONTE_CARLO_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 50,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Extend rigorous_backtest_harness (purged WF + DSR + PBO + costs) to all 81 strategies + implement 7 new <=2-param economic designs (crypto_funding_carry_reversion etc.) to drive PBO<0.20 + T3+",
        "description": "From reports/STRATEGY_ROADMAP_COMPREHENSIVE_2026-05-29.md: Strategies with DSR/PBO computed | 2. Average PBO (all sized) | 0.613. Root Cause: High PBO (0.3-0.7) indicates most strategies were data-mined. The solution: fewer parameters + economic rationale + purged walk-forward. The 7 New Strategy Designs: CRYPTO crypto_funding_carry_reversion (2 params), EQUITY equity_earnings_momentum_quality, FOREX forex_carry_term_structure, ETF etf_sector_rotation_momentum, COMMODITY commodity_term_structure_carry, FUTURES futures_trend_volatility_target, BOND bond_yield_curve_steepener. T3: Min DSR >0.80 Max PBO <0.20.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "DSR/PBO computed + reported for >=50/81 strategies (pf_registry); >=1 design per weak class reaches T3 (PBO<0.20 + DSR>0.80 + n>=20 policy-clean); 14d/48h OOS stability; incidents.html tracks harness coverage + new designs.",
        "target_release": "2026-06-09 18:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 10:10:12",
        "updated_at": "2026-05-29 10:10:12",
        "implemented_at": null,
        "link_md_path": "reports/STRATEGY_ROADMAP_COMPREHENSIVE_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 45,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Single-persona swarm-pick backfill + tier-gate (backfill 60d for tier=single; promote only if PF>=1.30 & WR>=50% at n>=100)",
        "description": "From daily_ideas_synthesis_2026-05-16.md + edge_sweep + this Daily Ideas subagent. 22/38 swarm picks are tier=single (1/1 vote) with no backing. Operational risk; backfill + enforce tier-gate so only verifiable high-quality singles get promoted to TV-eligible/Smart Picks.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All swarm picks have verifiable PF/WR backing; no unbacked singles in Smart Picks or funnel",
        "target_release": "2026-06-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:46:01",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 43,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Confidence calibration table + MySQL anomaly detector (at_confidence_calibration + mysql_prediction_anomaly_scanner for inverted confidence/direction conflicts)",
        "description": "From daily_ideas_synthesis_2026-05-16.md + edge_sweep + KimiCode + this Daily Ideas subagent (HIGH, fixes anti-predictive confidence inversion blocking all WR/PF claims). Create at_confidence_calibration (bucket-level drift tracking + auto-quarantine) + tools/mysql_prediction_anomaly_scanner.py (inverted confidence, direction conflicts, silent-dead strategies). Wire to quality gates.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "+8-12pp class WR via prevented inverted picks; reproducible HC stats (trust_score gaps closed); anomaly flags reduce ghost/PnL drift",
        "target_release": "2026-06-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:43:42",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 42,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "PCG-5 portfolio gate stack shadow-mode wire (5-gate exec-time reject for concentration/correlation/regime/thin-sample)",
        "description": "From daily_ideas_synthesis_2026-05-16.md + edge_sweep + this Daily Ideas subagent review (multi-agent consensus). 5-gate exec-time reject layer (portfolio concentration + correlation + regime + thin-sample + other) proposed for shadow to block live sizing on correlated/thin/quarantined signals. No production caller yet despite high consensus. Wire observable caller in paper-trade path per Wire-Up Rule.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Measurable DD reduction in sims/paper (target <20% MDD on sized books); zero concentration violations; gates surface in pick_funnel/audit",
        "target_release": "2026-06-15",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:43:37",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 38,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Per-strategy Smart Picks filtering + buried winners promotion + health panels (mega_mutation, kimi scouts etc.)",
        "description": "From AUDIT_DASHBOARD_BURIED_WINNERS_2026-05-29.md + this subagent review. Smart Picks only has 4 picks despite 16+ strategies with forward PF>2.0. mega_mutation PF4.39 n=110; kimi_riseoftheclaw scouts PF>2.5 with 0 active. Add per-strategy filtering, promote buried high-PF to active sizing, add health panels showing top fwd_PF not just system level. Fixes aggregation hiding real edge.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-05-25-29-MDs-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Smart Picks reflects buried winners (mega_mutation etc. active); >10 strategies with fwd PF>2.0 surfaced; measurable lift in class PF/WR",
        "target_release": "2026-06-15",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:41:33",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/AUDIT_DASHBOARD_BURIED_WINNERS_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Audit Dashboard Buried Winners Analysis\n\n**Date:** 2026-05-29  \n**Analyst:** Grok 4.3 (autonomous)  \n**Data source:** `audit_dashboard/data/dashboard_data.json` (2026-05-28T21:29Z)\n\n---\n\n## Executive Summary\n\n**CRITICAL FINDING:** Multiple extremely profitable strategies are buried in the leaderboard with zero or minimal active picks, while the main `alpha_engine` system is **LOSING** (-$75.56 PnL, 37.1% WR). The dashboard aggregates hide winners in per-strategy noise.\n\n### Top Buried Winners (fwd_pf > 3.0, n >= 10, 0 active picks)\n\n| Strategy | Fwd PF | Fwd WR | Trades | Total PnL | Active | Source System |\n|----------|--------|--------|--------|-----------|--------|---------------|\n| **mega_mutation_macd_rsi_m048** | **4.39** | **67.3%** | **110** | **$377.24** | **0** | mega_mutation |\n| **donchian-stock-breakout** | **7.14** | **78.6%** | **14** | **$87.45** | **0** | kimi_riseoftheclaw |\n| **rs-breakout-scout** | **3.98** | **72.1%** | **43** | **$98.64** | **1** | kimi_riseoftheclaw |\n| drawdown_recovery_rsi_eth | 5.98 | 73.9% | 46 | $29.87 | 1 | alpha_engine |\n| drawdown_recovery_rsi_sol | 8.44 | 61.5% | 13 | $16.37 | 0 | alpha_engine |\n| strong consensus (AE + ml_crypto_pred) | 2.92 | 67.3% | 55 | $75.50 | 0 | aggregated |\n| mega_mutation_macd_rsi_m017 | 4.49 | 66.7% | 18 | $40.42 | 0 | mega_mutation |\n| ema-ribbon-momentum-scout | 2.78 | 68.4% | 19 | $44.03 | 2 | kimi_riseoftheclaw |\n| mtf-align-scout | 2.51 | 54.5% | 22 | $42.07 | 0 | kimi_riseoftheclaw |\n| price-accel-scout | 2.27 | 57.9% | 19 | $38.51 | 0 | kimi_riseoftheclaw |\n| crypto-momentum-scout | 2.04 | 58.6% | 29 | $43.99 | 0 | kimi_riseoftheclaw |\n\n---\n\n## Problem 1: mega_mutation Strategies Completely Buried\n\n**mega_mutation** is the #1 system by WR (62.9%, 124 resolved, PnL +$246.20) but has only **1 active pick**. Its strategies:\n\n| Strategy | WR | Trades | PnL | Active |\n|----------|-----|--------|-----|--------|\n| mega_mutation_macd_rsi_m048 | 67.3% | 110 | $377.24 | 0 |\n| mega_mutation_macd_rsi_m017 | 66.7% | 18 | $40.42 | 0 |\n| mega_mutation_ema_momentum_m006 | 56.2% | 73 | $17.41 | 0 |\n\n**Why buried:** mega_mutation strategies have 0 active picks. They appear in the leaderboard but are NOT feeding into Smart Picks or the dashboard's headline metrics.\n\n**Impact:** $435+ in realized PnL from a single mutation system, invisible on the main dashboard.\n\n---\n\n## Problem 2: kimi_riseoftheclaw Strategies Under-Sized\n\n**kimi_riseoftheclaw** is the #1 system by total PnL ($410.77) with 751 resolved picks. Its best strategies:\n\n| Strategy | WR | Trades | PnL | Active |\n|----------|-----|--------|-----|--------|\n| rs-breakout-scout | 72.1% | 43 | $98.64 | 1 |\n| donchian-stock-breakout | 78.6% | 14 | $87.45 | 0 |\n| ema-ribbon-momentum-scout | 68.4% | 19 | $44.03 | 2 |\n| crypto-momentum-scout | 58.6% | 29 | $43.99 | 0 |\n| mtf-align-scout | 54.5% | 22 | $42.07 | 0 |\n| price-accel-scout | 57.9% | 19 | $38.51 | 0 |\n\n**Why buried:** These are scout-level strategies with low active pick counts. They perform well historically but aren't being sized up.\n\n---\n\n## Problem 3: alpha_engine Main System is LOSING\n\nThe primary `alpha_engine` system:\n- **WR: 37.1%** (143 resolved, 53 wins, 90 losses)\n- **PnL: -$75.56**\n- **28 active picks**\n\nThis is the system generating most of the dashboard's headline numbers. Meanwhile, strategies WITHIN alpha_engine (like drawdown_recovery_rsi_eth at 73.9% WR) are winners but get averaged into the losing aggregate.\n\n---\n\n## Problem 4: Duplicate Leaderboard Entries\n\nEvery leaderboard entry appears **exactly twice** \u2014 once with `source=\"\"` and once with the actual source. Example:\n\n```\nmega_mutation_macd_rsi_m048: source=\"\"              n=110\nmega_mutation_macd_rsi_m048: source=\"mega_mutation\"  n=110\n```\n\nThis inflates the apparent count of strategies and may affect aggregation.\n\n---\n\n## Problem 5: Smart Picks Only Has 4 Picks\n\nThe Smart Picks feed contains only **4 picks** despite:\n- 16+ strategies with forward PF > 2.0 and n >= 10\n- 1,021 leaderboard entries\n- 126 source systems\n\nCurrent Smart Picks:\n- MeanReversionBB (2 picks)\n- drawdown_recovery_rsi_xrp (1 pick)\n- VWAP Deviation Scalp (1 pick)\n\n**Missing from Smart Picks:** mega_mutation, donchian-stock-breakout, rs-breakout-scout, strong consensus picks.\n\n---\n\n## Problem 6: AI Tournament Leaders Not Leveraged\n\nTop AI tournament models by accuracy (n>=10 resolved):\n\n| Model | WR | Resolved | Avg PnL |\n|-------|-----|----------|---------|\n| llm7_qwen | 66.0% | 53 | +0.86% |\n| cursor_agent | 65.5% | 55 | +1.37% |\n| minimax_m2_5 | 63.8% | 47 | +0.38% |\n| command_a | 62.9% | 62 | +0.54% |\n| llama4_scout | 61.5% | 52 | +1.39% |\n| grok3 | 59.0% | 83 | +1.81% |\n\nThese models are picking at 59-66% accuracy but their picks don't appear to feed into Smart Picks sizing decisions.\n\n---\n\n## Problem 7: Per-Asset-Class Health vs Reality\n\nDashboard shows:\n\n| Class | Status | WR | PF |\n|-------|--------|-----|-----|\n| CRYPTO | stressed | 35.0% | 0.87 |\n| EQUITY | thin_sample | 27.3% | 0.05 |\n| FOREX | thin_sample | 27.8% | 0.89 |\n| COMMODITY | insufficient | 42.9% | 1.96 |\n| BOND | insufficient | 0% | null |\n\nBut the **leaderboard** shows winning strategies in EVERY class:\n- CRYPTO: mega_mutation (67.3% WR), drawdown_recovery_rsi_eth (73.9%)\n- EQUITY: donchian-stock-breakout (78.6%), gap-and-go-stocks (66.7%)\n- FOREX: drawdown_recovery_rsi_sol (61.5%)\n- COMMODITY: (needs more data)\n\nThe per-class health metrics are averaging ALL strategies (including losers), hiding the winners.\n\n---\n\n## Problem 8: Predictions Leaderboard Anomaly\n\n| Predictor | WR | N | Avg PnL | Tier |\n|-----------|-----|---|---------|------|\n| stocktwits:JaredSotken | 100% | 31 | +1.19% | PROVEN |\n| polymarket:consensus | 95.6% | 45 | **-47.57%** | PROVEN |\n\n**polymarket:consensus** has 95.6% accuracy but **-47.57% avg PnL** \u2014 winning predictions but losing money on sizing. This suggests the tier system is broken for prediction markets.\n\n---\n\n## Recommendations\n\n### Immediate Fixes\n\n1. **Promote mega_mutation to Smart Picks** \u2014 PF 4.39, n=110, $377 PnL deserves active sizing\n2. **Size up kimi_riseoftheclaw scout strategies** \u2014 donchian, rs-breakout, ema-ribbon all have PF > 2.5\n3. **Fix duplicate leaderboard entries** \u2014 deduplicate by (strategy, source_system) pair\n4. **Add per-strategy filtering to Smart Picks** \u2014 don't just use aggregate system WR\n\n### Architecture Changes\n\n5. **Per-strategy health panels** on dashboard \u2014 show top 10 strategies by forward PF, not just system-level\n6. **Smart Picks should consider strategy-level performance**, not just system-level\n7. **AI tournament model consensus** should feed into Smart Picks when multiple top models agree\n8. **Fix predictions tier system** \u2014 polymarket consensus should be LOSING tier despite high accuracy\n\n### Monitoring\n\n9. **Alert when a strategy has PF > 3.0 and 0 active picks** \u2014 this is the buried winner pattern\n10. **Track strategy-to-Smart-Picks pipeline** \u2014 ensure winners flow through to active picks\n\n---\n\n## Files to Check\n\n- `audit_dashboard/data/dashboard_data.json` \u2014 main data source\n- `audit_dashboard/data/ai_tournament_model_summary.json` \u2014 AI model performance\n- `audit_dashboard/data/pick_summary_stats_48h.json` \u2014 recent pick stats\n- `audit_dashboard/pick_funnel.html` \u2014 pick funnel display\n- `audit_dashboard/template.html` \u2014 main dashboard\n- `alpha_engine/smart_picks_engine.py` \u2014 Smart Picks selection logic\n- `audit_trail/dashboard_generator.py` \u2014 dashboard data generation"
      },
      {
        "enhancement_id": 39,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Universal Monte Carlo permutation test (1000x, p<0.05) as mandatory promotion gate + scaffold wire",
        "description": "From 2026-05-27_pr_set_plan_and_blockers.md + AUTONOMOUS_STRATEGY_HUNT_CYCLES + this subagent. No current gate; small-sample luck survives. Add tools/permutation_test.py + wire to quality_gates/promotion: require real PF in 99th percentile of noise. Proven in hunt (91.5% profitable, ensemble 92% sig). Highest-consensus P0 control per DeepSeek/MiMo.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-05-25-29-MDs-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "0 promotions without 99th %ile MC pass; all wired strats p<0.05",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:41:33",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-27_pr_set_plan_and_blockers.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "---\ntitle: \"PR Set Plan + Items I Cannot Solve Without [X]\"\ndate: 2026-05-27 04:00 UTC\nstatus: PR #8 opened; PR #9, #10 planned but deferred (context budget + MiMo running PRs in parallel)\n---\n\n# PR Set Plan & Explicit Blockers\n\n## PRs OPENED this session\n\n| PR | Title | Status | Peer review |\n|---|---|---|---|\n| #3 | outcome-resolver gitadd freeze fix | \u2705 Merged | swarm passed |\n| #4 | 13-workflow sweep (same git-add bug) | \u2705 Merged | swarm passed |\n| #5 | Phase 1.2 + 1.4 backfill audit trail + MySQL SQL | \u2705 Merged | self-review |\n| #6 | 23-model AI tournament fleet + 14 new GH secrets | \u2705 Merged | swarm passed |\n| #7 | round-2 git-add sweep (3 more workflows) | \u2705 Merged | subagent identified |\n| **#8** | **nightly ML gatekeeper A/B training (matrix)** | **\ud83d\udfe1 OPEN** | **deepseek MERGE_WITH_NOTES \u2192 amended** |\n\n## PRs PLANNED but deferred\n\nTwo are queued but I'm deferring rather than rushing them because:\n1. MiMo v2.5 Pro session is running the SAME \"create PR set\" instructions in parallel \u2014 duplication risk\n2. Each needs careful code (not just config edits) and proper peer-review cycles\n3. The 3-hour wakeup at 04:51 UTC will review whatever MiMo opened, then I'll decide which to still build vs which MiMo already did\n\n### PR #9 \u2014 Permutation test scaffold (NEW-24 P0)\n\n**Scope**: Add `tools/permutation_test.py` that:\n1. Loads a strategy's closed picks from MySQL\n2. Computes baseline PF\n3. Shuffles outcome labels 1,000\u00d7 and re-computes PF each time\n4. Asserts real PF is in the 99th percentile of the shuffle distribution\n5. Returns `PROMOTED | REJECTED_OVERFIT | INSUFF_N` verdict\n6. Wire into `audit_trail/quality_gates.py::passes_smart_gate` as a new check (gated by env flag for safe rollout)\n\n**Why P0**: Cross-AI consensus (DeepSeek + MiMo v1 + MiMo v2.5 + RooCode + me) all flag this as highest-priority new control. Without it, every \"promising strategy\" survives only on small-sample luck.\n\n**Estimated work**: ~200 lines Python + tests + workflow wire-up + impact .MD. 2-3h.\n\n**Blocker**: Needs read access to MySQL `trading_picks` table to load real closed picks. Either:\n- (a) User runs the script locally against MySQL and pipes results to a JSON the workflow reads, OR\n- (b) MySQL creds in GH secrets (already there: `DB_PASS_STOCKS` per workflows I've seen)\n\n### PR #10 \u2014 Anti-overfit page INSUFF-N badge (P1 #4)\n\n**Scope**: Add an \"INSUFF-N (n<100)\" badge to `audit_dashboard/anti_overfit.html` for any strategy row where `n_decisive < 100`, AND reorder so n\u2265100 rows show first.\n\n**Why**: P1 #4 incident says CRYPTO ML strategies with DSR\u22650.9995 are shown without insufficient-n badges; this misleads. Also a MiMo recommendation.\n\n**Estimated work**: ~80 lines HTML/JS + 30 lines in `audit_trail/dashboard_generator.py` to compute the badge field. 1-1.5h.\n\n**Blocker**: Would need to either (a) wait for next audit-dashboard cron to refresh the page, or (b) trigger the workflow_dispatch manually post-merge. Easy.\n\n## Items I CANNOT SOLVE without [X] \u2014 explicit blockers\n\nThese are the gaps where I lack the access/permission/data to make a single-PR fix. Each names the specific access required.\n\n### Needs MySQL write access (user runs SQL at maintenance window)\n\n| # | Action | Why I can't | Status |\n|---|---|---|---|\n| 1 | Run `tools/relabel_closed_picks_mysql.sql` | Need INSERT/UPDATE on `ejaguiar1_stocks.trading_picks` | Script READY in repo since session start; gates downstream |\n| 2 | Apply incidents-update SQL from `reports/2026-05-27_incidents_state_update_post_mimo.md` | Need UPDATE on `ejaguiar1_stocks.incidents` | Block of 5 RESOLVE + 13 INSERT statements |\n| 3 | Restart `forward_validator` to drain 29M open-position backlog | Need to run a process on a server I don't have access to | P0 #13 \u2014 gates EVERY downstream WR/PF calculation |\n| 4 | Deduplicate 56,559 ghost rows (top cohort: 20,474 MATICUSDT) | Need `DELETE FROM trading_picks WHERE ...` privilege | Same \u2014 corrupts every aggregate |\n| 5 | Re-resolve 2,531 WON rows with negative PnL | Need to run `tools/re_resolve_historical_v2.py` against MySQL | Even after Phase 1.2 relabel, the WON-with-negative-PnL rows may not all be the same set |\n| 6 | Extend Phase 1.4 trust_score backfill to MySQL | I wrote the local-JSON version; SQL counterpart needs `UPDATE trading_picks SET trust_score = ... WHERE ...` with the same logic as `alpha_engine/trust_score.py::compute_trust_score` | Currently only the JSON view is populated |\n\n### Needs `~/dbpasses.txt` API key that doesn't exist\n\n| # | Action | Missing key | Workaround |\n|---|---|---|---|\n| 7 | Wake up `gpt4o_mini`, `cursor_agent`, `claude_opus` tournament personas | `OPENAI_API_KEY`, `ANTHROPIC_API_KEY` (no equivalent in dbpasses) | Get keys from platform.openai.com / console.anthropic.com, then `gh secret set` |\n| 8 | Wake up `mistral_large` | `MISTRAL_API_KEY` (dbpasses has `MISTRAL API KEY` with spaces but I already grabbed it) | Already set in PR #6 |\n| 9 | Switch mercury OFF dead OpenRouter quota to working `INCEPTION_API_KEY` | No `INCEPTION_API_KEY` in dbpasses | PR #6 already redirects mercury to Together AI as workaround; INCEPTION is the cleaner path |\n| 10 | Re-key OpenRouter top-up | Account at openrouter.ai needs credit (~$5-10) | User decision |\n\n### Needs strategy-author judgment (not just code)\n\n| # | Action | Why I can't decide | Recommended owner |\n|---|---|---|---|\n| 11 | Promote `pead_equity` SHADOW \u2192 probation | Need to know the human-authored gate file and whether MiMo's 62.2% OOS WR matches the canonical `walkforward.by_class` figure | Strategy owner / dashboard admin |\n| 12 | Kill `quan_engine_scalp` from emission | Per CLAUDE.md: requires `docs/STRATEGY_INVESTIGATION_BEFORE_KILL.md` + `docs/MUTATION_THREE_AXIS_PROTOCOL.md` (export closed CSV \u2192 `python tools/mutation_analysis.py`). I haven't run those. | Strategy owner with closed-pick CSV access |\n| 13 | Add `forex_carry` to non_crypto_policy allowlist | Claimed 55-60% WR not yet verified per CLAUDE.md investigation rule (kill-before-investigate inverse applies) | Verify in shadow first |\n\n### Needs cross-PC coordination\n\n| # | Action | Why I can't | Status |\n|---|---|---|---|\n| 14 | Lift the `pause-remote-2026-05-22` freeze in MEMORY.md | User's other PC was rewriting git history; need user's go-ahead | User decision |\n| 15 | Reconcile RooCode's `kilocode-improvement` skill, Kilo Code's `kilo-audit-sync` skill, and my `consult-swarm` / `PeerReviewSwarmOptions` skills into a unified skill registry | Cross-agent coordination | Defer to wrapup |\n\n## Operational items needing investigation before code change\n\nThese I COULD code-fix but the investigation work isn't done:\n\n| # | Action | What investigation is missing |\n|---|---|---|\n| 16 | Fix `claude_gainer_ml` \"Models not found\" \u2014 likely loader path mismatch | Trace which loader call fails (`live_scanner.py` vs `claude_gainer_ml/inference.py`) \u2014 needs to be run locally |\n| 17 | Fix `mercury2` cwd bug \u2014 workflow says `joblib not found` but model exists | Need to run the workflow_dispatch and capture stack trace |\n| 18 | Fix `ml-feedback-retrain` cold-start | Trainer has no path when `outcome_feedback_model.joblib` doesn't exist; need to add the initial-train branch |\n| 19 | Fix `consensus_pick_builder.py` (active_picks.json is 0 keys despite copy-trader pipeline running) | Need to run locally + trace why merge fails |\n\n## Recommended sequence for next session\n\n1. **Review what MiMo's parallel session built** (4:51 UTC wakeup will sweep open PRs)\n2. **If MiMo built PR #9 or PR #10**: review + merge or amend\n3. **If MiMo did NOT build them**: build them per the scope above\n4. **Then tackle \"investigation needed\" items 16-19** \u2014 those are CI loader path bugs that need a one-shot diagnostic workflow_dispatch + log read\n5. **User actions** (1-15) are user-supervised; not code work"
      },
      {
        "enhancement_id": 34,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add MySQL anomaly detector + predictor scorecard tables (at_predictor_scorecard, at_confidence_calibration, mysql_prediction_anomaly_scanner) from daily ideas corpus",
        "description": "From daily_ideas_synthesis_2026-05-16.md (KimiCode + synthesis). Inverted confidence, direction conflicts, silent-dead strategies, drift tracking. Directly improves Goal #1 data integrity and incidents visibility.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-daily-ideas-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Tables populated nightly; at least 3 new P0/P1 incidents auto-detected per week from anomaly scanner",
        "target_release": "2026-06-20",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:39:50",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 32,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add profitable-but-filtered / profitable-but-quarantined audit lane",
        "description": "Create a non-admission-changing observability lane that records picks rejected by gates or quarantine rules but later resolved positively. This turns hidden false negatives into measurable backlog without weakening live safety gates on day one.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Dashboard exposes per-asset-class counts and PF/WR for profitable filtered picks; every row includes first-failed gate + later outcome.",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 33,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add bounded hot-streak exemption with explicit audit trail",
        "description": "Current streak logic influences scoring but does not create a controlled exemption path. Add a time-boxed, per-sleeve exemption contract so repeated clean winners can earn temporary gate relief without silently changing the system.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Every hot-streak exemption has a minimum clean sample, expiry timestamp, explicit reason, and automatic rollback on deterioration.",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 28,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Adopt multi-model-consensus 0-100 algorithm quality score (DeepSeek+Kimi+8 CF models)",
        "description": "10-model panel (NVIDIA DeepSeek-R1-32B + kimi-k2.6 + CF qwen3-30b/qwq-32b/llama-3.3-70b/llama-4-scout/nemotron-3-120b/gpt-oss-120b/glm-4.7-flash/mistral-small-24b) converged on 8 core scoring dimensions: Sharpe(20%)+Sortino(20%)+MaxDD(20%)+n(10%)+Bonf-sig(10%)+OOS-ratio(10%)+cost-burden(5%)+bias-audit(5%). v1 synthesis at reports/2026-05-25_multi_model_scoring_synthesis_v1.md. Wire as sidecar advisory quality_score in nav_surface_edge_matrix.json + score_pick + verified-alpha gate.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "multi-model-consensus",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "quality_score column live on /audit/pick_funnel.html nav-surface matrix; every promoted strategy carries a documented 0-100 score; deploy band (>=80) blocks promotion until all 10 Kimi gates pass",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 05:15:27",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_multi_model_scoring_synthesis_v1.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Multi-Model Stock-Algorithm Scoring Synthesis \u2014 v1 (partial, 2 of 11 models landed)\n\n**Date:** 2026-05-25\n**Status:** PRELIMINARY \u2014 only NVIDIA DeepSeek-R1-Distill-Qwen-32B-Uncensored + moonshotai/kimi-k2.6 have completed. MiniMax-m2.7, CF qwen3-30b, CF qwq-32b, and CF top-6 panel (llama-3.3-70b, llama-4-scout, nemotron-3-120b, gpt-oss-120b, glm-4.7-flash, mistral-small-24b) still running. This doc will be updated with v2 once they land.\n\n## Inputs\n\n| Source report | Model | Status |\n|---|---|---|\n| [2026-05-25_nvidia_deepseek_scoring_research.md](2026-05-25_nvidia_deepseek_scoring_research.md) | nicoboss/DeepSeek-R1-Distill-Qwen-32B-Uncensored (NVIDIA NIM) | done |\n| [2026-05-25_nvidia_kimi_scoring_research.md](2026-05-25_nvidia_kimi_scoring_research.md) | moonshotai/kimi-k2.6 (NVIDIA Integrate) | done |\n| 2026-05-25_nvidia_minimax_scoring_research.md | minimaxai/minimax-m2.7 | in flight |\n| 2026-05-25_cf_qwen_scoring_research.md | @cf/qwen/qwen3-30b-a3b-fp8 + @cf/qwen/qwq-32b | in flight |\n| 2026-05-25_cf_top6_scoring_research.md | 6 CF Workers AI top models | in flight |\n\n## Cross-model consensus dimensions\n\nBoth DeepSeek + Kimi independently selected these as the core dimensions of a quality score (verbatim ordering):\n\n1. **Risk-adjusted return** \u2014 Sharpe primary, Sortino preferred (both flag Sortino as \"more honest because downside-only\")\n2. **Drawdown control** \u2014 max-drawdown (peak-to-trough) hard ceiling\n3. **Sample size** \u2014 explicit floor below which the score is \"unreliable\"\n4. **Statistical significance** \u2014 p-value / Bonferroni / t-test on returns > 0\n5. **Out-of-sample generalization** \u2014 train/test split ratio, OOS-vs-IS metric ratio\n6. **Cost burden** \u2014 slippage + commissions as % of gross return\n7. **Win-rate** \u2014 secondary, both warn it's misleading without payoff-ratio context\n8. **Bias audits** \u2014 survivorship, look-ahead, snooping\n\nDimensions where they diverge:\n- DeepSeek explicitly weighted **interpretability** (5%); Kimi treated it as a binary `bias_audit == PASS` gate\n- Kimi adds **beta to benchmark** (`|\u03b2| <= 0.3` for deploy); DeepSeek does not\n- DeepSeek adds **scalability / computational efficiency** as a dimension; Kimi treats it as out-of-scope\n\n## Consensus single-score formula (v1 draft)\n\nSynthesized from both \u2014 uses DeepSeek's weight skeleton, replaces the soft \"win-rate\" with Kimi's `OOS-fraction` (more rigorous), keeps both authors' minimum-sample-size floor:\n\n```\ndef quality_score(m, n_trades):\n    # m = dict of metrics; n_trades = closed-trade count\n    if n_trades < 100:\n        return None, \"INSUFFICIENT_N (need n>=100 for reliable score)\"\n\n    # Per-dimension 0-1 normalized sub-scores (saturating linear)\n    sharpe_s    = min(m['sharpe_net'] / 1.5, 1.0)              # 1.5 = elite\n    sortino_s   = min(m['sortino']    / 2.0, 1.0)              # 2.0 = elite\n    maxdd_s     = max(0, 1 - m['max_dd_pct'] / 0.30)           # 0% DD \u2192 1.0, 30% DD \u2192 0\n    n_s         = min(n_trades / 500, 1.0)                     # 500 = saturated confidence\n    sig_s       = 1.0 if m['bonferroni_p'] < 0.05 else (0.5 if m['bonferroni_p'] < 0.10 else 0)\n    oos_s       = min(m['oos_is_ratio'], 1.0)                  # 1.0 = OOS Sharpe == IS Sharpe\n    cost_s      = max(0, 1 - m['cost_burden'])                 # 0% cost \u2192 1.0\n    bias_s      = 1.0 if m['bias_audit'] == 'PASS' else 0.0    # hard gate\n\n    # Weighted sum (weights sum to 1.00)\n    score = 100 * (\n        0.20 * sharpe_s   +\n        0.20 * sortino_s  +\n        0.20 * maxdd_s    +\n        0.10 * n_s        +\n        0.10 * sig_s      +\n        0.10 * oos_s      +\n        0.05 * cost_s     +\n        0.05 * bias_s\n    )\n    return round(score, 1), None\n```\n\n## Consensus deploy bands\n\nBoth authors converged on a 3-tier band with the same conceptual cutoffs:\n\n| Band | Score | DeepSeek gates | Kimi gates |\n|---|---|---|---|\n| **DEPLOY** | \u2265 80 | Sharpe\u22651.2 \u00b7 MaxDD\u226415% \u00b7 n\u2265200 \u00b7 Bonf-p<0.05 | Sharpe\u22651.0 \u00b7 Sortino\u22651.5 \u00b7 maxDD\u226420% \u00b7 n\u2265200 \u00b7 Bonf-p<0.05 \u00b7 OOS-R\u00b2\u22650.6 \u00b7 \\|\u03b2\\|\u22640.3 \u00b7 cost<30% \u00b7 bias=PASS \u00b7 WR\u226553% |\n| **RESEARCH** | 60\u201379 | Sharpe\u22650.8 \u00b7 MaxDD\u226425% \u00b7 n\u2265150 \u00b7 Bonf-p<0.10 | Sharpe\u22650.8 \u00b7 Sortino\u22650.8 \u00b7 maxDD\u226435% \u00b7 n\u2265100 \u00b7 p<0.05 \u00b7 OOS-frac\u22650.20 |\n| **JUNK** | < 60 | any DEPLOY gate fails | any RESEARCH gate fails |\n\n**Synthesis: use Kimi's deploy gates (stricter, more dimensions covered) as the operative gate; use the score formula above as the headline number.**\n\n## Worked example\n\nHypothetical: Sharpe 1.2 \u00b7 Sortino 1.8 \u00b7 MaxDD 18% \u00b7 WR 56% on n=240 trades \u00b7 Bonf-p=0.03 \u00b7 OOS-IS ratio=0.65 \u00b7 |\u03b2|=0.15 \u00b7 cost=20% \u00b7 bias=PASS.\n\n| Dim | Raw | Sub-score |\n|---|---|---|\n| sharpe (1.2/1.5) | \u2014 | 0.80 |\n| sortino (1.8/2.0) | \u2014 | 0.90 |\n| maxdd (1 - 18/30) | \u2014 | 0.40 |\n| n (240/500) | \u2014 | 0.48 |\n| sig (Bonf-p<0.05) | \u2014 | 1.00 |\n| oos (0.65) | \u2014 | 0.65 |\n| cost (1 - 0.20) | \u2014 | 0.80 |\n| bias (PASS) | \u2014 | 1.00 |\n\n```\nscore = 100 \u00d7 (0.20\u00b70.80 + 0.20\u00b70.90 + 0.20\u00b70.40 + 0.10\u00b70.48 + 0.10\u00b71.00 + 0.10\u00b70.65 + 0.05\u00b70.80 + 0.05\u00b71.00)\n      = 100 \u00d7 (0.16 + 0.18 + 0.08 + 0.048 + 0.10 + 0.065 + 0.04 + 0.05)\n      = 100 \u00d7 0.723\n      = 72.3\n```\n\n\u2192 **RESEARCH band** (paper-trade only). Both authors agree this hypothetical algorithm is *not* deploy-grade because MaxDD 18% pulls the score below 80 even though Sharpe + Sortino are strong.\n\nNote that this matches **Kimi's worked example verdict of DEPLOY** when Kimi assumed *additional* unstated gates pass (OOS-R\u00b2=0.65, etc.). DeepSeek's formula in isolation also lands the example in RESEARCH at ~72-75. So with the consensus-merged weights, RESEARCH is the correct verdict.\n\n## TODO (v2 update)\n\nWhen MiniMax-m2.7 + CF qwen3-30b + CF qwq-32b + CF top-6 land:\n- Re-extract their formulas + threshold tables\n- Look for: any dimension the panel adds that the current 8 don't have (likely candidates: turnover, factor exposure, regime sensitivity, decay slope)\n- Look for: weight disagreement > \u00b110% on any dimension\n- Look for: deploy-band cutoff disagreement > \u00b15 points\n- Write `2026-05-25_multi_model_scoring_synthesis_v2.md` superseding this one\n\n## Next actions (independent of v2)\n\n1. Wire the v1 formula into the live `/audit` promotion gate as a sidecar advisory score (NOT a blocker yet \u2014 needs the remaining 9 models' input first).\n2. Add `quality_score` field to `audit_dashboard/data/nav_surface_edge_matrix.json` (built by agent E commit `ee182355a`) so the nav-surface matrix reports the consensus score per surface.\n3. Track as new ENHANCEMENT_OVERALL row with proposed-by=multi-model-consensus."
      },
      {
        "enhancement_id": 27,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Stress-test 2020-March COVID scenario as mandatory pre-deploy gate",
        "description": "Qwen gate-10: replay 2020-03-09 through 2020-03-23 (flash crash) on candidate strategy. Fail deploy if drawdown >30%. Catches strategies that work in normal regime but blow up in correlation-to-1 events. Add stress_test_2020_march() helper, run once per candidate in CI.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "every candidate strategy carries documented 2020-Mar drawdown and passes 30% floor",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:10",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 21,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Ward hierarchical clustering for sector/correlation concentration caps",
        "description": "Qwen pitfall #4: 4 'different' US-tech holdings = 1 sector. Use scipy.cluster.hierarchy.linkage(method=ward) on correlation distance matrix, cap risk per cluster <=20%. Replaces naive sector-string caps in portfolio_construction.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "max per-cluster risk contribution <=20% on every rebalance",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 24,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Parameter sensitivity sweep +-20% as mandatory deploy gate",
        "description": "Qwen gate-9: shift each key parameter +-20% and re-run OOS. Fail deploy if any single shift causes >15% PnL degradation. Detects fragile parameter overfits. Add _run_parameter_sensitivity_analysis() to StabilityReport.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "all promoted strategies pass <=15% degradation on +-20% sweep",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 25,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Extend Bonferroni multi-test correction from top_edges to live promotion gate",
        "description": "Agent B (c9ba1589) added Bonferroni to top_edges.py. KEY FINDING: CRYPTO's 5 apparent edges DO NOT survive correction across 673-cell space; only COMMODITY produces robust edges. Currently live score_pick / passes_smart_gate uses raw thresholds. Wire wr_z + bonferroni_pass fields from top_edges output into smart-gate / verified-alpha gate; reject if bonferroni_pass=False.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "verified-alpha promotion rate drops to align with bonferroni_pass=True cells only",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 20,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Monte Carlo permutation test on OOS Sharpe before strategy admission",
        "description": "Qwen step-4: shuffle outcome labels N=100, re-run walk-forward, derive empirical permutation p-value on mean OOS Sharpe. Required gate: p<0.10 before shadow->probation promotion. Add _shuffle_and_revalidate() helper, return permutation_p_value field in WalkForwardResult.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "p<0.10 enforced on every promotion event",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:08",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 17,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Replace stationary covariance with EWMA + Ledoit-Wolf shrinkage (framework pitfall #1)",
        "description": "Current portfolio constructor likely uses sample covariance which fails on regime breaks (Mar 2020 correlations spike to ~1 and equal-risk allocation blows up). Switch to exponentially-weighted covariance with Ledoit-Wolf shrinkage; recompute on a rolling basis. Required input for the planned CVaR optimiser.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen-code+framework-review",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Portfolio constructor uses EWMA + LW shrunk covariance; backtest on Mar 2020 + 2022 vol-shock shows DD reduction vs sample cov baseline",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:54:43",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 12,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Ship tools/wf_validator.py \u2014 purged walk-forward (30d purge / 5d embargo / >=8 folds)",
        "description": "Ring's quant-workflow spec: a systematic walk-forward runner with purged k-fold + embargo to prevent leakage. Currently no such runner exists in repo; DSR sidecar is the only overfit guard. Complements the kilocode/nemotron purged-k-fold proposal but is more specific (30d purge, 5d embargo, >=8 folds).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "opencode/ring-2.6-1t + 3-engine swarm",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "tools/wf_validator.py shipped, integrated into strategy-promotion CI; >=3 strategies validated through it within 14 days",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:51:47",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_opencode_session_deep_scan.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Opencode Ring-2.6-1T Session Deep-Scan \u2014 Net-New Items\n\n**Source:** `session-ses_1a2d.md` (22,048 lines, Ring-2.6-1T via opencode, 2026-05-12 \u2192 2026-05-25)\n**Reviewer:** Claude Opus 4.7 (1M)\n**Date:** 2026-05-25\n**Swarm verdict source:** `/tmp/swarm_session_review_20260525T034736/` (deepseek + cerebras + gemini, JSON-strict)\n**Goal:** Surface action items NOT already in the 33 INCIDENTS / 19 ENHANCEMENTS captured by `tools/audit_pick_funnel/seed_incidents_enhancements.py`.\n\n---\n\n## Swarm consensus snapshot (12 candidate items, 3 engines)\n\n| # | Candidate | deepseek | cerebras | gemini | Decision |\n|---|---|---|---|---|---|\n| 1 | IPO/lockup-expiry strategy missing entirely | REAL | NOISE | NOISE | ADD (genuine gap, see #N1) |\n| 2 | Cherry-picked \"Supreme Edge\" stats on UI without caveat | REAL | REAL | REAL | ADD (#N2) |\n| 3 | smart_picks_engine 35% weight on anti-predictive confidence-derived score | REAL | REAL | REAL | ADD (#N3) |\n| 4 | ETF Faber-tactical / dual-momentum promotion candidates | NOISE | NOISE | NOISE | REJECT |\n| 5 | FOREX SL=0.5% at median ATR | DUP | DUP | DUP | REJECT (already captured) |\n| 6 | Yield-curve-momentum bond strategy | DUP | DUP | DUP | REJECT |\n| 7 | Commodity term-structure roll-yield | DUP | DUP | DUP | REJECT |\n| 8 | 206 baby_strategies orphan count | DUP | DUP | DUP | REJECT |\n| 9 | summary_picks.json uniform last-pick timestamps (simulated?) | REAL | REAL | REAL | ADD (#N4) |\n| 10 | ML crypto DSR\u22650.9995 on n=25-34 surfaced w/o caveat | REAL | REAL | REAL | ADD (#N5) |\n| 11 | Walk-forward validator tool (purge/embargo/CPCV) | NOISE | NOISE | NOISE | ADD as ENHANCEMENT (#N6 \u2014 tooling gap is real) |\n| 12 | PEAD equity shadow-mode | DUP | DUP | DUP | REJECT |\n\n**Triangulation rule:** 3/3 REAL = strong add; 2/3 REAL = add; 3/3 NOISE = reject unless I can argue otherwise. Item #1 added despite 2/3 NOISE because the project explicitly enumerates IPO as an asset class with zero coverage (Section 6 of Ring's summary, line 21622-23) \u2014 this is the same charter shape that drove the existing \"skyrocket_detector not wired\" / \"penny_deep_oversold blocked\" entries. Item #11 added as ENHANCEMENT (not INCIDENT) because tooling gaps belong in that table.\n\n---\n\n## ADD \u2014 6 net-new items (ranked by user-protection value)\n\n### N1 \u2014 INCIDENT \u2014 `OVERALL` \u2014 \"Cherry-picked Supreme Edge stats surfaced on /audit without post-hoc-mining caveat\"\n\n```python\n(\"OVERALL\", \"Cherry-picked 'Supreme Edge' segment stats surfaced on /audit without post-hoc-mining caveat\",\n \"top_edges_per_class.json is a post-hoc segment search across confidence x R:R x strategy-family buckets. The 82% WR / PF 13+ headline numbers it yields are NOT forward-actionable signals, yet they are presented on the main /audit page alongside live forward stats. Three independent reviewers (deepseek, cerebras, gemini) flagged this as a real production issue: it misleads users about real edge. Severity is elevated because the same dashboard banners say 'real money sizing' downstream.\",\n \"P0\", \"OPEN\", \"audit_dashboard/template.html (Supreme Edge banner) / audit_dashboard/data/top_edges_per_class.json\",\n \"Either (a) add a 'POST-HOC SEGMENT SEARCH - NOT A FORWARD SIGNAL' badge to every cell pulled from top_edges_per_class, or (b) require any displayed cell to also pass DSR>=0.95 with n>=100 in the SAME displayed segment. Cells failing the second test get hidden.\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", \"https://findtorontoevents.ca/audit/\", None, \"ring-2.6-1t+swarm3\"),\n```\n\n### N2 \u2014 INCIDENT \u2014 `OVERALL` \u2014 \"smart_picks_engine.py weights confidence-derived score at 35%, structurally inverting the ranker\"\n\n```python\n(\"OVERALL\", \"smart_picks_engine.py weights confidence-derived elite/quality at 35%, structurally inverting the ranker\",\n \"The existing 'ML calibration system-wide inverted' incident covers the underlying calibration bug. This is the downstream consequence: the 5-factor Smart Picks composite places 35% weight on 'elite/quality' which is derived FROM confidence. Because confidence is anti-predictive (conf>=0.9 -> WR 14.4%), the ranker is structurally flipped at 35% influence, not just a misread on a sidecar. Fixing _normalize_confidence alone will NOT recover this until the weight is re-pointed at trust_score (which code comments already nominate).\",\n \"P0\", \"OPEN\", \"alpha_engine/smart_picks_engine.py (5-factor composite weights)\",\n \"Re-point the 35% 'elite/quality' weight at trust_score for crypto (and validate per-class). Backtest the swap on 90d closed picks; if median Smart Picks WR lifts >=3pp, ship. Linked to the trust_score-backfill enhancement (must land first or weight has nothing to read).\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", None, None, \"ring-2.6-1t+swarm3\"),\n```\n\n### N3 \u2014 INCIDENT \u2014 `CRYPTO` \u2014 \"ML crypto DSR>=0.9995 strategies surfaced on /audit at n=25-34 without insufficient-sample warning\"\n\n```python\n(\"CRYPTO\", \"ML crypto DSR>=0.9995 strategies surfaced on /audit at n=25-34 without insufficient-sample warning\",\n \"Four crypto ML strategies (INJ 1d, DYDX 15m, FET 1d, RENDER 1h) display DSR>=0.9995 on the anti_overfit.html page. Sample sizes are 25-34 trades. DSR is misleadingly high in micro-samples due to low variance over short windows; the Bailey-Lopez de Prado >=0.95 'publishable confidence' bar implicitly assumes adequate n. The UI does not gate on n, so these strategies appear co-equal to cot_positioning (n=104).\",\n \"P1\", \"OPEN\", \"audit_dashboard/anti_overfit.html / tools/anti_overfit_audit_sidecar.py\",\n \"Add an 'INSUFFICIENT N' badge for rows where n<60 regardless of DSR. Document the small-sample DSR caveat in the page header. Optionally re-rank: a strategy must clear DSR>=0.95 AND n>=60 to be eligible for the 'EDGE_LIKELY_REAL' verdict.\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", \"https://findtorontoevents.ca/audit/anti_overfit.html\", None, \"ring-2.6-1t+swarm3\"),\n```\n\n### N4 \u2014 INCIDENT \u2014 `OVERALL` \u2014 \"summary_picks.json shows identical last_pick timestamps across all asset classes\"\n\n```python\n(\"OVERALL\", \"summary_picks.json shows identical last_pick timestamps across all asset classes (auto-generated/simulated suspicion)\",\n \"Ring observed every asset class in summary_picks.json showing last pick timestamp of 2026-05-24T11:00:00Z \u2014 exactly identical across CRYPTO/EQUITY/FOREX/COMMODITY/BOND/ETF/FUTURES. Real per-class scanners would produce divergent timestamps. The shape looks like a simulated/auto-filled fixture, not live per-class telemetry. This is independent from the smart_picks.json staleness incident.\",\n \"P1\", \"OPEN\", \"audit_dashboard/data/summary_picks.json / dashboard_generator builder for summary_picks\",\n \"Audit the builder. Either (a) populate last_pick_at per class from a per-class MAX(created_at) on trading_picks, or (b) remove the field if it isn't actually being computed. Add a unit test asserting timestamps vary by >=1 minute across classes on real data.\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", None, None, \"ring-2.6-1t+swarm3\"),\n```\n\n### N5 \u2014 INCIDENT \u2014 `STOCKS` \u2014 \"IPO asset class has zero strategy coverage in alpha_engine/strategies/\"\n\n```python\n(\"STOCKS\", \"IPO asset class has zero strategy coverage in alpha_engine/strategies/\",\n \"Ring's per-class inventory found zero IPO-specific strategies (post-IPO lockup-expiry, insider-selling reversal, revenue-trajectory). The existing PEAD framework could be adapted with minor changes. This is a charter gap analogous to the documented penny-stock gap. Swarm split 1-REAL / 2-NOISE; flagged as INCIDENT not ENHANCEMENT because /audit advertises IPOs as a tracked asset class (tab exists in the UI) but no scanner ever fires.\",\n \"P2\", \"OPEN\", \"alpha_engine/strategies/ (no ipo_*.py file) / production_scanner.py (no _run_ipo_scanner)\",\n \"Build alpha_engine/strategies/ipo_lockup_expiry.py forking pead_equity.py. Trigger universe: IPOs 150-200 days post-listing (lockup-expiry window). Signal: insider-selling acceleration + revenue-growth deceleration -> SHORT bias. Wire into production_scanner under a STOCKS asset_class branch.\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", None, None, \"ring-2.6-1t\"),\n```\n\n### N6 \u2014 ENHANCEMENT \u2014 `OVERALL` \u2014 \"Ship tools/wf_validator.py (purged walk-forward with embargo + CPCV)\"\n\n```python\n(\"OVERALL\", \"Ship tools/wf_validator.py (purged walk-forward with embargo + CPCV)\",\n \"Ring's quant-workflow review (session lines 21985-22041) specified a concrete WF framework: 500d train / 126d test / purge=30d / embargo=5d / >=8 folds / FDR-corrected p-values / block-bootstrap stress. The repo has anti_overfit_audit_sidecar.py (DSR) but no systematic WF runner. Without WF, the COT 7-step plan and PEAD promotion paths require ad-hoc validation. Shipping this tool unblocks the entire 10-step readiness gate (CLAUDE.md #3-#4).\",\n \"TOOLING\", \"HIGH\", \"L\", \"BACKLOG\", \"ring-2.6-1t\", None,\n \"tools/wf_validator.py runs end-to-end on cot_positioning + pead_equity within 90s, produces per-fold Sharpe/MDD/WR + bootstrap CI, and is invoked from audit-dashboard.yml hourly cron.\",\n \"reports/2026-05-25_opencode_session_deep_scan.md\", None, None),\n```\n\n---\n\n## REJECTED candidates (with one-line rationale)\n\n| Item | Why rejected |\n|---|---|\n| FOREX SL=0.5% at median ATR | Already captured: \"FOREX: SL at 0.5% sits at median FX ATR\" incident. |\n| Yield-curve-momentum bond strategy | Already captured: \"yield-curve-momentum (TLT/IEF) + wire bond_scanner.py\" enhancement. |\n| Commodity term-structure roll-yield | Already captured: \"commodity term-structure roll-yield\" enhancement. |\n| 206 baby_strategies orphan-count | Adds only file-count evidence to existing \"batch-DSR baby_strategies\" enhancement; not a new row. |\n| PEAD equity shadow mode | Already captured. |\n| ETF Faber-tactical / dual_momentum promotion notes | Probation-monitoring detail, not actionable until n>=50; covered by existing \"5 ETF strategies on probation\" incident. |\n| US Equity screener zero picks | Already captured. |\n| Top-N Rank Backtes"
      },
      {
        "enhancement_id": 14,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add 10-gate deployment checklist as CI gate on shadow->probation promotion",
        "description": "Per Qwen framework: OOS Sharpe>=0.5, max DD<20%, WR binomial p<0.05, Sharpe CoV<0.5, edge-decay slope>-0.05, permutation p<0.10, net-Sharpe-after-costs>0.30, zero leakage flags, parameter sweep stability <15% PnL loss, stress-test (Mar 2020) DD<=30%. Failures block promotion or force reduced sizing.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen-code",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CI workflow exists that runs all 10 gates on a candidate strategy + writes pass/fail JSON; no strategy promotes without all 10 green",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:51:47",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 11,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add momentum + macro composite signal template to alpha_engine (kilocode pseudo-code)",
        "description": "Kilocode shipped a reference pseudo-code: 50%/50% blend of (a) rolling-z 20d log-return momentum, (b) rolling-z macro-surprise series (CPI/PMI/yield-curve from FRED). Outputs a rank-able composite score. Closes the long-standing 'FRED data wired but not used in pick gen' gap from HEDGE_FUND_GAP_ANALYSIS_2026-05-24.md.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "kilocode/nemotron-3-super",
        "related_persona_id": "voss_global_macro",
        "proposed_features": null,
        "success_metric": "New alpha_engine/new_strategies/momentum_macro_composite.py wired into production_scanner; emits >=20 picks/30d with WR>=50%",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:47:16",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "session-ses_1a2f.md",
        "link_url": "https://github.com/eltonaguiar/findtorontoevents_antigravity.ca/blob/main/HEDGE_FUND_GAP_ANALYSIS_2026-05-24.md",
        "link_github_ref": null,
        "enhancement_plan": "# Hedge Fund Persona Investment Analysis\n\n**Session ID:** ses_1a2fc349fffeM2WL8LafLjajpC\n**Created:** 5/25/2026, 2:43:10 AM\n**Updated:** 5/25/2026, 3:45:46 AM\n\n---\n\n## User\n\nGive me a list of personas that could similar to ones a hedge fund would use, then act as each persona, and come up with the top picks per asset class for ETFs/ stocks for picks based on the latest market data and come up with a list of picks including TP/PL, entry reason\n\n---\n\n## Assistant (Code \u00b7 NVIDIA: Nemotron 3 Super (free) \u00b7 23.0s)\n\n_Thinking:_\n\nI need to create a list of hedge fund-style personas and then act as each persona to come up with top picks for ETFs/stocks with TP/SL and entry reasons based on latest market data.\n\nFirst, let me think about hedge fund personas. Common ones might include:\n1. Macro Trader - focuses on big economic trends, interest rates, currencies\n2. Quantitative Analyst - uses mathematical models and algorithms\n3. Value Investor - looks for undervalued stocks with strong fundamentals\n4. Growth Investor - seeks companies with high growth potential\n5. Event-Driven Specialist - trades on corporate events like mergers, earnings\n6. Arbitrageur - exploits price inefficiencies\n7. Sector Specialist - focuses on specific industries (tech, healthcare, etc.)\n8. Short Seller - looks for overvalued stocks to short\n9. Macro Hedge Fund Manager - global macro perspective\n10. Risk Parity Strategist - balances risk across asset classes\n\nNow I need to get latest market data to make informed picks. Since I don't have real-time data access, I'll need to use websearch or other tools to get recent information. Let me start by searching for current market trends and top performing ETFs/stocks.\n\nLet me first check what time it is - the environment shows 2026-05-25T02:43:10+00:00, so it's May 25, 2026.\n\nI should search for recent market data to inform my picks. Let me use websearch to get current information.\n\n\n**Tool: websearch**\n\n**Input:**\n```json\n{\n  \"query\": \"May 2026 stock market top performing ETFs stocks trends\"\n}\n```\n\n**Output:**\n```\nTitle: Best Performing Stocks in May 2026 - Monthly Gainers\nURL: https://www.stocktitan.net/rankings/stock-gains-monthly/2026/5?page=19\nPublished: 2026-05-24T03:55:00.000Z\nAuthor: Stock Titan\nHighlights:\n# Best Performing Stocks in May 2026 - Monthly Gainers\n[...]\nBest Performing Stocks in May 2026 - Monthly Gainers\n[...]\nMARKET LEADERS\n[...]\n52-WEEK LEADER WOLF +4720% Wolfspeed, Inc.\n[...]\n2026 YTD LEADER NINE +2951% Nine Energy Service, I..\n[...]\nMAY 2026 LEADER PIII +351% P3 Health Partners Inc.\n[...]\n20\n[...]\n# Top Stock Gainers May 2026 - Monthly Performance Ranked\n[...]\nTrack the top performing stocks of May 2026 ranked by monthly price gain. See which stock gainers delivered the highest gains this month, with market caps over $100 million on Nasdaq and NYSE.\n[...]\nThis ranking shows the top performing stocks and biggest stock gainers during May 2026, calculated from the first to the last trading day of the month. It shows which stocks are going up this month, with split-adjusted data used for consistent performance calculations.\n[...]\nMonthly performance rankings can reveal price strength, sustained momentum, sector rotation, and event-driven moves that are not visible in one-day movers lists. The table is informational only and does not recommend any stock to buy, sell, or hold.\n[...]\nData as of May 24, 2026 at 12:54 AM EDT\n[...]\n1801\n[...]\nD. Boral Acquisition I Corp.\n[...]\n1802\n[...]\nWheaton Precious Metals Corp.\n[...]\n1803\n[...]\n1804\n[...]\nWestern Asset Mortgage Oppo\n[...]\n1805\n[...]\n1806\n[...]\n1807\n[...]\n1808\n[...]\n1809\n[...]\nThe Taiwan Fund, Inc.\n[...]\n1810\n[...]\n1811\n[...]\nSimmons First National Corp...\n[...]\n1812\n[...]\n1813\n[...]\n1814\n[...]\n1815\n[...]\n1816\n[...]\n1817\n[...]\n1818\n[...]\n1819\n[...]\n1820\n[...]\nFG Imperii Acquisition Corp.\n[...]\n1821\n[...]\nK2 Capital Acquisition Corp\n[...]\n1822\n[...]\naton Vance Tax\n[...]\n1823\n[...]\n1824\n[...]\n1825\n[...]\n1826\n[...]\nakos Energy Navigation\n[...]\n1827\n[...]\n1828\n[...]\n1829\n[...]\n1830\n[...]\n1831\n[...]\n1832\n[...]\n1833\n[...]\n1834\n[...]\n1835\n[...]\n1836\n[...]\nArtius II Acquisition\n[...]\n1837\n[...]\n1838\n[...]\n1839\n[...]\nBooz Allen Hamilton Holding...\n[...]\n1840\n[...]\nLaunch Two Acquisition Corp\n[...]\n1841\n[...]\nWashington Trust Bancorp, Inc.\n[...]\n1842\n[...]\n1843\n[...]\n1844\n[...]\n1845\n[...]\n1846\n[...]\n1847\n[...]\n1848\n[...]\n1849\n[...]\n1850\n[...]\nEaton Vance Enhanced Equity...\n[...]\n1851\n[...]\n1852\n[...]\n1853\n[...]\n1854\n[...]\n1855\n[...]\n1856\n[...]\nMelar Acquisition Corp. I\n[...]\n1857\n[...]\nWillis Towers Watson Public...\n[...]\n1858\n[...]\nJanus Henderson Group plc\n[...]\n1859\n[...]\nLegato Merger Corp. IV\n[...]\n1860\n[...]\n1861\n[...]\nM Evo Global Acquisition Co...\n[...]\n1862\n[...]\n1863\n[...]\n1864\n[...]\nHCM IV Acquisition Corp.\n[...]\n1865\n[...]\nHall Chadwick Acquisition\n[...]\n1866\n[...]\n1867\n[...]\n1868\n[...]\nMonolithic Power Systems, Inc.\n[...]\n1869\n[...]\n1870\n[...]\n1871\n[...]\n1872\n[...]\n1873\n[...]\n1874\n[...]\nprott Focus Trust,\n[...]\n1875\n[...]\n1876\n[...]\nain Capital GSS\n[...]\n1877\n[...]\nPioneer Acquisition I Corp\n[...]\n1878\n[...]\n1879\n[...]\n1880\n[...]\n1881\n[...]\n1882\n[...]\n1883\n[...]\n1884\n[...]\n1885\n[...]\n1886\n[...]\n1887\n[...]\n1888\n[...]\n1889\n[...]\n1890\n[...]\n1891\n[...]\n1892\n[...]\n1893\n[...]\n1894\n[...]\n1895\n[...]\n1896\n[...]\n1897\n[...]\n1898\n[...]\n1899\n[...]\n1900\n\n---\n\nTitle: The Weekly ETF Market Monitor (May 11-15, 2026) | ETF Central\nURL: https://www.etfcentral.com/news/the-weekly-etf-market-monitor-may-11-15-2026\nPublished: 2026-05-18T11:00:00.000Z\nAuthor: Rony Abboud\nHighlights:\nA comprehensive snapshot of U.S. ETF market activity in Week 20 (May 11-15, 2026), spanning flows, performance, sector and thematic trends, geographic exposures, asset classes, and leading funds and issuers.\n[...]\nAccording to Trackinsight data, Equity ETFs recorded the largest weekly inflows with $43.86 billion, while Fixed Income ETFs gathered $14.90 billion.\n[...]\nCommodity ETFs added $1.22 billion, and Multi-Asset ETFs recorded inflows of $382.51 million. Volatility ETFs gathered $55.81 million over the week.\n[...]\n## Sector ETFs Flows & Performance\n[...]\nIn performance terms, Energy delivered the strongest sector gain with an advance of\n[...]\nStaples rose 0.\n[...]\nand North America Energy Infrastructure rose\n[...]\n## Top ETF Issuers by Net Flows\n[...]\n1. Vanguard: $11.95 billion\n2. iShares: $10.90 billion\n3. Invesco: $10.10 billion\n4. Ark Investment Management: $7.20 billion\n5. Roundhill Investments: $3.65 billion\n6. Schwab ETFs: $1.94 billion\n7. Capital Group: $1.56 billion\n8. State Street Investment Management: $1.39 billion\n9. J.P. Morgan Asset Management: $1.16 billion\n[...]\n10. American Century Investments: $1.13 billion\n[...]\n## Top Performing ETFs of the Week\n[...]\n1. Simplify Multi-QIS Alternative ETF (QIS): 12.22%\n2. United States Oil Fund (USO): 10.11%\n3. USCF Oil Plus Bitcoin Strategy Fund (WTIB): 8.68%\n4. 21Shares Canton Network ETF (TCAN): 8.58%\n5. iPath Bloomberg Energy Subindex Total Return ETN (JJETF): 8.57%\n6. Roundhill Space & Technology ETF (MARS): 8.13%\n7. United States Brent Oil ETF (BNO): 7.92%\n8. Invesco DB Oil Fund ETF (DBO): 7.76%\n9. Tema Space Innovators ETF (NASA): 7.72%\n10. Canary Staked SUI ETF (SUIS): 7.58%\n[...]\n## Most Popular ETFs by Net Flows\n[...]\n1. Invesco QQQ ETF (QQQ): $8.27 billion\n2. ARK Innovation ETF (ARKK): $5.75 billion\n3. Vanguard S&P 500 ETF (VOO): $3.78 billion\n4. Roundhill Memory ETF (DRAM): $3.61 billion\n5. State Street SPDR S&P 500 ETF Trust (SPY): $3.54 billion\n6. iShares Core S&P 500 ETF (IVV): $2.65 billion\n7. Schwab U.S. Large-Cap Growth ETF (SCHG): $2.50 billion\n8. iShares 0-3 Month Treasury Bond ETF (SGOV): $1.62 billion\n9. Invesco NASDAQ 100 ETF (QQQM): $1.46 billion\n10. Vanguard Intermediate-Term Corporate Bond ETF (VCIT): $1.16 billion\n\n---\n\nTitle: Weekly StatSheet For The ETF Tracker Newsletter - Updated Through 05/21/2026 - Ulli... The ETF Bully\nURL: https://theetfbully.com/2026/05/weekly-statsheet-for-the-etf-tracker-newsletter-updated-through-05-21-2026/\nPublished: 2026-05-22T01:30:00.000Z\nAuthor: Ulli\nHighlights:\nWeekly StatSheet For The ETF Tracker Newsletter - Updated Through 05/21/2026 - Ulli... The ETF Bully\n[...]\nETF Data updated through Thursday, May 21, 2026\n[...]\n1. Trend Tracking Indexes (TTIs)\n[...]\nThese are the main indicators that tell you when to buy or sell Domestic and International ETFs (section 1 and 2). They do that by comparing their position to their long-term M/A (Moving Average). If they cross above, and stay there, it\u2019s a green light to buy. If they fall below, and keep going, it\u2019s a red light to sell. And to make sure you don\u2019t lose your shirt if things go south, I also use a 12% trailing stop loss on all positions in these categories.\n[...]\n1. DOMESTIC EQUITY ETFs: BUY\u2014 effective 5/20/2025\n[...]\nThis is our main compass, the Domestic Trend Tracking Index (TTI-green line in the above chart). It has broken above its long-term trend line (red) by +5.98% and remains in \u201cBuy\u201d mode, with our holdings being subject to our trailing sell stops.\n[...]\nThe link below shows all High Volume (HV) Domestic Equity ETFs. They are ranked by M-Index, which is my secret sauce for measuring momentum. Prices in all linked tables below are updated through 05/21/2026, unless otherwise noted. Price data not yet available at publication is indicated with 00.00% or -100.00%. Please note that distributions are not included in the current momentum numbers.\n[...]\nIf the TTI is above the trend line, you can use the tables in the link below to pick your winners:\n[...]\n1. INTERNATIONAL ETFs: BUY \u2014 since 05/07/2025\n[...]\nThis is our global guide, the International Trend Tracking Index (green). It has broken above its long-term trend line (red) by +9.84% and has been in \u201cBuy\u201d mode since 5/7/2025.\n[...]\nThe list in the link below shows the High Volume (HV) International ETFs I track for you during a Buy cycle. They are also ranked by M-Index:\n[...]\nThis is the mother of all lists, showing all ETFs I track and how"
      },
      {
        "enhancement_id": 9,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Batch-DSR backtest the 206 baby_strategies/ files (zero currently wired)",
        "description": "Opencode found 206 files in alpha_engine/baby_strategies/, ZERO wired to production. Massive untapped pipeline. Surface a batch DSR runner (anti_overfit_audit_sidecar.py over baby_strategies/*) to find DSR-real candidates and promote them per the Wire-Up Rule.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "opencode/ring-2.6-1t",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "DSR audit completes on 206 strategies; >=3 candidates with DSR>=0.95 promoted to probation with documented production caller",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:45:06",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "session-ses_1a2d.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit picks methodology and UI edge validation\n\n**Session ID:** ses_1a2d77a8dffe4tBYbdlLp6CGV2\n**Created:** 5/25/2026, 3:23:17 AM\n**Updated:** 5/25/2026, 3:44:25 AM\n\n---\n\n## User\n\nreview our methodology of picks per asset class under findtorontoevents.ca/audit on the user interface, look at stuff 'like \"smart picks\" (button vs tab), the active picks by various scores/tags such as \"strong\" etc.. and also check smart picks tab, US Equity picks tab.. and all other tabs.. and see if we have any \"edge\" in the user interface and if so where. and double-check if its legit.  double-check how realstitic the picks are.. for example if you put real money into the \"smart picks\"at their time of entry till now would we have been profitable ? also double-check the \"smart picks\" tab I am seeing signal time EST 1.4 h ago.. is that actually truE?  or is it stale datA? \n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 12.5s)\n\n_Thinking:_\n\nThe user is asking me to review the methodology of picks per asset class under findtorontoevents.ca/audit on the user interface. They want me to look at:\n\n1. \"Smart picks\" (button vs tab)\n2. Active picks by various scores/tags such as \"strong\"\n3. Smart picks tab, US Equity picks tab, and all other tabs\n4. Whether there's any \"edge\" in the user interface and if so where\n5. Whether the picks are realistic - would putting real money into \"smart picks\" at their time of entry till now be profitable?\n6. Whether the \"smart picks\" tab showing \"signal time EST 1.4 h ago\" is actually true or stale data\n\nLet me first check what's in the workspace related to this, and also try to fetch the website to understand the UI.\n\nLet me start by exploring the project structure and understanding what's available.\n\nI'll systematically review the audit UI, smart picks methodology, and data freshness. Let me start by exploring the project structure and fetching the live site.\n\n**Tool: task**\n\n**Input:**\n```json\n{\n  \"description\": \"Explore audit UI structure\",\n  \"prompt\": \"Explore the findtorontoevents.ca website, specifically the /audit section and related pages. I need to understand:\\n\\n1. Fetch https://findtorontoevents.ca/audit - look at the full page structure, tabs, buttons, data tables\\n2. Look for \\\"Smart Picks\\\" tab/button, \\\"US Equity\\\" tab, and any other asset class tabs\\n3. Look for any \\\"edge\\\" indicators, score tags like \\\"strong\\\", active pick counts\\n4. Check for signal timestamps, data freshness indicators\\n5. Look at the methodology section if any\\n\\nAlso explore:\\n- The project structure in /home/eaguiar2015/findtorontoevents_antigravity.ca - look at audit_dashboard/, alpha_engine/, and any related files\\n- Check audit_dashboard/template.html for the UI template\\n- Check any JSON data files that feed the dashboard\\n\\nReturn all findings in detail including file paths, line numbers, and relevant code snippets.\",\n  \"subagent_type\": \"explore\",\n  \"task_id\": \"audit-ui-review-1\"\n}\n```\n\n**Error:**\n```\nExpected a string starting with \"ses\", got \"audit-ui-review-1\"\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 6.3s)\n\n_Thinking:_\n\nLet me fix the task call and explore the project structure directly.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: invalid**\n\n**Input:**\n```json\n{\n  \"tool\": \"explore\",\n  \"error\": \"Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\"\n}\n```\n\n**Output:**\n```\nThe arguments provided to the tool are invalid: Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 3.9s)\n\n_Thinking:_\n\nI need to explore the project structure and the live website myself. Let me start by:\n1. Fetching the live audit page from findtorontoevents.ca\n2. Exploring the project directory structure\n3. Looking at the audit dashboard template and data files\n\nLet me do these in parallel.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: webfetch**\n\n**Input:**\n```json\n{\n  \"url\": \"https://findtorontoevents.ca/audit\",\n  \"format\": \"markdown\",\n  \"timeout\": 30\n}\n```\n\n**Output:**\n```\n  Unified Audit Dashboard - Antigravity  \n\n# Unified Audit Dashboard v99.0\n\nBirds-eye view of ALL picks, portfolios, and system performance - loading...\n\n[\u2728 Jump to Active Picks](#) [\ud83d\udcd6 Research](research_index.html \"Per-asset-class research runs (sourced + backtested + multi-AI consensus picks)\") [\ud83d\udcca Edge Stability](edge_stability.html \"Per-asset-class edge stability across 7d/30d/90d/all-time windows\") [\ud83c\udfc6 AI Leaderboard](ai_leaderboard.html \"Per-AI pick attribution: which AI engine picks best, per asset class and horizon\") [\ud83d\udc1d Swarm Paper Picks](#swarm-pick-tracking-section \"Swarm-generated paper-trade picks across theswarm / Leap / V4 / zerounderscore with per-tier and per-model leaderboard\")\n\n\u26a0 TRUTH LAYER Dashboard vs DB-reality gap \u00b7 Per-class tiles below show **post-resolver-v2 filtered** performance. RAW at\\_raw\\_picks across 55,510 closed picks (Kimi audit + 2026-05-12 user audit): **11.13% WR / \u22123.56% avg / Sharpe \u22122.34 / PF 0.46**.\n\n**No asset class** currently passes industry-standard real-money thresholds (DSR>0.95, PBO<0.05, WFE>60%, live-Sharpe>0.5, n\u2265100). The one DSR=1.0 candidate (`cot_positioning + CT=F`) is in 4-week paper-pilot SHADOW per [paper\\_pilot.html](/audit/paper_pilot.html); see also [real\\_money.html](/audit/real_money.html) for the 10-step Lopez de Prado readiness gate. **NFA** \u2014 no real-money sizing without explicit greenlight + all gates clear.\n\n**\u26a0 COMMODITY filter-survival gap (2026-05-17):** dashboard shows WR=85.5% (n=228) vs raw WR=60.2% (n=354). The \u2212126 difference is picks excluded by `_is_valid_resolved_pick()` (missing / corrupt pnl\\_pct \u2014 concentrated in losing cta\\_replicator and combined\\_confidence trades). The 85.5% reflects only picks with validated pnl data, not the full cohort. Raw 60.2% is the conservative estimate. FOREX: WR=57.8% but PF=0.85 \u2014 wins avg 0.62% vs losses avg 1.00% (tight-TP / wide-SL asymmetry); total PnL=\u221215.84% confirms it is net-negative despite majority wins.\n\n\ud83d\udccf ML CALIBRATION INVERTED High confidence != high win rate. CRYPTO conf\u22650.90 \u2192 **14.4% WR**; conf 0.50-0.60 \u2192 **60.3% WR**. \u00b7 EQUITY 0.85-0.90 \u2192 **20% WR (worst band)**; >0.90 recovers. \u00b7 FOREX peak **0.75-0.80**; 0.70-0.75 = danger.\n\nScore-booster now applies per-class penalty/reward at `alpha_engine/score_booster._calibrate_confidence()` (CRYPTO >0.85 = \u221212, <0.6 = +3; EQUITY 0.85-0.90 = \u221215; FOREX \u22650.85 = \u221210). Until upstream generators recalibrate, do not size off raw confidence \u2014 weight off post-booster `score`.\n\n\ud83c\udfaf MAJOR GOAL Phenomenal performance across **ALL** asset classes \u2014 sustainable, hedge-fund-grade.\n\nSports betting tracked at [/live-monitor/sports-betting.html](/live-monitor/sports-betting.html) (separate KPIs).\n\n**EQUITY** \u2014 T2 candidate (PF 1.55, WR 51.4%, n=426). Scale.\u24d8 **CRYPTO** \u2014 PF 1.30, WR 46.3%, n=8115. Sub-T2; `quan_engine`/`luxalgo_filters` drag; 12 crypto\\_soc baby\\_strats quarantined (4-6\u03c3 WR decay). **ETF** \u2014 PF 1.33, WR 57.4%, n=108. Charter floor met (n\u2265100); lift PF to 1.5 for T2. **COMMODITY** \u2014 **PF 2.48**, WR 61.2%, n=345 (post-resolver-v2). \u24d8 Headline inflated by CT=F COT dedup artifact \u2014 COT-dedup guard now active; awaiting 100 clean picks. **FOREX** \u2014 PF 0.86, WR 55.0%, n=309 (post-resolver-v2). Sub-floor (PF<1.0). Mutation protocol active; LONG-direction blocks pending 2026-05-22 re-eval. **BOND** \u2014 PF 0.66, WR 54.5%, n=11. Sub-floor (PF<1.0); n<100 charter floor. Scanner active; accumulating picks. Static data updated 2026-05-21 \u2014 source: asset\\_class\\_health (resolved\\_n, post-resolver-v2). JS banner auto-updates on page load.\n\n**Tier definitions:** T1 PF>2/WR>55/MDD<10 (Renaissance). T2 PF>1.5/WR>50/MDD<20 (Institutional). T3 PF>1.2/WR>48/MDD<30 (Retail-OK). Source: `asset_class_health` in `audit_dashboard/data/dashboard_data.json` (post-resolver-v2 noise filter, generated 2026-05-05T01:37Z). Resolver v2 shipped 2026-04-28; v2.1 bug bundle 2026-05-02. Historical re-resolve (`re_resolve_historical_v2.py`) pending \u2014 pre-fix labels still in closed\\_picks for picks closed before 2026-04-28.\n\n**\u26a0\ufe0f Two PF/WR figures may appear per class on this page.** The card above pulls `asset_class_health` (full-history closed-trade aggregate, post-resolver-v2 noise filter). The lower-down `hf_stats.by_asset_class` panel uses a recent-subset window (typically last 60-90d closed picks). Recent figures often diverge from headline \u2014 CRYPTO recent PF 0.89 vs headline 1.25 (n=1650 vs n=8067), COMMODITY recent 1.09 vs 1.78. **For deploy/sizing decisions, weigh the recent panel.** For long-horizon strategy validation, weigh the headline. Source: `dashboard_data.json::hf_stats.by_asset_class`.\n\n\ud83d\udcca Per-asset-class walk-forward (OOS) Out-of-sample metrics from `walk_forward_by_class()` \u2014 Sharpe colored: green > 0.5, yellow 0\u20130.5, red < 0.\n\nLoading\u2026\n\n\ud83c\udfc6 TIER-2 PROVEN Buried high-edge strategies promoted from the alphabetical systems grid. Tier badges per [CHARTER \u00a72](/docs/PERFORMANCE_CHARTER.md).\n\n\ud83d\udcca TA BASELINE TradingView 6-strategy benchmark (ema\\_cross/macd/rsi/bollinger/donchian/supertrend) vs buy-hold. Promotion gate: walk-forward robustness \u22650.60 AND trades \u22655.\n\nSource: `tradingview-mcp/src/tradingview_mcp/core/services/backtest_service.py`. Generator: `tools/run_tv_backtest_benchmark.py`.\n\n### Strategy detail\n\n\u00d7\n\n### Crypto + Non-Crypto Performance ? Guide\n\n### How to Find the Best Picks \u2014 Definitions & Edge\n\n\u00d7\n\n#### \ud83d\udcd6 Definitions (No Fancy Words Without Meaning)\n\n**PROVEN** \u2014 A pick qualifies as PROVEN when its *strategy* has: (1) \u22655 closed trades, (2) \u226555% win rate after Bayesian shrink, (3) Profit Factor \u22651.5, and (4) confidence \u22650.7. Manually vetted systems (e.g., alpha\\_engine, battleground+) can also earn PROVEN status.  \n**Smart Picks** \u2014 An AI-curated basket. Every active pick is scored on 6 dimensions: *R"
      },
      {
        "enhancement_id": 1,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Backfill trust_score on historical closed picks",
        "description": "Backfill from strategy registry so HC overlay claims become reproducible. Unblocks all 'closed-book edge' callouts on the page.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "HC-gated closed picks recompute to claimed CRYPTO 60.3%/EQUITY 68.1% (within 5pp tolerance)",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# findtorontoevents.ca/audit \u2014 UI / Edge / Freshness Audit\n**Date:** 2026-05-25 03:30 UTC  \u00b7  **Author:** Claude Opus 4.7  \u00b7  **Source:** live DB + live `dashboard_data.json` HEAD fetch + template.html / hc_filter.js source review\n\n## TL;DR\n\n| Surface | Verdict | Severity |\n|---|---|---|\n| **HIGH CONVICTION overlay** (CRYPTO 60.3% / EQUITY 68.1% cited) | **Unreproducible** \u2014 the cited closed-book stats can't be recomputed from the live `trading_picks` table because `trust_score` is NULL on 38,884 of 38,889 closed picks (99.99%) | P0 |\n| **Smart Picks \"Signal Time EST 1.4h ago\"** | **Misleading display** \u2014 every row shows the same age because it's the dashboard-JSON age, not the per-pick signal age. `signal_time` field is absent from `smart_picks_feed`; UI falls back to `age_hours` (= file-build age) | P1 |\n| **Swarm Picks section** | **Effectively abandoned** \u2014 data file last regenerated 2026-05-24 04:34 UTC, newest pick inside is dated **2026-05-12** (13 days old). Workflow `swarm-pick-review.yml` runs daily but no longer produces new picks | P1 |\n| **US Equity Picks (UEPS) tab** | **No live edge** \u2014 page itself says \"Building track record \u2014 n=0/100\"; sample picks shown are demo / sample | P2 |\n| **Smart Picks button vs Smart Picks tab** | Two different things; the button is a filter on Active Picks, the tab is a curated feed. Not a bug, but easily confused | P3 |\n\n---\n\n## 1. HIGH CONVICTION overlay (the \"\ud83d\udd25 HIGH CONVICTION FILTERS APPLIED\" panel)\n\nLive DB query just now (`mysql.50webs.com / ejaguiar1_stocks`, table `trading_picks`):\n\n```\nScore / trust population on CLOSED picks (n=38,889 total):\n  closed_with_elite_score    27,859    (71.6%)\n  closed_with_trust_score         5    (0.013%)\n  closed_score_ge_55          4,216\n  closed_trust_ge_4               0    \u2190 the HC gate requires this\n```\n\nActive picks:\n```\nCategory       n_active   pass HC (s>=55,t>=4)\ncrypto         4,897      1     \u2190 yes, ONE pick\nforex          1,387      0\ncommodity      1,302      0\n(null)           951      0\nequity           534      0\n```\n\n\u2192 The HC overlay as currently configured is effectively a kill switch \u2014 only one active pick passes today.\n\n**The cited closed-book stats:**\n- `CRYPTO: WR 60.3% on N=562 (+9.7pp lift)` \u2014 **unreproducible**. The 562 closed-with-trust-and-score-gates doesn't exist; there are 5 closed picks total with a non-NULL trust_score.\n- `EQUITY: WR 68.1% on N=72 (+29.0pp lift)` \u2014 same problem.\n- `FOREX: WR 55.0% n=309` \u2014 current DB shows 1,666 closed FOREX picks at WR 43.9% (the bigger n makes the older \"55%\" look like a small-window cherry-pick). 5 rows have `pnl_pct < -100%` including one at **\u2212106,700%** \u2014 unit-clamp commit #876 missed them. Drags FOREX avg to \u22128% and makes PF round to 0.00.\n- `COMMODITY: WR 5% / PF 0.12 (n=20 post-dedup)` \u2014 current full-baseline is 674 closed picks at WR 40.5% / PF 0.97. The \"n=20 post-dedup\" was a specific filtered slice; that exact slice now returns 0 matches.\n\n**Fix paths (pick one):**\n1. Backfill `trust_score` on the 38,884 closed picks that don't have it (preferred \u2014 would let the HC overlay actually work on historical data).\n2. Move HC gate from `pick.trust_score` to a field that IS populated (e.g., `elite_score` or strategy-level derived TRUST tier from a JOIN).\n3. Mark the HC overlay UNVERIFIABLE on the UI until #1 lands, and remove the cited WR claims until they can be recomputed live.\n\n## 2. Smart Picks \"Signal Time EST\" freshness\n\n**Live HTTP HEAD** on `https://findtorontoevents.ca/audit/data/dashboard_data.json`:\n- `Last-Modified: Mon, 25 May 2026 02:03:55 GMT` (just under 1.5h before my check)\n- `generated_at: 2026-05-25T01:55:35.704580+00:00`\n- Size: 22.8 MB\n\n**Field presence** (counted in first 2 MB of the live JSON):\n- `\"signal_time\"` occurrences: **0**\n- `\"age_hours\"` occurrences: **362**\n- `\"created_at\"` occurrences: 0\n\n**Template logic** [audit_dashboard/template.html#L12583-L12589](audit_dashboard/template.html):\n```javascript\nif (p.signal_time || p.timestamp || p.generated_at) {\n  signalTime = ...formatted...\n} else {\n  signalTime = (p.age_hours || 0).toFixed(1) + 'h ago';   \u2190 FALLBACK\n}\n```\n\n\u2192 **Because `signal_time` is missing on every Smart Picks pick, every row falls through to `age_hours` \u2014 which is computed at file-build time.** So `\"1.4h ago\"` means the *file* is 1.4h old, NOT that the *pick* fired 1.4h ago. A pick that's been open for 5 days will still display \"1.4h ago\" because the dashboard JSON was rebuilt 1.4h ago.\n\n**Fix:** populate `signal_time` (= `created_at` from `trading_picks`) into the `smart_picks_feed` payload in `audit_trail/dashboard_generator.py`. One-line addition where the smart_picks_feed is built.\n\n## 3. Swarm Picks section\n\n**Data source:** `audit_dashboard/data/swarm_picks.json` (60 KB, 38 picks)\n**Last file modification:** 2026-05-24 04:34 UTC (~23 hours ago)\n**Newest pick inside file:** `created_at = 2026-05-12T16:02:00\u221205:00` (**13 days old**)\n**Oldest pick:** 2026-05-11T22:00:00\u221205:00\n\n**Workflow:** `.github/workflows/swarm-pick-review.yml` \u2014 `cron: \"0 3 * * *\"` (daily at 03:00 UTC). It runs but emits no new picks (only resolves/refreshes the existing 38).\n\n**Comparison to ai-tournament:** different system entirely.\n- **Swarm Picks** = multi-model TradingView paper-trade captures (38 historical picks frozen May 11-12), graded by consensus tier (unanimous / strong / moderate / single / control). One-time backfill; nightly job only resolves existing picks, doesn't add new ones.\n- **AI Tournament** (`/audit/ai-tournament.html`) = live forward-test of 10+ models submitting daily picks via `tools/ai_tournament/generate_picks_fleet.py`. Active, growing \u2014 1,490 picks today, +20 today from Grok HEAVY submission.\n\n\u2192 Swarm Picks is **abandoned** in the sense that no new picks have entered for 13 days. The nightly workflow exists but appears to no longer generate fresh swarm consensus. Recommend either (a) revive the multi_model_pick_gen.py pipeline so new picks flow in, or (b) deprecate the Swarm Picks tab on /audit and redirect to ai-tournament.html.\n\n## 4. US Equity Picks (UEPS) tab\n\nThe tab title literally says \"Building track record (n=0/100)\". The screenshot picks (ADBE, PYPL, QCOM with F-Score 7-8, Altman Z scores) are demo/sample data from `HEDGE_FUND_GAP_ANALYSIS_2026-05-24.md` \u2014 they are not in `trading_picks`. **No edge can be claimed** until real picks flow through. The composite (Magic Formula \u00d7 Piotroski \u00d7 Acquirer's Multiple \u00d7 SafetyGate) is documented but doesn't have a live writer yet.\n\n## 5. \"Smart Picks button\" vs \"Smart Picks tab\" \u2014 UX confusion\n\n[audit_dashboard/template.html#L1306](audit_dashboard/template.html) is the **button** `\ud83e\udde0 SMART PICKS` \u2014 it filters the Active Picks table by intersecting against the live `smart_picks_feed`. Its own tooltip already admits: \"Closed-pick analysis shows the underlying confluence/score fields are missing from most historical records, so the Smart Picks filter cannot be verified as an edge on closed data. Use it as a live signal overlay, not as a standalone edge filter.\"\n\n[audit_dashboard/template.html#L1358](audit_dashboard/template.html) is the **tab** `\ud83e\udde0 Smart Picks` \u2014 opens the curated panel that reads `smart_picks_feed` directly with its own asset-class filter buttons (All / Crypto / Equity / Forex / Commodity / Futures / ETF).\n\nBoth consume the same JSON; the difference is overlay-vs-direct-view. The button's own tooltip is the most honest line on the page: **Smart Picks is a live signal overlay, not a verified-edge filter.**\n\n## 6. Cross-cutting baseline stats (where the real edge actually is \u2014 or isn't)\n\n```\nBASELINE 90d / ALL closed (from trading_picks, no gates applied):\n  class        n      wr%     PF    avg_pnl%\n  commodity   674    40.5    0.97    -0.00\n  crypto    4,494    44.7    0.97    -0.04\n  equity       30    60.0    0.76    -0.39    \u2190 n too small\n  etf          14    28.6    0.20    -1.26    \u2190 n too small + losing\n  forex     1,666    43.9    0.00   -69.74    \u2190 outlier-distorted\n  futures      18    11.1    0.16    -0.05    \u2190 critical\n  meme         66    31.8    0.41    -1.85\n```\n\n**Reality check vs the page's headline tiles:**\n- CRYPTO headline \"PF 1.25 / WR 44.6% / n=8067\" \u2192 recent live closed-book is **PF 0.97 / WR 44.7% / n=4,494**. Headline is using a longer-history aggregate; the recent panel is honest.\n- The \"SUPREME EDGE 2026-05-12\" callout for COMMODITY `cot_positioning` (n=104, WR 86.5%, Sharpe +1.377) returns 0 matching rows from `WHERE strategy LIKE 'cot%'` today \u2014 the strategy may have been renamed or the cot rows are in a different table. **Worth verifying before quoting this on the page.**\n\n## 7. \"If you bought Smart Picks at entry, would you be profitable?\" \u2014 partial answer\n\nI cannot fully simulate this in one turn because the full `smart_picks_feed` payload (entry + current_price per pick) lives at the bottom of the 22.8 MB dashboard JSON and would need a large fetch + per-symbol price re-marking. **What I can say from what I sampled:**\n- `age_hours` shows 362 picks in the feed\n- They lack `signal_time` so we can't trust \"1.4h ago\" \u2014 most are likely older\n- Aggregate CRYPTO baseline 90d closed = WR 44.7% / PF 0.97 \u2192 on equal-weight basis you would be **break-even to slightly losing** before fees if you treated every Smart Pick as a closed-out trade\n\nTo do this properly: fetch the full `smart_picks_feed`, re-mark every OPEN pick with `current_price` from yfinance, compute unrealised + realised P&L, weight by position size. Estimated 30-45 min of agent time. **Recommend spawning a follow-up subagent if you want a hard number.**\n\n---\n\n## Action items (ranked)\n\n| # | Pri | Action | Cost |\n|---|---|---|---|\n| 1 | **P0** | Backfill `trust_score` on closed picks OR rewrite HC gate to use a populated field. Page is currently citing stats that can't be reproduced. | M |\n| 2 | **P0** | Re-clamp 5 FOREX rows with `pnl_pct < -100%`. One-line `UPDATE trading_picks SET pnl_pct = -100 WHERE pnl_pct < -100`. | S |\n| 3 | **P1** | Add `signal_t"
      },
      {
        "enhancement_id": 3,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Implement random-guess audit self-flag prompt",
        "description": "After each AI-tournament submission, re-prompt the model: 'Are these picks based on cited live market data or speculation? Mark each.' Store flag in tournament_pick_research.research_basis.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "research_basis populated on every new pick within 7 days of rollout",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "DAILY_IDEAS.MD",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# DAILY IDEAS LOG\n\n## 2026-05-13 \u2014 User brainstorm dump (alt-data + asset-class expansion)\n\nCaptured for future swarm rounds + backtests. Each block = candidate prompt for `tools/swarm/swarm_run.py --preset non-opus-4 --critique-first`.\n\n### IDEA-A: Top proven criteria per asset class (20-round research)\n\nRun 20 swarm rounds per asset class harvesting proven academic + practitioner criteria. After research, backtest the criteria, cross-check against existing safety gates / entry criteria. Use Python TA pattern finding (pandas-ta, mplfinance, pyti). Goal: enumerate what actually works per class.\n\nSub-prompts:\n- EQUITY: value stocks (P/E, P/B, EV/EBITDA), long-term patterns, financial-statement deltas, earnings-revision triggers, \"skyrocket\" precursors (insider buy clusters, short-squeeze setups, breakout-on-volume, sector rotation entry).\n- CRYPTO: on-chain whale flows, funding rates, NUPL extremes, dormancy flow, exchange netflow, stablecoin minting velocity.\n- BOND: credit-spread regimes (HYG-LQD, TED), yield-curve shape, real-rate vs inflation expectations.\n- FOREX: interest-rate differentials, BoJ/Fed policy divergence, CoT FOREX section.\n- FUTURES: COT commercial extremes (already wired), seasonality (grain harvest cycles, energy winter draws), term-structure backwardation.\n- ETF: macro-regime overlays (VIX, yield curve, DXY).\n\n### IDEA-B: Penny stocks revisit\n\nExisting repo likely has penny-stock page. Re-validate at <$6 / <$3 / <$2 / <$1 buckets. Per-bucket edge analysis: is sub-$2 universe systematically different from $3-$6 bucket? Find the bucket with the cleanest risk/reward.\n\nSub-prompts:\n- Microcap WR + PF historical by float-size bin\n- Pump-and-dump red flags (premarket spike + dilution filing + zero institutional)\n- Catalyst-driven moves (FDA, merger announce, contract win)\n\n### IDEA-C: Mutual funds (no-load + low-redemption-fee)\n\nUser point: \"we get in and out without being locked in. with mutual funds we would likely pay hefty commission but there are certain mutual funds technically we could buy and hold and get out.\" Filter for no-load / no-12b1 / no-redemption-fee / no-short-term-trading-restriction. Vanguard / Fidelity / Schwab class candidates.\n\nSub-prompts:\n- yfinance fund universe filter for `quoteType=MUTUALFUND` + `expense_ratio < 0.5%` + `front_load=0` + `back_load=0`\n- 5y / 10y Sharpe per-fund ranking\n- Compare to ETF equivalents \u2014 is the fund version worth it?\n\n### IDEA-D: Options data + correlation to underlying\n\nOptions flow (Polygon free tier? CBOE volume data?), put/call ratios, max-pain analysis, dark-pool prints. Correlate option-flow regime to next-week underlying move.\n\nSub-prompts:\n- Put/call ratio extremes as contrarian signal\n- Unusual options activity (UOA) detector \u2014 calls bought above ask in size as bullish lead\n- Max-pain pin theory near OPEX\n\n### IDEA-E: \"Secret patterns\" \u2014 corporate-relationship arbitrage\n\nUser example: vendor known associated with Samsung \u2192 SEC filing or partnership announcement \u2192 trade Samsung-related ETF or supplier stock before broader market notices. Generalize: SEC 8-K + 13D/G filings, EDGAR full-text search for partnership keywords, GovTribe contract awards, USPTO patent assignments, court-docket data (PACER), import/export bills of lading (Panjiva / Import Genius free tiers).\n\nSub-prompts:\n- Detect supplier-relationship announcements via EDGAR 8-K keyword search\n- Patent assignments \u2192 predict M&A or partnership 30-60 days ahead\n- Government contract awards (SAM.gov) \u2192 small-cap winner signals\n\n#### IDEA-E Analysis (2026-05-24 \u2014 2-engine swarm)\n\n**Engines:** DeepSeek V3.2 + Cerebras. Both reviewed the same codebase context (existing , ,  VT Restatement Short,  EDGAR stubs, May 14 swarm scoring at 23/100 rank 7).\n\n**Verdict: 4.5/10 composite \u2014 niche diversification play, not a primary alpha source.** Engines disagreed sharply on feasibility (DeepSeek 2/10 vs Cerebras 7/10), but converged on one point: the full vision (USPTO + SAM + PACER + Panjiva) is over-engineering. MVP-only is the right first step.\n\n| Criterion | DeepSeek | Cerebras | Composite |\n|---|---|---|---|\n| Gap fit | 3/10 (no gap \u2014 Form 4/13D already cover corporate catalysts) | 7/10 (orthogonal gap \u2014 partnership \u2260 insider buy/sell) | **5/10** |\n| Realism / signal count | 2/10 (50-100 actionable/yr from 80K 8-Ks = 0.1%) | 6/10 (4-6/wk true partnerships >00M cap) | **4/10** |\n| Data accessibility | 5/10 (free but noisy; PACER adds 0-50/mo) | 8/10 (EDGAR FTS API + SEC 13D/G + USPTO all zero-cost) | **6.5/10** |\n| Integration feasibility | 4/10 (~400 loc, no entry/exit/backtest framework) | 7/10 (~150 loc MVP, reuse EdgarFtsClient, plug into vt_partner_strategies) | **5.5/10** |\n| Priority vs EDGE_CRITERIA | 1/10 (behind confidence fix, regime audit, FOREX kill) | 4/10 (nice-to-have diversification post-core fixes) | **2.5/10** |\n| **Overall** | **2/10** | **7/10** | **~4.5/10** |\n\n**DeepSeek's core objection (valid):** Partnership announcements are PR, not capital commitment. Insider buys (Form 4) and activist filings (13D) show people putting money where their mouth is. A press release about a \"strategic partnership\" has no skin in the game \u2014 the 95%+ false-positive rate is structural, not fixable with better keyword filters.\n\n**Cerebras's core defense (also valid):** The edge is *speed of dissemination*, not depth of signal. A Samsung-supplier 8-K that moves the supplier stock 3-5% in the first 2 hours is a real phenomenon (documented in academic event-study literature). The question is whether a keyword scanner can beat the market's NLP-parsing latency on a /usr/bin/bash budget. Probably not \u2014 but at ~150 lines and zero new dependencies, it's a cheap experiment.\n\n**Salvageable elements (for future Sprint if priority rises):**\n- **8-K keyword scanner MVP (~80 lines):**  reusing the  pattern from . Query EDGAR 8-K FTS API for  with a 7-day lookback. Regex-filter for company names >00M market cap. Emit  to . Paper-trade for 30 days, measure realized PF.\n- **Discard:** USPTO patent assignment scraper, SAM.gov contract awards, PACER docket monitoring, Panjiva bills of lading \u2014 all require separate scrapers, auth, or paid tiers with unproven signal value. Do not build until the 8-K MVP proves PF>1.2 after transaction costs.\n- **Estimated effort:** 2-4 hours for MVP. Accept/Reject criterion: if 30-day paper-trade PF < 1.0 OR signal count < 10, kill the idea permanently.\n\n**Decision: DEFER \u2014 do not implement now.** Priority is below Sprint 1 (confidence fix + regime audit + FOREX kill) and below higher-scoring ideas (IDEA-A asset-class criteria research at 8/10 from May 14 swarm, IDEA-H Polymarket at 6/10). Revisit only if a future Sprint has slack and the core confidence/regime/FOREX pipeline is stable.\n\n### IDEA-F: Chinese / Hong Kong markets\n\nHSI / SSE / SZSE indices, ADR universe (BABA, JD, BIDU, PDD), KraneShares ETFs (KWEB, KBA, KGRN). Trade A-share-ADR premium/discount as stat-arb. Cross-listed pairs.\n\nSub-prompts:\n- HSI vs SPX correlation regime detection (decoupling phases)\n- China stimulus headlines \u2192 KWEB momentum\n- PBoC liquidity injection schedule as macro tilt\n\n### IDEA-G: Gas-price correlation\n\nNatural gas (NG=F, KOLD/UNG) + gasoline (RB=F) prices \u2194 consumer-discretionary spend, transportation stocks, refiners (XOM, CVX, MPC, VLO). Lag/lead \u2014 does gas price spike predict consumer-staples relative-outperformance?\n\nSub-prompts:\n- WTI/Brent \u2192 consumer staples vs discretionary ratio\n- NG winter draws \u2192 utilities momentum\n- Refinery crack spreads \u2192 refiner-stock alpha\n\n### IDEA-H: Polymarket data correlation\n\nPrediction-market prices (Polymarket, Kalshi, PredictIt) \u2192 equity/macro signal. User caveat: correlation \u2260 causation; investigate hidden factors.\n\nSub-prompts:\n- Election market odds \u2192 small-cap risk-on bias (R) or healthcare bias (D)\n- Geopolitical event markets \u2192 oil/gold spike forecasting\n- Fed-meeting probability markets \u2192 STIR (short-term interest rate) trade\n- Causation check: do Polymarket odds LEAD or LAG the underlying market?\n\n#### IDEA-H Analysis (2026-05-24 \u2014 2-engine swarm)\n\n**Engines:** DeepSeek V3.2 + Cerebras. Both reviewed the full PM infrastructure (8,700+ loc across 11 production files \u2014 , , , , , , , , , , ), quality_gates weights (prediction_market_consensus=14, polymarket_signals=14, pm_whale_signals=10), and the existing  dict in .\n\n**Verdict: 7.5/10 composite \u2014 strong infrastructure leverage, the highest-scoring idea from the May 13 brainstorm so far.** Both engines agreed this is the best candidate among the 12 ideas given the deep existing PM foundation. The key insight: 40% of the code is already written \u2014 IDEA-H is extending the PM engine from crypto-only to equity/macro, not building from scratch.\n\n| Criterion | DeepSeek | Cerebras | Composite |\n|---|---|---|---|\n| Gap fit | 7/10 (strong but domain shift from crypto\u2192equity; 40% infra reuse) | 9/10 (natural extension of existing PM engine) | **8/10** |\n| Realism / signal count | 8-15/wk raw, 35% actionable = 3-5/wk | 4-6/wk clean (odds>70%, vol>50k, trend\u22652h) | **4-6/wk** |\n| Data accessibility | /usr/bin/bash \u2014 Polymarket Gamma + Kalshi + FRED + yfinance, all free | 9/10 \u2014 /usr/bin/bash incremental, all already licensed or free | **9/10** |\n| Integration feasibility | ~570 LOC total (450 new + 120 modified) | ~560 LOC total (pm_macro_overlay.py ~200 loc + lead_lag_analyzer.py ~250 loc + extensions) | **~560 LOC** |\n| Priority vs EDGE_CRITERIA | 6/10 (Sprint 3 \u2014 after core foundation stable via Sprint 2) | 7.5/10 (Sprint 2 candidate, synergizes with symbol-universe audit) | **6.5/10** |\n| **Overall** | **6.8/10** | **8.2/10** | **~7.5/10** |\n\n**Key point of agreement: Fed-rate correlation is the highest-signal entry point.** Both engines independently identified Polymarket Fed-meeting probability markets as the cleanest signal \u2014 they have the most liquidity, the tightest bid-ask spreads, and the most direct mapping to tradable instruments (fed funds futures / STIR). Election and geopolitical ma"
      },
      {
        "enhancement_id": 161,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Portfolio-level factor-risk (beta) gate + de-gross kill-switch",
        "description": "HHI concentration gate measures source-label collision, NOT BTC/SPY/VIX-beta exposure. No covariance/factor overlay exists; only a recommendation string tighten_risk_and_reduce_gross_exposure at production_scanner.py:6823. Directly relevant to /audit Model Portfolios \u2014 Risk-Managed Books. (Kimi-K2.6 peer critique 2026-05-31.)",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "kimi-k2.6-peer",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Per-book gross + net factor-beta computed; auto de-gross when portfolio beta or drawdown breaches threshold",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-10 18:24:36",
        "updated_at": "2026-06-10 18:24:36",
        "implemented_at": null,
        "link_md_path": "reports/kimi_insights_sweep_2026-06-10.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 155,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Forward-weighted elite_score (replace anti-predictive backtest metrics)",
        "description": "Scoring is anti-predictive (incident #65: conf>=0.90 -> 14.4% WR; Zoo: backtest-vs-forward WR r=-0.91). Replace backtest-derived score components with ROLLING FORWARD WR as the primary signal + score decay for stale strategies.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "zoo + claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Pearson(elite_score, realized_fwd_pnl) > 0.2 (currently ~0)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 05:10:13",
        "updated_at": "2026-06-09 05:10:13",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 146,
        "asset_class": "OVERALL",
        "source_ref": "edge_validation_roadmap 2026-06-09",
        "title": "SAVE-1: Backfill deep OHLCV history (crypto_ohlcv/stock_ohlcv) \u2014 gating dependency for intrabar truth",
        "description": "crypto_ohlcv holds only ~30 days of contiguous 1h bars (BTCUSDT=720), so intrabar re-resolution can only cover recent picks (1422/3000 no_data). Backfill ~6-12 months of 1h history via Binance->CoinGecko->KuCoin failover so the full pick book can be honestly re-resolved. This unblocks SAVE-2/3 and every backtest.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (save-the-system roadmap 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "crypto_ohlcv has >=180d 1h bars for top-80 symbols; reresolve_intrabar no_data rate <20%.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:06:16",
        "updated_at": "2026-06-09 03:06:16",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/edge_validation_roadmap.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 147,
        "asset_class": "OVERALL",
        "source_ref": "edge_validation_roadmap 2026-06-09",
        "title": "SAVE-2: Make intrabar OHLC replay the PRODUCTION resolver (all classes)",
        "description": "outcome_resolver.py does not replay intrabar OHLC, so TP_HIT may have hit SL first. tools/reresolve_intrabar.py (dry-run, de-biased) shows CRYPTO 52.3%->42.9% WR / 26.4% TP->SL reclass. Promote first-touch replay into the production resolver + run reresolve_intrabar.py --apply (backup-first) to relabel the historical book. Prerequisite: SAVE-1.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (save-the-system roadmap 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All resolved rows carry forward_test_only=1 + intrabar resolver_version; re-measured verdicts are reproducible across resolver versions.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:06:16",
        "updated_at": "2026-06-09 03:06:16",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/edge_validation_roadmap.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 130,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EXEC_PLAN_06 PROMOTED_STRATEGIES VRP entry blocked by 11 methodology bugs",
        "description": "docs/EXEC_PLAN_06 plans Day-75 promotion of vrp_harvest_v1 to PROMOTED_STRATEGIES. Independent 2-source review (Claude + DeepSeek-Chat-Direct via local LiteLLM :4000) found 11 critical bugs in verified_strategies/vol_risk_premium_harvest.py: (1) variance-units-to-returns dimensional bug, (2) ^VIX index not tradable, (3) hedge cost 1bp/day vs realistic 5-8bp, (4) WR 91.5% invariant to cap = tautology not edge, (5) walk-forward explicitly cannot run yet labeled VALIDATED, ...etc. EXEC_PLAN_06 gates 1-3 must include underlying-strategy methodology audit, not just forward-stat checks.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7 MD-review-loop",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Either (a) vrp_harvest_v1 refactored to address bugs 1-11 with new backtest results before Day 75, OR (b) EXEC_PLAN_06 superseded by a strategy that passes independent skeptic review.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 05:32:58",
        "updated_at": "2026-06-05 05:32:58",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 123,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Build tools/clean_ingest_v2.py with split-aware drift rejection at write time (MASTERPLAN action 2)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "See MASTERPLAN_JUNE52026_CLAUDE.MD for acceptance criteria, dependencies, and 30-day timeline. Reviewed by 2-engine swarm (DeepSeek + xAI) \u2014 both unanimous on action item priority.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:50:41",
        "updated_at": "2026-06-05 04:50:41",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 124,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add 3 non-LLM feature emitters - funding rate, term structure, VIX regime (MASTERPLAN action 3)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "See MASTERPLAN_JUNE52026_CLAUDE.MD for acceptance criteria, dependencies, and 30-day timeline. Reviewed by 2-engine swarm (DeepSeek + xAI) \u2014 both unanimous on action item priority.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:50:41",
        "updated_at": "2026-06-05 04:50:41",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 111,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Return-attribution + leakage-control gate for LLM-agent sleeves (KTD-Fin)",
        "description": "Per KTD-Fin (arXiv 2605.28359): LLM-agent backtest edge fails via knowledge leakage (recent window in model cutoff = memorization) + return attribution (beta/style not alpha). Our ai-tournament deepseek_v4 PF3.46 is on a recent named-ticker window -> doubly suspect.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "deepseek_v4 alpha-component (Barra-style) > 0 on out-of-cutoff forward window AND PF holds under masked tickers; else demote tournament 'edge' claim.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "495",
        "created_at": "2026-06-03 03:28:15",
        "updated_at": "2026-06-03 14:11:57",
        "implemented_at": "2026-06-03 14:11:57",
        "link_md_path": "reports/paper_review_KTD-Fin_2026-06-02.md",
        "link_url": null,
        "link_github_ref": "495",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 91,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "Strategy Verification Engine \u2014 comprehensive pipeline",
        "description": "Standalone verification engine combining block-bootstrap MC null, PBO, DSR, purged walk-forward, regime analysis, cost model, and tier assignment. Single source of truth.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "IMPLEMENTED",
        "proposed_by": "kilo-mimo-free",
        "related_persona_id": null,
        "proposed_features": "[\"block_bootstrap_null()\", \"compute_pbo_parameter_perms()\", \"compute_deflated_sharpe()\", \"purged_walkforward()\", \"verify_strategy()\", \"tier assignment\"]",
        "success_metric": "All strategies validated through single pipeline",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "#452",
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/strategy_verification_engine.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Created alpha_engine/strategy_verification_engine.py (736 lines)."
      },
      {
        "enhancement_id": 85,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-6 v2 statistical gates \u2014 PBO + walk-forward OOS + bootstrap CI (minimax-m3-free, 2026-06-02)",
        "description": "Backlog for EAGLE-6 v2: add three more statistical gates on top of v1's DSR+n+HHI to harden the final admissibility check. (a) PBO<0.5 \u2014 Combinatorially-Purged Cross-Validation Probability of Backtest Overfitting. Blocked: tools/cpcv_pbo_results.json not yet generated. (b) Walk-forward OOS PF >= 0.8x IS PF \u2014 guards against in-sample overfit. Blocked: per-strategy walk-forward payload not present in current DSR JSON. (c) Bootstrap 95% CI on PF must not cross 1.0 \u2014 guards against pick selection by chance. Plus a v2 design fix: (d) windowed HHI (not per-pick) to avoid over-zealous kill on small populations \u2014 single pick in universe has HHI=1.0 and would get killed under v1's per-pick HHI.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "minimax-m3-free",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "v1 (shipped) already in production. v2 success: each of the 3 additional gates (PBO, WF OOS, bootstrap CI) is active in the live scanner, fail-open semantics preserved, and the four v1 gates (DSR noise + n>=30 + HHI<=0.20 + the new windowed-HHI) work in concert without double-killing the same pick.",
        "target_release": "2026-06-30 17:00 EST",
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:18:31",
        "updated_at": "2026-06-03 00:50:57",
        "implemented_at": null,
        "link_md_path": "EAGLE6_2026-06-02_minimax-m3-free.MD",
        "link_url": null,
        "link_github_ref": "456,#471,#473,#481,#482,#485",
        "enhancement_plan": "EAGLE-6 v2 4-gate cascade COMPLETE: PBO=1.0 FAIL (PR #471) -> WF OOS 18 PASS (PR #473) -> Bootstrap CI 9 PASS (PR #481) -> Windowed HHI 0 PASS (PR #485). Result: 0 of 56 strategies survive the full 4-gate cascade. Reason: every strategy is sourced 100% from a single alpha_engine system (or 95%+ alpha + 5% battleground). This is backtest self-confirmation: the same code that produces the picks is also validating them. Forward-test list (PR #482) is now DEMOTED to paper-watch only until a 2nd independent source_system is integrated."
      },
      {
        "enhancement_id": 79,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "30-day shadow paper pipeline for ETF Verified Dual Momentum (first promotion candidate)",
        "description": "30-day shadow paper pipeline for ETF Verified Dual Momentum (first promotion candidate)",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"metrics\": \"Sharpe 1.91, n=104, PF 1.60, MDD -18%\", \"strategy\": \"etf_verified_dual_momentum\", \"shadow_target_pf_range\": [1.4, 1.8]}",
        "success_metric": "Forward PF within 30% of OOS lab PF over 30d -> promote to 0.5x sizing",
        "target_release": "Capital staging step 1",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 66,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Single purged-embargoed walk-forward promotion path (kill two-scoreboard split)",
        "description": "Tournament (ai-tournament.html, deepseek_v4 PF3.46 paper) and production money_ready use different labels/costs. Unify: one purged-embargoed walk-forward harness (30d purge+10d embargo) as the only promotion path.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Tournament and production WR/PF reconcile within 10% on same picks.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "476",
        "created_at": "2026-06-02 14:17:13",
        "updated_at": "2026-06-02 20:47:53",
        "implemented_at": "2026-06-02 20:47:53",
        "link_md_path": "reports/QUICK_PICK_METHODOLOGY_SWARM_2026-06-02.md",
        "link_url": null,
        "link_github_ref": "476",
        "enhancement_plan": "Shipped in PR #476: verified_strategies/promotion_path.py. canonical_promotion() delegates to AdmissibilityPipeline (single path); reconcile_scoreboards() flags tournament-vs-production PF drift >25%. 5 tests."
      },
      {
        "enhancement_id": 16,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Adopt Grok unified 1-10 cross-asset rating system (Edge_Quality+Regime_Fit+Calibration+Risk_Adjusted+Diversification)",
        "description": "Final consolidated 162-line spec from Grok (3-round swarm review + DB investigation + Quant 4-phase vetting). Unified 5-sub-score framework with class-specific factors for EQUITY/ETF/CRYPTO/FOREX/COMMODITY/FUTURES/BOND + strict high-risk bucket for PENNY/Cheap/IPOs. Grounded in real DB findings (top edge concentrated in ml_crypto_predictor + mega_mutation; elite_score has near-zero correlation with realised PnL). Persona-tunable, regime-aware, calibration-corrected. Direct fix for the confidence-inversion + cherry-picked-edge incidents.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-gx10-c9b9",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Spec implemented as alpha_engine/score_v3.py opt-in sidecar; >=3pp WR lift vs current score_pick.py on paired-bootstrap of 90d closed picks; promoted to production after WF gate clears",
        "target_release": "2026-08-27",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:52:28",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_Complete_Cross_Asset_Rating_System_vFinal.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Complete Cross-Asset 1-10 Pick Rating System + Quant Vetting\n**Version:** Final (2026-05-25)  \n**Status:** Consolidated deliverable after 3-round swarm review + deep DB investigation + rigorous Quant critique\n\n---\n\n## Executive Summary\n\nThis document consolidates the full body of work from the session:\n\n- 6 realistic hedge-fund personas for idea generation across asset classes.\n- A unified, explainable **1-10 pick rating / tier list system** using five sub-scores (Edge_Quality, Regime_Fit, Calibration, Risk_Adjusted, Diversification) + class-specific factors.\n- Concrete algorithm designs for **all major asset classes** (Equity, ETF, Crypto, Forex, Commodity, Futures, Bond) plus a strict high-risk bucket for Penny Stocks, Cheap Stocks, and IPOs.\n- Grounding in actual database findings from `ejaguiar1_stocks` (top edge concentrated in narrow strategies like `ml_crypto_predictor` and `mega_mutation`; broad scores like `elite_score` show near-zero correlation with realized PnL).\n- Full Quant vetting against a professional 4-phase institutional workflow (Data Intake \u2192 Exploratory Analysis \u2192 Model Development \u2192 Production-Ready Implementation).\n- Clear remediation recommendations for the Smart Picks feature on `/audit` (currently running on stale April 30 data with self-admitted unverifiable edge).\n\nThe system is designed to be:\n- Regime-aware and calibration-corrected (directly addressing documented inversion and concentration problems).\n- Persona-tunable.\n- Auditable and production-wirable (with explicit first callers and self-backtest requirements).\n\n---\n\n## 1. The Six Hedge Fund Personas\n\n1. **Elena Vargas** \u2014 Global Macro PM (regime + geopolitics + liquidity overlays)\n2. **Marcus Chen** \u2014 Quantitative Factor PM (statistical purity, regime filters, narrow proven edges)\n3. **Priya Sharma** \u2014 Fundamental L/S Analyst (bottom-up quality + catalysts + technical timing)\n4. **David Okonkwo (\"D-Risk\")** \u2014 Risk & Volatility Overlay (MDD control, correlation, tail hedging)\n5. **Sofia Reyes** \u2014 Thematic/Growth Allocator (secular trends + momentum + flows)\n6. **Jian Li** \u2014 Sector/Event-Driven Specialist (deep industry + catalyst timing on proven patterns)\n\nEach persona has different optimal weightings on the same sub-score framework.\n\n---\n\n## 2. Unified 1-10 Rating Framework (Core Design)\n\n**Sub-Scores (0-10 each):**\n- **Edge_Quality** \u2014 Historical closed performance of the generating strategy/family (anchored in real DB + edge_stability/pf_registry data; only narrow proven families qualify as \"Golden Signals\").\n- **Regime_Fit** \u2014 Alignment with class-specific regime signals (VIX+YC for Equity, BTC dominance + real yields for Crypto, term structure + COT for Commodities, etc.).\n- **Calibration** \u2014 Historical accuracy of similar signals in the current regime (explicit fix for confidence inversion).\n- **Risk_Adjusted** \u2014 Inverse of expected drawdown/volatility in the regime.\n- **Diversification** \u2014 Penalty for strategy-family and symbol concentration.\n\n**Composite** = weighted average (weights persona-tunable) \u2192 normalized to 1-10.\n\n**Tiering:** S (9.0+), A (7.5\u20138.9), B (6.0\u20137.4), C (4.0\u20135.9), D (<4.0)\n\n**Hard Rules (Anti-Patterns):**\n- No raw \"confidence\" without Calibration correction.\n- New strategy families require n \u2265 30 resolved + WR \u2265 50% before any meaningful Edge_Quality.\n- Golden Signals list is narrow and class-specific.\n\n---\n\n## 3. Rating Algorithms by Asset Class\n\n### Equity\n- Heavy weight on proven breakout/contraction families (donchian, rs-breakout, vol-contraction scouts from 05-16 validation: 72\u201378% WR, PF 6.4\u20137.1).\n- Regime_Fit dominated by VIX + Yield Curve filter (82.14% WR / PF 25.51 / MDD 2.28% in best backtest config).\n- Strong Calibration emphasis due to documented inversion.\n\n### ETF\n- Similar to Equity but with higher emphasis on sector rotation + flow signals.\n- Regime_Fit remains very high weight (ETFs are excellent vehicles for expressing proven macro regimes).\n\n### Crypto\n- Regime_Fit: BTC dominance + real yields/DXY + Fear & Greed extremes.\n- Edge_Quality: Funding rate arbitrage + on-chain momentum + narrow proven families (e.g., `ml_crypto_predictor` and `mega_mutation` showed the strongest realized edge in DB analysis: +1.88% to +2.64% avg PnL).\n- Very heavy Risk_Adjusted + liquidity filters. Most names capped at 6\u20137 unless multiple structural factors align.\n\n### Forex\n- Regime_Fit: DXY strength + interest rate differentials + COT extremes.\n- Edge_Quality: Carry + COT positioning families (DB showed `alpha_engine` and `non_crypto_consensus` as relatively better, while broad copy-trader systems were deeply negative).\n- Extremely conservative overall. Acts as a natural kill-switch for weak classes.\n\n### Commodity\n- Shift emphasis to structural factors: term structure/contango, roll yield, COT, seasonal.\n- Regime_Fit: Inflation/growth + USD regime.\n- Note: Historically strong (PF 4.31 in edge_stability) but recent data collapsed \u2014 requires dedicated structural engine rather than equity-style momentum logic.\n\n### Futures\n- Route through most relevant class (Equity index futures \u2192 Equity logic; energy/ag \u2192 Commodity logic) + add roll-yield and contract-specific liquidity overlay.\n\n### Bonds\n- Primarily defensive. Tiny historical n. Only elevated in extreme rate-volatility regimes.\n\n### High-Risk Bucket (Penny Stocks, Cheap Stocks, IPOs)\n**Separate strict module** (most names should score 1\u20134):\n- Edge_Quality: Near-zero base (almost no proven historical families on these names).\n- Heavy Risk_Adjusted + structural penalties:\n  - Hard liquidity floor (ADV minimum).\n  - Dilution risk (recent offerings, ATM, convertibles).\n  - Promoter/SEC/auditor flags.\n  - Lockup expiration risk (for IPOs).\n  - Short interest + borrow availability.\n- Only exceptional catalyst + clean structure + liquidity cases allowed above 6.\n- Treated as tactical satellite allocation only.\n\n---\n\n## 4. Quant Vetting Against Professional Workflow\n\nThe full proposed system was stress-tested by a senior quant reviewer against the exact 4-phase institutional process you provided.\n\n**Summary of Critique:**\n- **Phase 1 (Data Intake)**: Weakest area. Framework assumes cleaner historical inputs than currently exist (resolver gaps, small resolved n, `sp_*` tables empty, pre-v2 pollution). Would amplify noise if fed raw data.\n- **Phase 2 (Exploratory)**: Partial credit. Correctly diagnoses inversion and concentration but does not yet mandate fresh purged EDA + sub-strategy decomposition before scoring.\n- **Phase 3 (Model Development)**: Conceptually strong (sub-scores, Golden Signals/narrow edge focus, persona tunability, anti-patterns). However, risks creating another broad score layer on top of narrow, fragile edges.\n- **Phase 4 (Production)**: Strongest area (explicit wiring plan, first callers in `production_scanner.py` and `regime_position_sizer.py`, self-backtest requirement, feature flags). Still blocked by upstream data quality.\n\n**Key Recommendations from Vetting:**\n- Implement the 30-day MVP (Equity Golden Signals + Quant weights + one column in scanner + self-backtest on the 252 closed trades) behind a strict flag first.\n- Fix resolver gaps and sp_* freshness before expanding to other classes.\n- Complete Forex mutation rescue and Commodity structural engine before full cross-asset rollout.\n- For the high-risk bucket: Treat as a filter more than a rating system (most names 1\u20134 by design).\n\n**Concrete Example Provided (Momentum + Macro Pipeline):**\nATR-normalized momentum with macro regime overlay, only boosting narrow proven families in favorable conditions. Full pseudo-code available in the subagent output.\n\n**Risk-Budgeting Pitfalls Identified:**\nStatic correlations, liquidity/vol mismatch across buckets (especially penny/IPO), look-ahead in live portfolio_state, non-stationary edge, failure to integrate mutation/kill gates.\n\n**Robust Validation Process Recommended:**\nPurged/embargoed walk-forward with regime-stratified folds, monotonic lift requirement for high-rated buckets, calibration plots, concentration impact measurement, and live sandbox testing before any production wiring.\n\n---\n\n## 5. Smart Picks Remediation Recommendations (from DB + Code Audit)\n\n1. **Immediate**: Stop prominently featuring Smart Picks or make staleness extremely visible (large red banner when feed >4\u20136 hours old).\n2. **High Priority**: Either deprecate the current presentation or relabel it clearly as \"Experimental Unverified Overlay.\"\n3. **Data Quality**: Fix the database-backed `sp_*` pipeline or explicitly document that the feature runs on a static file.\n4. **Transparency**: Add prominent warnings that historical edge cannot be verified due to missing fields in closed records.\n5. **Longer Term**: Only promote once resolver gaps are closed, fields are properly logged going forward, and the selection shows monotonic lift in a clean out-of-sample test on resolved data.\n\n---\n\n## 6. Implementation Path (Wiring)\n\n- Module: `alpha_engine/pick_rating_engine.py`\n- First production caller: `production_scanner.py` (attach score/tier/drivers before emission).\n- Second caller: `regime_position_sizer.py` (use Diversification + Risk_Adjusted for dynamic sleeves).\n- Mandatory: Self-backtest report on clean resolved data before any PR merge.\n- Feature flag + opt-in initially.\n\nAny PR must contain a clear **Wiring Plan** section.\n\n---\n\n## 7. Final Deliverables from This Session\n\n- Master consolidated specification (this document).\n- Living transcript of the 3-round swarm review process (`reports/2026-05-25_swarm_review_transcript.md`).\n- Supporting deep-dive reports (UI audit, DB edge analysis, persona survey, etc.).\n\n**Status:** All planned work (designs + high-risk bucket + full Quant vetting against professional workflow + DB grounding + remediation) is complete.\n\n---\n\n*End of Final Consolidated Report*"
      },
      {
        "enhancement_id": 15,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add CVaR-aware portfolio constructor with turnover penalty (Qwen pitfall #2 + #4)",
        "description": "Replace current rank-and-fill logic with constrained min-vol optimiser that includes (a) CVaR constraint, (b) sector exposure caps, (c) turnover penalty inside the objective. Operationalises Qwen's pitfall #2 (transaction cost feedback) and pitfall #4 (hidden sector concentration).",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "qwen-code",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Portfolio constructor returns weights that respect leverage + per-asset + sector caps; backtest shows lower DD vs current logic on same signal feed",
        "target_release": "2026-08-27",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:51:47",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 10,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Enforce purged-k-fold + walk-forward validation as new-strategy admission gate",
        "description": "Kilocode/Nemotron 2026-05-25 session proposes: expanding-window (T0=250d / 21d test), 5-fold purged TS-CV with 5-day gap, Bayesian-shrunk Sharpe + bootstrap CI, Ljung-Box on residuals, Monte-Carlo return-shuffle (>95th percentile), regime-split via HMM. Currently only DSR sidecar enforces overfit guard. Promote this framework to a hard pre-promotion gate for any strategy moving from shadow to probation.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "kilocode/nemotron-3-super",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Every new strategy promoted from shadow has a JSON validation report attached with all 6 metrics passing thresholds; backtest CI workflow blocks promotion if any fail",
        "target_release": "2026-08-27",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:47:16",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "session-ses_1a2f.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Hedge Fund Persona Investment Analysis\n\n**Session ID:** ses_1a2fc349fffeM2WL8LafLjajpC\n**Created:** 5/25/2026, 2:43:10 AM\n**Updated:** 5/25/2026, 3:45:46 AM\n\n---\n\n## User\n\nGive me a list of personas that could similar to ones a hedge fund would use, then act as each persona, and come up with the top picks per asset class for ETFs/ stocks for picks based on the latest market data and come up with a list of picks including TP/PL, entry reason\n\n---\n\n## Assistant (Code \u00b7 NVIDIA: Nemotron 3 Super (free) \u00b7 23.0s)\n\n_Thinking:_\n\nI need to create a list of hedge fund-style personas and then act as each persona to come up with top picks for ETFs/stocks with TP/SL and entry reasons based on latest market data.\n\nFirst, let me think about hedge fund personas. Common ones might include:\n1. Macro Trader - focuses on big economic trends, interest rates, currencies\n2. Quantitative Analyst - uses mathematical models and algorithms\n3. Value Investor - looks for undervalued stocks with strong fundamentals\n4. Growth Investor - seeks companies with high growth potential\n5. Event-Driven Specialist - trades on corporate events like mergers, earnings\n6. Arbitrageur - exploits price inefficiencies\n7. Sector Specialist - focuses on specific industries (tech, healthcare, etc.)\n8. Short Seller - looks for overvalued stocks to short\n9. Macro Hedge Fund Manager - global macro perspective\n10. Risk Parity Strategist - balances risk across asset classes\n\nNow I need to get latest market data to make informed picks. Since I don't have real-time data access, I'll need to use websearch or other tools to get recent information. Let me start by searching for current market trends and top performing ETFs/stocks.\n\nLet me first check what time it is - the environment shows 2026-05-25T02:43:10+00:00, so it's May 25, 2026.\n\nI should search for recent market data to inform my picks. Let me use websearch to get current information.\n\n\n**Tool: websearch**\n\n**Input:**\n```json\n{\n  \"query\": \"May 2026 stock market top performing ETFs stocks trends\"\n}\n```\n\n**Output:**\n```\nTitle: Best Performing Stocks in May 2026 - Monthly Gainers\nURL: https://www.stocktitan.net/rankings/stock-gains-monthly/2026/5?page=19\nPublished: 2026-05-24T03:55:00.000Z\nAuthor: Stock Titan\nHighlights:\n# Best Performing Stocks in May 2026 - Monthly Gainers\n[...]\nBest Performing Stocks in May 2026 - Monthly Gainers\n[...]\nMARKET LEADERS\n[...]\n52-WEEK LEADER WOLF +4720% Wolfspeed, Inc.\n[...]\n2026 YTD LEADER NINE +2951% Nine Energy Service, I..\n[...]\nMAY 2026 LEADER PIII +351% P3 Health Partners Inc.\n[...]\n20\n[...]\n# Top Stock Gainers May 2026 - Monthly Performance Ranked\n[...]\nTrack the top performing stocks of May 2026 ranked by monthly price gain. See which stock gainers delivered the highest gains this month, with market caps over $100 million on Nasdaq and NYSE.\n[...]\nThis ranking shows the top performing stocks and biggest stock gainers during May 2026, calculated from the first to the last trading day of the month. It shows which stocks are going up this month, with split-adjusted data used for consistent performance calculations.\n[...]\nMonthly performance rankings can reveal price strength, sustained momentum, sector rotation, and event-driven moves that are not visible in one-day movers lists. The table is informational only and does not recommend any stock to buy, sell, or hold.\n[...]\nData as of May 24, 2026 at 12:54 AM EDT\n[...]\n1801\n[...]\nD. Boral Acquisition I Corp.\n[...]\n1802\n[...]\nWheaton Precious Metals Corp.\n[...]\n1803\n[...]\n1804\n[...]\nWestern Asset Mortgage Oppo\n[...]\n1805\n[...]\n1806\n[...]\n1807\n[...]\n1808\n[...]\n1809\n[...]\nThe Taiwan Fund, Inc.\n[...]\n1810\n[...]\n1811\n[...]\nSimmons First National Corp...\n[...]\n1812\n[...]\n1813\n[...]\n1814\n[...]\n1815\n[...]\n1816\n[...]\n1817\n[...]\n1818\n[...]\n1819\n[...]\n1820\n[...]\nFG Imperii Acquisition Corp.\n[...]\n1821\n[...]\nK2 Capital Acquisition Corp\n[...]\n1822\n[...]\naton Vance Tax\n[...]\n1823\n[...]\n1824\n[...]\n1825\n[...]\n1826\n[...]\nakos Energy Navigation\n[...]\n1827\n[...]\n1828\n[...]\n1829\n[...]\n1830\n[...]\n1831\n[...]\n1832\n[...]\n1833\n[...]\n1834\n[...]\n1835\n[...]\n1836\n[...]\nArtius II Acquisition\n[...]\n1837\n[...]\n1838\n[...]\n1839\n[...]\nBooz Allen Hamilton Holding...\n[...]\n1840\n[...]\nLaunch Two Acquisition Corp\n[...]\n1841\n[...]\nWashington Trust Bancorp, Inc.\n[...]\n1842\n[...]\n1843\n[...]\n1844\n[...]\n1845\n[...]\n1846\n[...]\n1847\n[...]\n1848\n[...]\n1849\n[...]\n1850\n[...]\nEaton Vance Enhanced Equity...\n[...]\n1851\n[...]\n1852\n[...]\n1853\n[...]\n1854\n[...]\n1855\n[...]\n1856\n[...]\nMelar Acquisition Corp. I\n[...]\n1857\n[...]\nWillis Towers Watson Public...\n[...]\n1858\n[...]\nJanus Henderson Group plc\n[...]\n1859\n[...]\nLegato Merger Corp. IV\n[...]\n1860\n[...]\n1861\n[...]\nM Evo Global Acquisition Co...\n[...]\n1862\n[...]\n1863\n[...]\n1864\n[...]\nHCM IV Acquisition Corp.\n[...]\n1865\n[...]\nHall Chadwick Acquisition\n[...]\n1866\n[...]\n1867\n[...]\n1868\n[...]\nMonolithic Power Systems, Inc.\n[...]\n1869\n[...]\n1870\n[...]\n1871\n[...]\n1872\n[...]\n1873\n[...]\n1874\n[...]\nprott Focus Trust,\n[...]\n1875\n[...]\n1876\n[...]\nain Capital GSS\n[...]\n1877\n[...]\nPioneer Acquisition I Corp\n[...]\n1878\n[...]\n1879\n[...]\n1880\n[...]\n1881\n[...]\n1882\n[...]\n1883\n[...]\n1884\n[...]\n1885\n[...]\n1886\n[...]\n1887\n[...]\n1888\n[...]\n1889\n[...]\n1890\n[...]\n1891\n[...]\n1892\n[...]\n1893\n[...]\n1894\n[...]\n1895\n[...]\n1896\n[...]\n1897\n[...]\n1898\n[...]\n1899\n[...]\n1900\n\n---\n\nTitle: The Weekly ETF Market Monitor (May 11-15, 2026) | ETF Central\nURL: https://www.etfcentral.com/news/the-weekly-etf-market-monitor-may-11-15-2026\nPublished: 2026-05-18T11:00:00.000Z\nAuthor: Rony Abboud\nHighlights:\nA comprehensive snapshot of U.S. ETF market activity in Week 20 (May 11-15, 2026), spanning flows, performance, sector and thematic trends, geographic exposures, asset classes, and leading funds and issuers.\n[...]\nAccording to Trackinsight data, Equity ETFs recorded the largest weekly inflows with $43.86 billion, while Fixed Income ETFs gathered $14.90 billion.\n[...]\nCommodity ETFs added $1.22 billion, and Multi-Asset ETFs recorded inflows of $382.51 million. Volatility ETFs gathered $55.81 million over the week.\n[...]\n## Sector ETFs Flows & Performance\n[...]\nIn performance terms, Energy delivered the strongest sector gain with an advance of\n[...]\nStaples rose 0.\n[...]\nand North America Energy Infrastructure rose\n[...]\n## Top ETF Issuers by Net Flows\n[...]\n1. Vanguard: $11.95 billion\n2. iShares: $10.90 billion\n3. Invesco: $10.10 billion\n4. Ark Investment Management: $7.20 billion\n5. Roundhill Investments: $3.65 billion\n6. Schwab ETFs: $1.94 billion\n7. Capital Group: $1.56 billion\n8. State Street Investment Management: $1.39 billion\n9. J.P. Morgan Asset Management: $1.16 billion\n[...]\n10. American Century Investments: $1.13 billion\n[...]\n## Top Performing ETFs of the Week\n[...]\n1. Simplify Multi-QIS Alternative ETF (QIS): 12.22%\n2. United States Oil Fund (USO): 10.11%\n3. USCF Oil Plus Bitcoin Strategy Fund (WTIB): 8.68%\n4. 21Shares Canton Network ETF (TCAN): 8.58%\n5. iPath Bloomberg Energy Subindex Total Return ETN (JJETF): 8.57%\n6. Roundhill Space & Technology ETF (MARS): 8.13%\n7. United States Brent Oil ETF (BNO): 7.92%\n8. Invesco DB Oil Fund ETF (DBO): 7.76%\n9. Tema Space Innovators ETF (NASA): 7.72%\n10. Canary Staked SUI ETF (SUIS): 7.58%\n[...]\n## Most Popular ETFs by Net Flows\n[...]\n1. Invesco QQQ ETF (QQQ): $8.27 billion\n2. ARK Innovation ETF (ARKK): $5.75 billion\n3. Vanguard S&P 500 ETF (VOO): $3.78 billion\n4. Roundhill Memory ETF (DRAM): $3.61 billion\n5. State Street SPDR S&P 500 ETF Trust (SPY): $3.54 billion\n6. iShares Core S&P 500 ETF (IVV): $2.65 billion\n7. Schwab U.S. Large-Cap Growth ETF (SCHG): $2.50 billion\n8. iShares 0-3 Month Treasury Bond ETF (SGOV): $1.62 billion\n9. Invesco NASDAQ 100 ETF (QQQM): $1.46 billion\n10. Vanguard Intermediate-Term Corporate Bond ETF (VCIT): $1.16 billion\n\n---\n\nTitle: Weekly StatSheet For The ETF Tracker Newsletter - Updated Through 05/21/2026 - Ulli... The ETF Bully\nURL: https://theetfbully.com/2026/05/weekly-statsheet-for-the-etf-tracker-newsletter-updated-through-05-21-2026/\nPublished: 2026-05-22T01:30:00.000Z\nAuthor: Ulli\nHighlights:\nWeekly StatSheet For The ETF Tracker Newsletter - Updated Through 05/21/2026 - Ulli... The ETF Bully\n[...]\nETF Data updated through Thursday, May 21, 2026\n[...]\n1. Trend Tracking Indexes (TTIs)\n[...]\nThese are the main indicators that tell you when to buy or sell Domestic and International ETFs (section 1 and 2). They do that by comparing their position to their long-term M/A (Moving Average). If they cross above, and stay there, it\u2019s a green light to buy. If they fall below, and keep going, it\u2019s a red light to sell. And to make sure you don\u2019t lose your shirt if things go south, I also use a 12% trailing stop loss on all positions in these categories.\n[...]\n1. DOMESTIC EQUITY ETFs: BUY\u2014 effective 5/20/2025\n[...]\nThis is our main compass, the Domestic Trend Tracking Index (TTI-green line in the above chart). It has broken above its long-term trend line (red) by +5.98% and remains in \u201cBuy\u201d mode, with our holdings being subject to our trailing sell stops.\n[...]\nThe link below shows all High Volume (HV) Domestic Equity ETFs. They are ranked by M-Index, which is my secret sauce for measuring momentum. Prices in all linked tables below are updated through 05/21/2026, unless otherwise noted. Price data not yet available at publication is indicated with 00.00% or -100.00%. Please note that distributions are not included in the current momentum numbers.\n[...]\nIf the TTI is above the trend line, you can use the tables in the link below to pick your winners:\n[...]\n1. INTERNATIONAL ETFs: BUY \u2014 since 05/07/2025\n[...]\nThis is our global guide, the International Trend Tracking Index (green). It has broken above its long-term trend line (red) by +9.84% and has been in \u201cBuy\u201d mode since 5/7/2025.\n[...]\nThe list in the link below shows the High Volume (HV) International ETFs I track for you during a Buy cycle. They are also ranked by M-Index:\n[...]\nThis is the mother of all lists, showing all ETFs I track and how"
      },
      {
        "enhancement_id": 4,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Cross-model consensus tier-rating extractor",
        "description": "Build tools/ai_tournament/consensus_tier_algorithm.py: for each (asset_class, feature_concept), take median weight across all models in tournament_rating_algorithms. Features with >=2-model consensus seed alpha_engine/score_v3.py.",
        "category": "SCORING",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7+swarm",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "score_v3.py opt-in sidecar shows >=3pp WR lift vs current score_pick.py on 90d closed picks (paired bootstrap p<0.05)",
        "target_release": "2026-08-27",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "DAILY_IDEAS.MD",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# DAILY IDEAS LOG\n\n## 2026-05-13 \u2014 User brainstorm dump (alt-data + asset-class expansion)\n\nCaptured for future swarm rounds + backtests. Each block = candidate prompt for `tools/swarm/swarm_run.py --preset non-opus-4 --critique-first`.\n\n### IDEA-A: Top proven criteria per asset class (20-round research)\n\nRun 20 swarm rounds per asset class harvesting proven academic + practitioner criteria. After research, backtest the criteria, cross-check against existing safety gates / entry criteria. Use Python TA pattern finding (pandas-ta, mplfinance, pyti). Goal: enumerate what actually works per class.\n\nSub-prompts:\n- EQUITY: value stocks (P/E, P/B, EV/EBITDA), long-term patterns, financial-statement deltas, earnings-revision triggers, \"skyrocket\" precursors (insider buy clusters, short-squeeze setups, breakout-on-volume, sector rotation entry).\n- CRYPTO: on-chain whale flows, funding rates, NUPL extremes, dormancy flow, exchange netflow, stablecoin minting velocity.\n- BOND: credit-spread regimes (HYG-LQD, TED), yield-curve shape, real-rate vs inflation expectations.\n- FOREX: interest-rate differentials, BoJ/Fed policy divergence, CoT FOREX section.\n- FUTURES: COT commercial extremes (already wired), seasonality (grain harvest cycles, energy winter draws), term-structure backwardation.\n- ETF: macro-regime overlays (VIX, yield curve, DXY).\n\n### IDEA-B: Penny stocks revisit\n\nExisting repo likely has penny-stock page. Re-validate at <$6 / <$3 / <$2 / <$1 buckets. Per-bucket edge analysis: is sub-$2 universe systematically different from $3-$6 bucket? Find the bucket with the cleanest risk/reward.\n\nSub-prompts:\n- Microcap WR + PF historical by float-size bin\n- Pump-and-dump red flags (premarket spike + dilution filing + zero institutional)\n- Catalyst-driven moves (FDA, merger announce, contract win)\n\n### IDEA-C: Mutual funds (no-load + low-redemption-fee)\n\nUser point: \"we get in and out without being locked in. with mutual funds we would likely pay hefty commission but there are certain mutual funds technically we could buy and hold and get out.\" Filter for no-load / no-12b1 / no-redemption-fee / no-short-term-trading-restriction. Vanguard / Fidelity / Schwab class candidates.\n\nSub-prompts:\n- yfinance fund universe filter for `quoteType=MUTUALFUND` + `expense_ratio < 0.5%` + `front_load=0` + `back_load=0`\n- 5y / 10y Sharpe per-fund ranking\n- Compare to ETF equivalents \u2014 is the fund version worth it?\n\n### IDEA-D: Options data + correlation to underlying\n\nOptions flow (Polygon free tier? CBOE volume data?), put/call ratios, max-pain analysis, dark-pool prints. Correlate option-flow regime to next-week underlying move.\n\nSub-prompts:\n- Put/call ratio extremes as contrarian signal\n- Unusual options activity (UOA) detector \u2014 calls bought above ask in size as bullish lead\n- Max-pain pin theory near OPEX\n\n### IDEA-E: \"Secret patterns\" \u2014 corporate-relationship arbitrage\n\nUser example: vendor known associated with Samsung \u2192 SEC filing or partnership announcement \u2192 trade Samsung-related ETF or supplier stock before broader market notices. Generalize: SEC 8-K + 13D/G filings, EDGAR full-text search for partnership keywords, GovTribe contract awards, USPTO patent assignments, court-docket data (PACER), import/export bills of lading (Panjiva / Import Genius free tiers).\n\nSub-prompts:\n- Detect supplier-relationship announcements via EDGAR 8-K keyword search\n- Patent assignments \u2192 predict M&A or partnership 30-60 days ahead\n- Government contract awards (SAM.gov) \u2192 small-cap winner signals\n\n#### IDEA-E Analysis (2026-05-24 \u2014 2-engine swarm)\n\n**Engines:** DeepSeek V3.2 + Cerebras. Both reviewed the same codebase context (existing , ,  VT Restatement Short,  EDGAR stubs, May 14 swarm scoring at 23/100 rank 7).\n\n**Verdict: 4.5/10 composite \u2014 niche diversification play, not a primary alpha source.** Engines disagreed sharply on feasibility (DeepSeek 2/10 vs Cerebras 7/10), but converged on one point: the full vision (USPTO + SAM + PACER + Panjiva) is over-engineering. MVP-only is the right first step.\n\n| Criterion | DeepSeek | Cerebras | Composite |\n|---|---|---|---|\n| Gap fit | 3/10 (no gap \u2014 Form 4/13D already cover corporate catalysts) | 7/10 (orthogonal gap \u2014 partnership \u2260 insider buy/sell) | **5/10** |\n| Realism / signal count | 2/10 (50-100 actionable/yr from 80K 8-Ks = 0.1%) | 6/10 (4-6/wk true partnerships >00M cap) | **4/10** |\n| Data accessibility | 5/10 (free but noisy; PACER adds 0-50/mo) | 8/10 (EDGAR FTS API + SEC 13D/G + USPTO all zero-cost) | **6.5/10** |\n| Integration feasibility | 4/10 (~400 loc, no entry/exit/backtest framework) | 7/10 (~150 loc MVP, reuse EdgarFtsClient, plug into vt_partner_strategies) | **5.5/10** |\n| Priority vs EDGE_CRITERIA | 1/10 (behind confidence fix, regime audit, FOREX kill) | 4/10 (nice-to-have diversification post-core fixes) | **2.5/10** |\n| **Overall** | **2/10** | **7/10** | **~4.5/10** |\n\n**DeepSeek's core objection (valid):** Partnership announcements are PR, not capital commitment. Insider buys (Form 4) and activist filings (13D) show people putting money where their mouth is. A press release about a \"strategic partnership\" has no skin in the game \u2014 the 95%+ false-positive rate is structural, not fixable with better keyword filters.\n\n**Cerebras's core defense (also valid):** The edge is *speed of dissemination*, not depth of signal. A Samsung-supplier 8-K that moves the supplier stock 3-5% in the first 2 hours is a real phenomenon (documented in academic event-study literature). The question is whether a keyword scanner can beat the market's NLP-parsing latency on a /usr/bin/bash budget. Probably not \u2014 but at ~150 lines and zero new dependencies, it's a cheap experiment.\n\n**Salvageable elements (for future Sprint if priority rises):**\n- **8-K keyword scanner MVP (~80 lines):**  reusing the  pattern from . Query EDGAR 8-K FTS API for  with a 7-day lookback. Regex-filter for company names >00M market cap. Emit  to . Paper-trade for 30 days, measure realized PF.\n- **Discard:** USPTO patent assignment scraper, SAM.gov contract awards, PACER docket monitoring, Panjiva bills of lading \u2014 all require separate scrapers, auth, or paid tiers with unproven signal value. Do not build until the 8-K MVP proves PF>1.2 after transaction costs.\n- **Estimated effort:** 2-4 hours for MVP. Accept/Reject criterion: if 30-day paper-trade PF < 1.0 OR signal count < 10, kill the idea permanently.\n\n**Decision: DEFER \u2014 do not implement now.** Priority is below Sprint 1 (confidence fix + regime audit + FOREX kill) and below higher-scoring ideas (IDEA-A asset-class criteria research at 8/10 from May 14 swarm, IDEA-H Polymarket at 6/10). Revisit only if a future Sprint has slack and the core confidence/regime/FOREX pipeline is stable.\n\n### IDEA-F: Chinese / Hong Kong markets\n\nHSI / SSE / SZSE indices, ADR universe (BABA, JD, BIDU, PDD), KraneShares ETFs (KWEB, KBA, KGRN). Trade A-share-ADR premium/discount as stat-arb. Cross-listed pairs.\n\nSub-prompts:\n- HSI vs SPX correlation regime detection (decoupling phases)\n- China stimulus headlines \u2192 KWEB momentum\n- PBoC liquidity injection schedule as macro tilt\n\n### IDEA-G: Gas-price correlation\n\nNatural gas (NG=F, KOLD/UNG) + gasoline (RB=F) prices \u2194 consumer-discretionary spend, transportation stocks, refiners (XOM, CVX, MPC, VLO). Lag/lead \u2014 does gas price spike predict consumer-staples relative-outperformance?\n\nSub-prompts:\n- WTI/Brent \u2192 consumer staples vs discretionary ratio\n- NG winter draws \u2192 utilities momentum\n- Refinery crack spreads \u2192 refiner-stock alpha\n\n### IDEA-H: Polymarket data correlation\n\nPrediction-market prices (Polymarket, Kalshi, PredictIt) \u2192 equity/macro signal. User caveat: correlation \u2260 causation; investigate hidden factors.\n\nSub-prompts:\n- Election market odds \u2192 small-cap risk-on bias (R) or healthcare bias (D)\n- Geopolitical event markets \u2192 oil/gold spike forecasting\n- Fed-meeting probability markets \u2192 STIR (short-term interest rate) trade\n- Causation check: do Polymarket odds LEAD or LAG the underlying market?\n\n#### IDEA-H Analysis (2026-05-24 \u2014 2-engine swarm)\n\n**Engines:** DeepSeek V3.2 + Cerebras. Both reviewed the full PM infrastructure (8,700+ loc across 11 production files \u2014 , , , , , , , , , , ), quality_gates weights (prediction_market_consensus=14, polymarket_signals=14, pm_whale_signals=10), and the existing  dict in .\n\n**Verdict: 7.5/10 composite \u2014 strong infrastructure leverage, the highest-scoring idea from the May 13 brainstorm so far.** Both engines agreed this is the best candidate among the 12 ideas given the deep existing PM foundation. The key insight: 40% of the code is already written \u2014 IDEA-H is extending the PM engine from crypto-only to equity/macro, not building from scratch.\n\n| Criterion | DeepSeek | Cerebras | Composite |\n|---|---|---|---|\n| Gap fit | 7/10 (strong but domain shift from crypto\u2192equity; 40% infra reuse) | 9/10 (natural extension of existing PM engine) | **8/10** |\n| Realism / signal count | 8-15/wk raw, 35% actionable = 3-5/wk | 4-6/wk clean (odds>70%, vol>50k, trend\u22652h) | **4-6/wk** |\n| Data accessibility | /usr/bin/bash \u2014 Polymarket Gamma + Kalshi + FRED + yfinance, all free | 9/10 \u2014 /usr/bin/bash incremental, all already licensed or free | **9/10** |\n| Integration feasibility | ~570 LOC total (450 new + 120 modified) | ~560 LOC total (pm_macro_overlay.py ~200 loc + lead_lag_analyzer.py ~250 loc + extensions) | **~560 LOC** |\n| Priority vs EDGE_CRITERIA | 6/10 (Sprint 3 \u2014 after core foundation stable via Sprint 2) | 7.5/10 (Sprint 2 candidate, synergizes with symbol-universe audit) | **6.5/10** |\n| **Overall** | **6.8/10** | **8.2/10** | **~7.5/10** |\n\n**Key point of agreement: Fed-rate correlation is the highest-signal entry point.** Both engines independently identified Polymarket Fed-meeting probability markets as the cleanest signal \u2014 they have the most liquidity, the tightest bid-ask spreads, and the most direct mapping to tradable instruments (fed funds futures / STIR). Election and geopolitical ma"
      },
      {
        "enhancement_id": 13,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture",
        "description": "Qwen 2026-05-25 framework: (1) PipelineConfig, (2) ingestion, (3) momentum+macro features, (4) regime detection, (5) signal generation, (6) inverse-vol + capped-Kelly sizing, (7) CVaR-aware portfolio constructor + execution queue. Modular swap-in for any stage. Pairs with the 8-pitfall avoidance + 10-gate deployment checklist. Closes the 'FRED data wired but unused' and 'no CVaR optimiser' gaps.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "XL",
        "status": "BACKLOG",
        "proposed_by": "qwen-code",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "alpha_engine refactored into the 7 modules with explicit stage boundaries; >=2 strategies running through the pipeline within 30 days",
        "target_release": "2026-09-26",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:51:47",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 164,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Retire 5 zombie ML workflows (~40 runs/day, zero consumers)",
        "description": "ml-model-autotraining (trains into nonexistent dirs), ml-battleground-retrain (systems dead since March, <=5.6% honest WR), mercury2-scan (no pick since 03-28), quick-guess-ml (no sink), hierarchical-bayes (no persisted output). Plus system-F 25,669 perpetually-unresolved rows to expire. ML audit 2026-06-12.",
        "category": "SCORING",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-fable-mlaudit",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CI minutes freed; zombie cron count 0; system-F rows expired",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-12 06:40:22",
        "updated_at": "2026-06-12 06:40:22",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 134,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add DB-proven strategy picks section to picks-now.html",
        "description": "picks-now.html currently shows only the yfinance-based quant screener output. A second card row should surface proven strategies from the DB: mega_mutation (T1, PF 2.86, n=204), fear_greed_contrarian (promoted, WR 53%, n=430), and other anti_overfit_registry entries. These would appear as \"DB-Proven\" picks with their strategy name, WR, and n visible.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-sonnet-4-6 2026-06-06",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "DB strategy picks appear on picks-now.html with strategy attribution. Measurable: \u22655 DB strategies shown alongside quant screener results.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 05:58:31",
        "updated_at": "2026-06-06 05:58:31",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 131,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "WR unit inconsistency: money_ready stores decimal, pf_registry stores percent",
        "description": "money_ready_verdict.classes.<CLASS>.wr is a decimal (e.g. CRYPTO=0.3613). pf_registry.by_asset_class_policy_clean_net[<CLASS>].win_rate_pct is a percent (e.g. CRYPTO=36.129). Consumers reading the wrong field show off-by-100x WR. Either unify (rename one, add converter, or expose both with explicit units) or document the convention.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7 /loop-1h",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "All audit JSON files use either 'wr' (decimal 0-1) OR 'win_rate_pct' (0-100) consistently. Either a converter helper in dashboard_generator.py, or a schema linter test fails CI on mixed units.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 05:48:39",
        "updated_at": "2026-06-05 05:48:39",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 128,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Hard n>=100 minimum check before any promotion_gate evaluates \u2014 prevent premature promotion",
        "description": null,
        "category": "OTHER",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Swarm review 2026-06-05 flagged tournament_shadow_book.py (n=25) risk: 'someone treats n=25 as validated and promotes prematurely.' Add a guard at the top of alpha_engine/verified_promotion_gate.py: if state.rolling_30d_n_closed < 100, force promotion_status='INSUFFICIENT_N' regardless of WR/PF. Prevents bypass via small-sample windows. Both DeepSeek and xAI in 4-engine swarm independently flagged this same risk.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 04:59:00",
        "updated_at": "2026-06-05 04:59:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 120,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Auto-bias-scrutiny on every WR>60% cell via mlflow_bias_detector \u2014 wire to incidents page",
        "description": null,
        "category": "OTHER",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Every new persona x class cell that crosses WR>60% gets a bias_score computed and logged to mlflow.db. Composite bias_score>0.5 auto-files an enhancement (or incident if >0.7) so operator sees the warning before any trade decision. Wire to incidents-enhancements-nightly.yml workflow. Reference: tools/mlflow_bias_detector.py shipped 2026-06-04 23:30 EDT (cta_trend x COMMODITY 86.7% WR caught as WINDOW_ARTIFACT bias_score=0.53).",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 00:52:00",
        "updated_at": "2026-06-05 00:52:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 113,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "FOREX direction asymmetry: LONG 61.7% WR vs SHORT 42.8% \u2014 opposite of CRYPTO (LONG bad)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Down-weight SHORT FOREX submissions in tournament; if SHORT FOREX baseline weights remove, expect tournament FOREX PF lift from 0.62 to >0.9",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 10:22:52",
        "updated_at": "2026-06-04 10:22:52",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 112,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Normalize trading_picks.category case-mess (stock/stocks/equity, penny/pennystock)",
        "description": null,
        "category": "OTHER",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": null,
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "DISTINCT category count drops from 14 to 8 canonical values (crypto/equity/etf/forex/commodity/bond/futures/penny). 669 misclassified rows reclassed.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 09:53:00",
        "updated_at": "2026-06-04 09:53:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 109,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE4_2026-06-03_CLAUDE_OPUS_4_7.MD",
        "title": "Category-taxonomy normalization: collapse stock/stocks/penny/pennystock to EQUITY + symbol-pattern auto-tag for NULL/UNKNOWN",
        "description": "Category-taxonomy normalization: collapse stock/stocks/penny/pennystock to EQUITY + symbol-pattern auto-tag for NULL/UNKNOWN",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"source\": \"EAGLE_JUNE2 \u00a77.1 #4 + parallel-agent live DB verification\", \"phase_1\": \"Backfill SQL update (collapse case-mess + obvious aliases)\", \"phase_2\": \"Source-side normalization in pick emitters\", \"phase_3\": \"MySQL UNIQUE constraint on (LOWER(category)) enum: CRYPTO/EQUITY/ETF/FOREX/COMMODITY/BOND/FUTURES/PENNY/UNKNOWN\", \"estimated_affected_rows\": 989}",
        "success_metric": "All trading_picks rows have category in canonical uppercase enum set",
        "target_release": "this sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-03 01:50:48",
        "updated_at": "2026-06-03 01:50:48",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 98,
        "asset_class": "FX",
        "source_ref": null,
        "title": "FX USD Momentum strategy (B-Tier on USDJPY, Sharpe 2.02)",
        "description": "Captures USD regime shifts across major pairs. B-Tier on USDJPY (Sharpe 2.02, +130%), C-Tier on EURUSD/GBPUSD.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF >= 1.2 on 20 live picks",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "EAGLE_SWARM_SYNTHESIS_2026-06-02.MD",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 99,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Non-interactive CLI wrapper (tools/agent_run.sh)",
        "description": "Agents can now run verify, monitor, mutation, deploy, eagle, litellm, swarm, consult without human babysitting. Auto-injects --yes for tools that support it.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Agents complete CLI tasks without human intervention",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "main f5bf5a7d9",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "",
        "link_url": "",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 105,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2 Quant Review HTML page with ELI5 explanations",
        "description": "Full HTML report at updates/eagle2-quant-review-2026-06-02.html. Root causes, best picks, walk-forward validated strategies, short/long-term plans.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "mimo-v2.5-pro",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "main f5bf5a7d9",
        "created_at": "2026-06-02 14:36:14",
        "updated_at": "2026-06-02 14:36:14",
        "implemented_at": null,
        "link_md_path": "",
        "link_url": "https://findtorontoevents.ca/updates/eagle2-quant-review-2026-06-02.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 94,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "PR #457 OPEN: resolver health forward_test_tag_awareness fix + idempotent DB ALTER helper",
        "description": "PR #457 OPEN: resolver health forward_test_tag_awareness fix + idempotent DB ALTER helper",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"fix\": \"forward_test_tag query was running after conn.close() -> false YELLOW. Moved before conn.close.\", \"files\": [\"tools/check_resolver_health.py\", \"tools/ensure_forward_test_outcome_columns.py\"], \"source\": \"cursor session 2026-06-02\", \"open_pr\": 457, \"alter_state\": \"at_pick_outcomes forward_test columns already on prod (verified --execute returned OK)\", \"current_outcome_count\": 38787}",
        "success_metric": "Resolver health forward_test_tag_awareness GREEN on prod after merge",
        "target_release": "this sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:25:00",
        "updated_at": "2026-06-02 14:25:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 88,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE2-session-2026-06-02",
        "title": "DSR n_trials from hypothesis_registry.json",
        "description": "Deflated Sharpe Ratio n_trials must reflect actual strategy variants tested. Load from hypothesis_registry.json with conservative floor of 500.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "kilo-mimo-free",
        "related_persona_id": null,
        "proposed_features": "[\"_load_real_n_trials()\", \"fallback to 500\"]",
        "success_metric": "DSR correctly penalizes for multiple testing",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "#452",
        "created_at": "2026-06-02 14:18:38",
        "updated_at": "2026-06-02 14:18:38",
        "implemented_at": null,
        "link_md_path": "alpha_engine/rigorous_backtest_harness.py",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Fixed in rigorous_backtest_harness.py."
      },
      {
        "enhancement_id": 75,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Compute CAGR + Sortino in compute_metrics (currently null on portfolio drill pages)",
        "description": "Compute CAGR + Sortino in compute_metrics (currently null on portfolio drill pages)",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"file\": \"tools/portfolios/run_daily.py:330-369\", \"missing_columns\": [\"cagr\", \"sortino_30d\"], \"db_columns_exist\": true}",
        "success_metric": "CAGR + SORTINO 30D cells on pf.html populate with numbers instead of '-'",
        "target_release": "next sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 31,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Verify kimi_signal_tracking + aggregated_picks 6-day source-system claims",
        "description": "Roo's session reports: kimi_signal_tracking 168 picks WR 53.6% +257.34% (best source by total PnL); aggregated_picks 58 picks WR 74.1% +111.02% (underpowered but interesting). Run the same per-source rollup over a longer window (30d/90d) to test if these are persistent edges or 6-day noise. Apply the same dedup/policy/single-source-concentration checks that killed the COMMODITY claim.",
        "category": "",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Per-source 30d/90d WR/PF confirmed with dedup + concentration flag; advancement-or-rejection documented",
        "target_release": "2026-07-13",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:32",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_multi_ai_panel_meta_review.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Multi-AI Panel Meta-Review \u2014 2026-05-25\n\n**TL;DR:** Two parallel multi-AI panels reached **opposite verdicts on the same COMMODITY question.** The difference was prompt grounding, not model capability. A 5-engine NVIDIA NIM panel (working from pre-dedup numbers) called COMMODITY the system's #1 alpha; a 3-engine codex/grok/gemini panel (shown the same numbers PLUS the leakage signals) classified it `DATA_QUALITY_LEAKAGE` at ~90% confidence. **Independent in-house verification confirmed the leakage panel.** This is the most important lesson of the session: multi-AI consensus is only as good as the prompt grounding.\n\n---\n\n## The two panels\n\n### Panel A \u2014 NVIDIA NIM 5-model (DeepSeek/Roo session, 2026-05-25)\n\nEngines: Kimi K2.6, GPT-OSS-120B, GLM-5.1, Nemotron Super 49B, Mistral Nemotron.\nPrompt: per-class WR/PF/Sharpe + 7d/30d/90d windows, **without** leakage signals or dedup history.\nVerdict: **5/5 agreed COMMODITY is #1 alpha, allocate 20-30%.**\nReport: [`reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`](2026-05-25_asset_class_edge_audit_deepseek_session.md) (Roo's audit).\n\n### Panel B \u2014 Codex / Grok / Gemini (this session, also 2026-05-25)\n\nEngines: OpenAI Codex, xAI Grok, Google Gemini.\nPrompt: same JSON cell **PLUS** the leakage concerns (single-symbol concentration, train_pf vs holdout_pf discontinuity, source-system mechanics, prior 2026-05-16 autopsy).\nVerdict: **3/3 agreed `DATA_QUALITY_LEAKAGE`, ~90% confidence**, recognized as residue from already-rejected H-001 (CFTC COT publication-lag look-ahead, REJECTED 2026-05-20 under M-095).\nReports: [`reports/2026-05-25_commodity_cot_edge_triangulation.md`](2026-05-25_commodity_cot_edge_triangulation.md) + per-engine consult files.\n\n---\n\n## In-house ground-truth verification\n\nThree independent investigations (committed `28d221116` / `406661cf9` / `a93dec2af`) confirmed Panel B:\n\n1. **DB trade-level forensics:** 87.6% (120/137) of the headline cell is one symbol (CT=F cotton); other 17 trades are wheat/soybean losses. 136 of 137 trades fall in the last 30 days, 0 in 60-90d. Mean win is +0.0255%/trade via PRICE_RESOLVED intraday drift \u2014 realistic CT=F round-trip cost (~2-4 bp) wipes the edge. Effective independent Bonferroni tests \u2248 7, not 200 (25 cells share identical trade-id sets).\n2. **Filter pipeline tracing:** `top_edges.py` runs no dedup; the same source/cell collapsed PF 20.54 \u2192 0.17 after 72h COT dedup in a 2026-05-16 swarm autopsy (cited in `quality_gates.py:5575-5581`).\n3. **Merged-cohort `build_pf_registry` rerun** (the new MySQL flag `PF_REGISTRY_INCLUDE_DB=1` from `a93dec2af`): COMMODITY by_asset_class_policy_clean_net PF moves from 0.18 \u2192 **0.937** when DB is merged \u2014 well under T2's 1.5 bar, matching Panel B's prediction range of 0.3-1.0.\n\n**The \"edge\" was already known-bad as of 2026-05-20.** Panel A reconstituted it from ungrounded numbers.\n\n---\n\n## What Panel A got right anyway\n\nRoo's session surfaced one striking finding that does NOT depend on the COMMODITY cell and is worth following up:\n\n> **648 un-gated picks went 0-for-648 over the 6-day window (2026-05-16 \u2192 21), destroying \u2212825% PnL.**\n> - `moderate_confidence`: 455 picks, 0.0% WR, \u22121.47%/pick avg\n> - `low_confidence`: 193 picks, 0.0% WR, \u22120.82%/pick avg\n> - Meanwhile 300 gated picks (elite_a + profitable_tp) generated +994%.\n\nIf real, this is the single most powerful filter in the system \u2014 gating alone would flip aggregate PnL from \u2212825% to +994% on the same emission. **But** the same scientific standard that debunked COMMODITY applies here:\n\n- 0-for-455 on `moderate_confidence` is statistically implausible (p \u2248 0.5^455) on *honest* trades; the bucket may be **defined by what falls through all gates**, i.e., circular by construction.\n- Need to verify whether the live system actually allocates capital to those buckets or just labels them \u2014 if they're already filtered upstream, \"gate them\" is a no-op.\n\n**Action queued (NOT yet executed):** drop a verification agent on the quality-tier definition + verify the 0-for-648 claim against `audit_dashboard/data/dashboard_data.json::picks.recent_closed` filtered to 2026-05-16..21.\n\nRoo also re-confirmed (in agreement with the .md sweep this session):\n- `regime_adaptive \u00d7 ETF` is the only persona\u00d7asset pair passing all statistical gates (Wilson CI 49.7\u201391.8%).\n- `kimi_signal_tracking` is the top source-system by total PnL over the 6-day window (168 picks, WR 53.6%, +257.34%).\n- `aggregated_picks` shows 74.1% WR at n=58 \u2014 interesting but underpowered for Bonferroni.\n\nThese three findings deserve verification with the same rigor that killed the COMMODITY claim.\n\n---\n\n## Lessons\n\n1. **Prompt grounding is the variable, not model count.** Both panels used reputable models. The 5-engine panel reached a wrong consensus because it never saw the leakage evidence. Future multi-AI consults must include all known leakage signals + a sentence: *\"Be skeptical; if the data suggests one symbol/source dominates, flag concentration risk.\"*\n2. **Multi-AI consensus does not increase signal-to-noise on ungrounded prompts.** It compounds whatever bias is in the prompt by averaging plausible-sounding fabrications.\n3. **The H-001 rejection on 2026-05-20 was real progress** \u2014 the system *had* this lesson on file. It just didn't propagate to Panel A's prompt context. The fix is operational, not statistical: when running `consult-nvidia-models` or `consult-cloudflare-models`, mandate inclusion of `reports/hypothesis_registry.json` rejected-hypothesis entries that intersect the prompt's asset class.\n4. **The `build_pf_registry` MySQL extension (`a93dec2af`) is the load-bearing infrastructure fix here.** It collapsed two divergent cohorts (top_edges raw n=1219 vs verdict policy-clean n=28) into one dedup+policy+NET pipeline. Future \"edge claims\" can be A/B'd against the merged cohort by toggling `PF_REGISTRY_INCLUDE_DB=1`.\n\n---\n\n## Action list\n\n| # | Action | Owner | Status |\n|---|---|---|---|\n| 1 | Save Roo's session report to canonical `reports/` path | session | DONE \u2014 `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md` |\n| 2 | Write this meta-review reconciling the two panels | session | DONE \u2014 this file |\n| 3 | Add an `updates/index.html` card | session | DONE \u2014 same commit |\n| 4 | Add incident \"Multi-AI panel grounding failure\" + 2 enhancements to seed_incidents_enhancements.py | session | DONE \u2014 same commit |\n| 5 | Verify the 0-for-648 quality-gate claim against raw DB cohort | follow-up agent | OPEN |\n| 6 | Verify `regime_adaptive \u00d7 ETF` Wilson CI 49.7-91.8% claim | follow-up agent | OPEN |\n| 7 | Verify `kimi_signal_tracking` / `aggregated_picks` per-source claims | follow-up agent | OPEN |\n| 8 | Update CLAUDE.md guardrail to require leakage-context in multi-AI prompts | session | OPEN |\n\n---\n\n## Related artifacts\n\n- Roo's original report: `audit_reports/ASSET_CLASS_EDGE_AUDIT_2026-05-25.md` and the canonical copy at `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`\n- Codex/Grok/Gemini panel synthesis: `reports/2026-05-25_commodity_cot_edge_triangulation.md`\n- Per-engine consult files: `reports/2026-05-25_commodity_cot_edge_consult_{codex,gemini,grok}.md`\n- DB-level forensics: `reports/2026-05-25_commodity_cot_edge_deep_dive.md`\n- Filter-pipeline tracing: `reports/2026-05-25_policy_clean_vs_top_edges_funnel.md`\n- Pre-registered hypothesis H-101 with kill criteria: `reports/hypothesis_registry.json`\n- MySQL registry extension: `tools/build_pf_registry.py` (gated by `PF_REGISTRY_INCLUDE_DB=1`)"
      },
      {
        "enhancement_id": 18,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Continuous realized-vs-predicted vol telemetry tracker (framework pitfall #6)",
        "description": "When ex-ante vol estimate is too optimistic (predicted 8% vs realised 14%), position sizes are too large and drawdowns blow through risk budget. Need a daily job that logs predicted vs realised vol per asset class and auto-widens sizing buffers when realised > predicted for N consecutive days.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "qwen-code+framework-review",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Daily JSON sidecar audit_dashboard/data/vol_calibration.json with per-class predicted/realised series; >=3pp DD reduction when buffer-widening trigger fires",
        "target_release": "2026-07-13",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:54:43",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 2,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Add signal_time field to smart_picks_feed payload",
        "description": "One-line addition in dashboard_generator.py. Stops the 'all picks show 1.4h ago' misleading display.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Smart Picks rows display per-pick ages spanning the actual pick lifetime (not all same value)",
        "target_release": "2026-07-13",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_audit_ui_edge_audit.md",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": null,
        "enhancement_plan": "# findtorontoevents.ca/audit \u2014 UI / Edge / Freshness Audit\n**Date:** 2026-05-25 03:30 UTC  \u00b7  **Author:** Claude Opus 4.7  \u00b7  **Source:** live DB + live `dashboard_data.json` HEAD fetch + template.html / hc_filter.js source review\n\n## TL;DR\n\n| Surface | Verdict | Severity |\n|---|---|---|\n| **HIGH CONVICTION overlay** (CRYPTO 60.3% / EQUITY 68.1% cited) | **Unreproducible** \u2014 the cited closed-book stats can't be recomputed from the live `trading_picks` table because `trust_score` is NULL on 38,884 of 38,889 closed picks (99.99%) | P0 |\n| **Smart Picks \"Signal Time EST 1.4h ago\"** | **Misleading display** \u2014 every row shows the same age because it's the dashboard-JSON age, not the per-pick signal age. `signal_time` field is absent from `smart_picks_feed`; UI falls back to `age_hours` (= file-build age) | P1 |\n| **Swarm Picks section** | **Effectively abandoned** \u2014 data file last regenerated 2026-05-24 04:34 UTC, newest pick inside is dated **2026-05-12** (13 days old). Workflow `swarm-pick-review.yml` runs daily but no longer produces new picks | P1 |\n| **US Equity Picks (UEPS) tab** | **No live edge** \u2014 page itself says \"Building track record \u2014 n=0/100\"; sample picks shown are demo / sample | P2 |\n| **Smart Picks button vs Smart Picks tab** | Two different things; the button is a filter on Active Picks, the tab is a curated feed. Not a bug, but easily confused | P3 |\n\n---\n\n## 1. HIGH CONVICTION overlay (the \"\ud83d\udd25 HIGH CONVICTION FILTERS APPLIED\" panel)\n\nLive DB query just now (`mysql.50webs.com / ejaguiar1_stocks`, table `trading_picks`):\n\n```\nScore / trust population on CLOSED picks (n=38,889 total):\n  closed_with_elite_score    27,859    (71.6%)\n  closed_with_trust_score         5    (0.013%)\n  closed_score_ge_55          4,216\n  closed_trust_ge_4               0    \u2190 the HC gate requires this\n```\n\nActive picks:\n```\nCategory       n_active   pass HC (s>=55,t>=4)\ncrypto         4,897      1     \u2190 yes, ONE pick\nforex          1,387      0\ncommodity      1,302      0\n(null)           951      0\nequity           534      0\n```\n\n\u2192 The HC overlay as currently configured is effectively a kill switch \u2014 only one active pick passes today.\n\n**The cited closed-book stats:**\n- `CRYPTO: WR 60.3% on N=562 (+9.7pp lift)` \u2014 **unreproducible**. The 562 closed-with-trust-and-score-gates doesn't exist; there are 5 closed picks total with a non-NULL trust_score.\n- `EQUITY: WR 68.1% on N=72 (+29.0pp lift)` \u2014 same problem.\n- `FOREX: WR 55.0% n=309` \u2014 current DB shows 1,666 closed FOREX picks at WR 43.9% (the bigger n makes the older \"55%\" look like a small-window cherry-pick). 5 rows have `pnl_pct < -100%` including one at **\u2212106,700%** \u2014 unit-clamp commit #876 missed them. Drags FOREX avg to \u22128% and makes PF round to 0.00.\n- `COMMODITY: WR 5% / PF 0.12 (n=20 post-dedup)` \u2014 current full-baseline is 674 closed picks at WR 40.5% / PF 0.97. The \"n=20 post-dedup\" was a specific filtered slice; that exact slice now returns 0 matches.\n\n**Fix paths (pick one):**\n1. Backfill `trust_score` on the 38,884 closed picks that don't have it (preferred \u2014 would let the HC overlay actually work on historical data).\n2. Move HC gate from `pick.trust_score` to a field that IS populated (e.g., `elite_score` or strategy-level derived TRUST tier from a JOIN).\n3. Mark the HC overlay UNVERIFIABLE on the UI until #1 lands, and remove the cited WR claims until they can be recomputed live.\n\n## 2. Smart Picks \"Signal Time EST\" freshness\n\n**Live HTTP HEAD** on `https://findtorontoevents.ca/audit/data/dashboard_data.json`:\n- `Last-Modified: Mon, 25 May 2026 02:03:55 GMT` (just under 1.5h before my check)\n- `generated_at: 2026-05-25T01:55:35.704580+00:00`\n- Size: 22.8 MB\n\n**Field presence** (counted in first 2 MB of the live JSON):\n- `\"signal_time\"` occurrences: **0**\n- `\"age_hours\"` occurrences: **362**\n- `\"created_at\"` occurrences: 0\n\n**Template logic** [audit_dashboard/template.html#L12583-L12589](audit_dashboard/template.html):\n```javascript\nif (p.signal_time || p.timestamp || p.generated_at) {\n  signalTime = ...formatted...\n} else {\n  signalTime = (p.age_hours || 0).toFixed(1) + 'h ago';   \u2190 FALLBACK\n}\n```\n\n\u2192 **Because `signal_time` is missing on every Smart Picks pick, every row falls through to `age_hours` \u2014 which is computed at file-build time.** So `\"1.4h ago\"` means the *file* is 1.4h old, NOT that the *pick* fired 1.4h ago. A pick that's been open for 5 days will still display \"1.4h ago\" because the dashboard JSON was rebuilt 1.4h ago.\n\n**Fix:** populate `signal_time` (= `created_at` from `trading_picks`) into the `smart_picks_feed` payload in `audit_trail/dashboard_generator.py`. One-line addition where the smart_picks_feed is built.\n\n## 3. Swarm Picks section\n\n**Data source:** `audit_dashboard/data/swarm_picks.json` (60 KB, 38 picks)\n**Last file modification:** 2026-05-24 04:34 UTC (~23 hours ago)\n**Newest pick inside file:** `created_at = 2026-05-12T16:02:00\u221205:00` (**13 days old**)\n**Oldest pick:** 2026-05-11T22:00:00\u221205:00\n\n**Workflow:** `.github/workflows/swarm-pick-review.yml` \u2014 `cron: \"0 3 * * *\"` (daily at 03:00 UTC). It runs but emits no new picks (only resolves/refreshes the existing 38).\n\n**Comparison to ai-tournament:** different system entirely.\n- **Swarm Picks** = multi-model TradingView paper-trade captures (38 historical picks frozen May 11-12), graded by consensus tier (unanimous / strong / moderate / single / control). One-time backfill; nightly job only resolves existing picks, doesn't add new ones.\n- **AI Tournament** (`/audit/ai-tournament.html`) = live forward-test of 10+ models submitting daily picks via `tools/ai_tournament/generate_picks_fleet.py`. Active, growing \u2014 1,490 picks today, +20 today from Grok HEAVY submission.\n\n\u2192 Swarm Picks is **abandoned** in the sense that no new picks have entered for 13 days. The nightly workflow exists but appears to no longer generate fresh swarm consensus. Recommend either (a) revive the multi_model_pick_gen.py pipeline so new picks flow in, or (b) deprecate the Swarm Picks tab on /audit and redirect to ai-tournament.html.\n\n## 4. US Equity Picks (UEPS) tab\n\nThe tab title literally says \"Building track record (n=0/100)\". The screenshot picks (ADBE, PYPL, QCOM with F-Score 7-8, Altman Z scores) are demo/sample data from `HEDGE_FUND_GAP_ANALYSIS_2026-05-24.md` \u2014 they are not in `trading_picks`. **No edge can be claimed** until real picks flow through. The composite (Magic Formula \u00d7 Piotroski \u00d7 Acquirer's Multiple \u00d7 SafetyGate) is documented but doesn't have a live writer yet.\n\n## 5. \"Smart Picks button\" vs \"Smart Picks tab\" \u2014 UX confusion\n\n[audit_dashboard/template.html#L1306](audit_dashboard/template.html) is the **button** `\ud83e\udde0 SMART PICKS` \u2014 it filters the Active Picks table by intersecting against the live `smart_picks_feed`. Its own tooltip already admits: \"Closed-pick analysis shows the underlying confluence/score fields are missing from most historical records, so the Smart Picks filter cannot be verified as an edge on closed data. Use it as a live signal overlay, not as a standalone edge filter.\"\n\n[audit_dashboard/template.html#L1358](audit_dashboard/template.html) is the **tab** `\ud83e\udde0 Smart Picks` \u2014 opens the curated panel that reads `smart_picks_feed` directly with its own asset-class filter buttons (All / Crypto / Equity / Forex / Commodity / Futures / ETF).\n\nBoth consume the same JSON; the difference is overlay-vs-direct-view. The button's own tooltip is the most honest line on the page: **Smart Picks is a live signal overlay, not a verified-edge filter.**\n\n## 6. Cross-cutting baseline stats (where the real edge actually is \u2014 or isn't)\n\n```\nBASELINE 90d / ALL closed (from trading_picks, no gates applied):\n  class        n      wr%     PF    avg_pnl%\n  commodity   674    40.5    0.97    -0.00\n  crypto    4,494    44.7    0.97    -0.04\n  equity       30    60.0    0.76    -0.39    \u2190 n too small\n  etf          14    28.6    0.20    -1.26    \u2190 n too small + losing\n  forex     1,666    43.9    0.00   -69.74    \u2190 outlier-distorted\n  futures      18    11.1    0.16    -0.05    \u2190 critical\n  meme         66    31.8    0.41    -1.85\n```\n\n**Reality check vs the page's headline tiles:**\n- CRYPTO headline \"PF 1.25 / WR 44.6% / n=8067\" \u2192 recent live closed-book is **PF 0.97 / WR 44.7% / n=4,494**. Headline is using a longer-history aggregate; the recent panel is honest.\n- The \"SUPREME EDGE 2026-05-12\" callout for COMMODITY `cot_positioning` (n=104, WR 86.5%, Sharpe +1.377) returns 0 matching rows from `WHERE strategy LIKE 'cot%'` today \u2014 the strategy may have been renamed or the cot rows are in a different table. **Worth verifying before quoting this on the page.**\n\n## 7. \"If you bought Smart Picks at entry, would you be profitable?\" \u2014 partial answer\n\nI cannot fully simulate this in one turn because the full `smart_picks_feed` payload (entry + current_price per pick) lives at the bottom of the 22.8 MB dashboard JSON and would need a large fetch + per-symbol price re-marking. **What I can say from what I sampled:**\n- `age_hours` shows 362 picks in the feed\n- They lack `signal_time` so we can't trust \"1.4h ago\" \u2014 most are likely older\n- Aggregate CRYPTO baseline 90d closed = WR 44.7% / PF 0.97 \u2192 on equal-weight basis you would be **break-even to slightly losing** before fees if you treated every Smart Pick as a closed-out trade\n\nTo do this properly: fetch the full `smart_picks_feed`, re-mark every OPEN pick with `current_price` from yfinance, compute unrealised + realised P&L, weight by position size. Estimated 30-45 min of agent time. **Recommend spawning a follow-up subagent if you want a hard number.**\n\n---\n\n## Action items (ranked)\n\n| # | Pri | Action | Cost |\n|---|---|---|---|\n| 1 | **P0** | Backfill `trust_score` on closed picks OR rewrite HC gate to use a populated field. Page is currently citing stats that can't be reproduced. | M |\n| 2 | **P0** | Re-clamp 5 FOREX rows with `pnl_pct < -100%`. One-line `UPDATE trading_picks SET pnl_pct = -100 WHERE pnl_pct < -100`. | S |\n| 3 | **P1** | Add `signal_t"
      },
      {
        "enhancement_id": 162,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Per-class reward:risk floor as a uniform admission gate",
        "description": "A per-class R:R floor table + gate ordering is fully specified in reports/peer_claude-topic_rr-floor_kimi_2026-05-31.md but is not enforced as a uniform admission gate. Sub-1.0 R:R geometry (e.g. bollinger_squeeze WR 52.9%/PF 0.10) passes emission today. Complements the entry-conditioning lane.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "kimi-k2.6-peer",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Emissions below the class R:R floor are blocked/shadow-tagged; PF-killing geometry stops reaching sized books",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-10 18:24:37",
        "updated_at": "2026-06-10 18:24:37",
        "implemented_at": null,
        "link_md_path": "reports/kimi_insights_sweep_2026-06-10.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 156,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Bootstrap confidence intervals + p-values on all dashboard WR figures",
        "description": "Replace point-estimate WR with WR + 95% CI + p-value (bootstrap/Monte Carlo). Prevents tiny-n tiles (S-Tier n=16, 100%) reading as real edge. Per Zoo Quant review.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "zoo + claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Every headline WR shows CI; n<30 flagged",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 05:10:13",
        "updated_at": "2026-06-09 05:10:13",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 153,
        "asset_class": "CRYPTO",
        "source_ref": "OBS_FINDING_JUNE8 save-the-system",
        "title": "Wire TSMOM vol-scaled across NON-crypto classes (equity/forex/commodity/bond) after intrabar resolver fix",
        "description": "Academic sleeve exists (tsmom_strategy.py + cta_bridge.py) but dormant. Exits on trailing stop/signal-flip \u2014 structurally fixes TIME_EXPIRED trap. Wire-Up Rule: no production caller today.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "cursor-agent 2026-06-09 save-the-system audit",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward PF>1.3 on clean cohort n>=100",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:08:04",
        "updated_at": "2026-06-09 04:23:03",
        "implemented_at": null,
        "link_md_path": "reports/OBS_FINDING_JUNE8.MD",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "CRYPTO leg IMPLEMENTED 2026-06-09 (ENHANCEMENT_CRYPTO id=11, commit 42e403e79d, paper-pilot). This row now tracks ONLY the non-crypto extension, still pending the intrabar resolver fix. "
      },
      {
        "enhancement_id": 150,
        "asset_class": "OVERALL",
        "source_ref": "edge_validation_roadmap 2026-06-09",
        "title": "SAVE-5: ROI dashboard + 6-month kill switch on paid AI spend",
        "description": "Build /audit/roi_dashboard.html: recurring AI-provider spend vs cumulative live P&L, cost per validated edge, break-even timeline. Kill criterion: if no gate-passing live strategy after 6 months, halt paid API spend and pivot. Protects against sunk-cost. (Do NOT name credential files publicly.)",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (save-the-system roadmap 2026-06-09)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "roi_dashboard.html live with spend-vs-PnL + documented kill criteria.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 03:06:16",
        "updated_at": "2026-06-09 03:06:16",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/edge_validation_roadmap.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 144,
        "asset_class": "BOND",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Wire carry + roll-down across BOND/COMMODITY/FX (the diversifier sleeve)",
        "description": "Koijen-Moskowitz-Pedersen-Vrugt (2018) Carry: model-free, low-turnover, ~0.6-0.8 Sharpe/class, low correlation to momentum. bond_strategy_harness.py (carry+roll-down, bootstrap Sharpe, BH-FDR, walk-forward, Sharpe ~0.68) is fully built with ZERO production callers; commodity_basis_carry.py coded. Bond/commodity basis computable now from FRED yields + SMA roll-yield proxy.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "bond/commodity carry sleeve wired with >=1 production caller; forward-tracked.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 13:33:04",
        "updated_at": "2026-06-06 13:33:04",
        "implemented_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 145,
        "asset_class": "ETF",
        "source_ref": "per-class edge audit wxdjdjztu",
        "title": "Switch ETF/BOND emitters to monthly-rebalance / signal-flip exits (not few-day TP timers)",
        "description": "Faber 10-month-MA and Antonacci GEM dual-momentum are long-horizon by design; a few-day expiry timer guarantees ~0 wins (ETF 144/145 expired within +/-3%, etf_faber_tactical 16/16 expired). Re-wire to price-vs-200d-MA / 12-1 momentum-flip exit or >=20-trading-day min hold.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (per-class edge workflow wxdjdjztu 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "ETF/BOND picks use long-horizon exits; expiry rate <30%.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 13:33:04",
        "updated_at": "2026-06-06 13:33:04",
        "implemented_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 140,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Add forward-tracking outcome panel for picks_now_tracker so the page proves itself",
        "description": "picks_now_tracker has exit_price/exit_pnl_pct/exit_reason/resolved_at columns but the page never shows realized outcomes of prior picks-now batches. To become a trustworthy 'what to buy now' surface it should display its OWN forward track record (how did last week's picks-now calls do), which is the only honest WR \u2014 independent of the contaminated at_pick_outcomes overlay.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.95, \"review_evidence\": \"picks_now_tracker schema includes exit_price/exit_pnl_pct/exit_reason/resolved_at (DESCRIBE picks_now_tracker); page shows none of it. 96 rows logged 04:53-07:04 today.\", \"verify_evidence\": \"DESCRIBE picks_now_tracker confirms columns exit_price, exit_pnl_pct, exit_reason, resolved_at exist. DB: COUNT=96 rows all generated today 2026-06-06 04:53:49 to 07:04:21 (matches claimed \\\"96 rows logged 04:53-07:04 today\\\"); SUM(resolved_at IS NOT NULL)=0; GROUP BY exit_reason = all NULL (96). So the forward-outcome columns are 100% unpopulated. Page audit_dashboard/picks-now.html (1061 lines): renders only the current snapshot via fetch('data/picks_now.json') (line 1053); no grep hit for exit_pnl/exit_price/exit_reason/resolved_at anywhere in the page. The only WR/outcome surfaces are (a) the at_pick_outcomes DB overlay \u2014 line 144 \\\"DB Edge Overlay ... at_pick_outcomes (39,880 closed trades)\\\", line 791 footer \u2014 which is exactly the contaminated overlay the claim distinguishes from, and (b) the AI Tournament table (lines 733-738, \\\"Forward-tested picks, n=43-89 resolved per model\\\") which is the tournament models' record, NOT picks_now_tracker's own. Line 175 explicitly states picks are \\\"logged to picks_now_tracker for tracking\\\" but the page never reads back resolved rows. No resolver exists: only tools/save_picks_to_db.py and tools/picks_now_professional.py reference the table; save_picks_to_db.py only INSERTs (the \\\"exit\\\" grep hit was Python exit(0), not the column); no \\\"UPDATE picks_now_tracker ... exit\\\" / resolve logic anywhere \u2014 consistent with 0/96 resolved.\"}",
        "success_metric": "Add a 'Our picks-now track record (forward)' section computed from resolved picks_now_tracker rows, with a resolver that honors intrabar fills and counts EXPIRED honestly. This is the metric a quant would actually trust.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:01",
        "updated_at": "2026-06-06 07:34:01",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 137,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Per-asset-class breakdown is absent from the ranked leaderboard (only an aggregate per model)",
        "description": "The leaderboard ranks models on a single blended cohort across up to 8 asset classes. A model could be T1-shaped purely on a few lucky CRYPTO picks while being negative on EQUITY/FOREX. The COMMODITY row in the static lower table is still 'TBD/TBD' (template line 449). Per the project's per-asset-class charter, the ranked view should let a reviewer see kimi_direct's WR/PF split by class with the n>=30 gate applied per class, not just globally.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.9, \"review_evidence\": \"Template line 449: COMMODITY row shows class=\\\"tbd\\\">TBD</td><td class=\\\"tbd\\\">TBD. min_n=30 in leaderboard JSON is applied to the blended n_resolved, and models report asset_classes=7-8 each (e.g. grok3 asset_classes=8) with no per-class CI in the ranked JSON.\", \"verify_evidence\": \"Leaderboard JSON (audit_dashboard/data/ai_tournament_leaderboard.json) has NO per-asset-class breakdown: model entry keys union = [model_id, provider, model_version, n_picks, n_resolved, n_excluded_untrustworthy, n_wins, wr, wr_ci_lo/hi, pf, pf_ci_lo/hi, score, tier, rank_eligible, rank]; `grep -c asset_class` = 0. min_n_to_rank=30 is applied to the single blended n_resolved (kimi_direct rank-1/T1 at n_resolved=54; grok3 rank-2/T1 at n_resolved=98). DB confirms the blend hides per-class small-n: tournament_picks GROUP BY asset_class for grok3 (WIN/LOSS only) = CRYPTO n=29 (16W ~55%), EQUITY n=9, FUTURES n=6, BOND n=4, PENNY n=2, COMMODITY n=2 \u2014 only CRYPTO is near the 30-gate; the T1 tier is effectively CRYPTO-driven with diluting small-n tails, exactly the failure mode the claim describes. Template ai-tournament.html line 449 COMMODITY row literally shows class=\\\"tbd\\\">TBD</td><td class=\\\"tbd\\\">TBD (verified). Proposed-fix reuse claim verified: tools/ai_tournament/kill_gate.py:21 does `GROUP BY persona_id, asset_class`.\"}",
        "success_metric": "Extend ai_tournament_leaderboard.json with a per-class sub-object {asset_class: {n_resolved, wr, pf, wr_ci_lo, pf_ci_lo}} per model and render an expandable per-class panel in the drill-down, gating tier per class at n>=30 (the kill_gate.py already groups WHERE status IN ('WIN','LOSS') by asset_class \u2014 reuse it).",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:00",
        "updated_at": "2026-06-06 07:34:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 108,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE-6 v2 windowed-HHI: replace per-pick HHI with moving-window HHI",
        "description": null,
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "minimax-m3-free (2026-06-02)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Avoid over-zealous small-population flagging: windowed HHI computed over last 50 picks per strategy/source_system should be <0.20 in >=80% of windows",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 23:36:55",
        "updated_at": "2026-06-03 00:50:57",
        "implemented_at": "2026-06-03 00:50:57",
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "#475,#481,#485",
        "enhancement_plan": "EAGLE-6 v1 uses per-pick HHI across the entire pick history of each (strategy, source_system) pair. On small populations (n<100) this over-zealously flags diversification. v2 should compute HHI on a moving window (e.g. last 50 picks) and gate on the rolling metric. Referenced in ENHANCEMENT_OVERALL #85 enhancement_plan and in updates/2026-06-02-bootstrap-ci-results.md. Implementation: replace _EAGLE6_MAX_SOURCE_HHI=0.20 static check in alpha_engine/eagle_gates.py with apply_eagle6v2_windowed_hhi(picks, window=50, threshold=0.20) that returns verdict and provenance. Pre-existing finding from EAGLE-6 v1 review (see PR #456)."
      },
      {
        "enhancement_id": 80,
        "asset_class": "OVERALL",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Investigate TP_HIT_REPLAY regression in audit_trail/outcome_resolver.py bar_replay()",
        "description": "Investigate TP_HIT_REPLAY regression in audit_trail/outcome_resolver.py bar_replay()",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"failing_tests\": [\"test_long_tp_hit_replay\", \"test_short_sl_hit_replay\"], \"skipped_in_pr\": \"#450\", \"root_cause_hypothesis\": \"MAX_HOLD_HOURS unification (FOREX 120 -> 72) broke bar replay window math\"}",
        "success_metric": "TestBarReplay class tests pass without skip",
        "target_release": "next sprint",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 67,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Shadow-size survivors <=0.5% capital for 4-8 weeks before sizing",
        "description": "Any sleeve clearing the harness runs at <=0.5% live for 4-8wk; promote to real capital only after 2 consecutive 4-week windows within +-10% of backtest PF.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "475",
        "created_at": "2026-06-02 14:17:13",
        "updated_at": "2026-06-02 19:44:42",
        "implemented_at": "2026-06-02 19:44:42",
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": "475",
        "enhancement_plan": "Shipped in PR #475: shadow_size_plan() in admissibility_pipeline.py Step 10. Cleared sleeve -> SHADOW 0.5%, PROMOTE only after 2x 4wk windows within +-10% backtest PF. 5 tests."
      },
      {
        "enhancement_id": 22,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Edge-decay slope diagnostic on rolling 3-fold Sharpe",
        "description": "Qwen step-4: np.polyfit(range,rolling_sharpe.dropna(),1)[0] slope. If slope<-0.05, flag as 'edge appears to decay, possible regime overfit'. Add to StabilityReport, deploy gate slope > -0.05.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "every promoted strategy carries documented edge_decay_slope and passes -0.05 floor",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 26,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Realized vs predicted vol ratio tracker wired to live promotion gate",
        "description": "Qwen pitfall #6: shipped as vol-calibration tracker (f54ee2ed). This entry tracks the WIRE-UP into the active deploy gate: surface realized/predicted on /audit, gate strategy promotion on trailing-3mo median<=1.3.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "ratio panel visible on /audit and enforced as promotion blocker",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 04:31:09",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 19,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Drift-triggered rebalancing + VWAP execution (framework pitfall #8)",
        "description": "Calendar-rebalancing during flash crashes moves the market against you. Replace 'rebalance every Mon' with 'rebalance when drift exceeds 1.5x expected'. Use VWAP / iceberg slicing on any single fill > 0.5% ADV to limit market impact. Reduces rebalance turnover by ~40% historically.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "qwen-code+framework-review",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Rebalance trigger driven by drift threshold not calendar; VWAP slicing on large fills; turnover drops >=25% with no Sharpe degradation in backtest",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:54:43",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_qwen_momentum_macro_pipeline_framework.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Qwen \u2014 Momentum + Macro Signal Pipeline Framework, Risk-Budgeting Pitfalls, OOS Walk-Forward Validation\n\n**Date:** 2026-05-25 (Qwen Code session)\n**Type:** Methodology reference doc (not a one-off pick set)\n**Linked enhancements:**\n- `ENHANCEMENT_OVERALL: Adopt Qwen 7-stage momentum+macro+regime pipeline as alpha_engine reference architecture`\n- `ENHANCEMENT_OVERALL: Enforce purged-k-fold + walk-forward validation as new-strategy admission gate` (kilocode/nemotron, complementary)\n- `ENHANCEMENT_OVERALL: Add momentum + macro composite signal template to alpha_engine` (kilocode pseudo-code, narrower)\n\n---\n\n## 1. Momentum-Plus-Macro Signal Pipeline (7 stages)\n\n| Stage | What it does | Code module |\n|---|---|---|\n| **0. Config** | Central tunable params: universe, look-back windows, scoring weights, risk limits, cost assumptions | `PipelineConfig` dataclass |\n| **1. Data ingestion** | Clean OHLCV per symbol + macro series; forward-fill few missing bars; drop zero-volume rows | `ingest_market_data`, `ingest_macro_data` |\n| **2. Feature engineering** | **Momentum:** 21/63/126-day returns, vol-scaled momentum, pull-back filter, relative strength vs SPY. **Macro:** transform raw macro into tail tags (dovish-rate, inflation-trend, credit-stress, dollar-strength, low-VIX regime), build z-score-normalized composite macro score | `compute_momentum_features`, `compute_macro_features` |\n| **3. Regime detection** | HMM-like proxy: rolling Sharpe \u2192 Bear / Sideways / Bull | `detect_regime` |\n| **4. Signal generation** | Per-row composite score (momentum z + regime boost + macro tailwind + cross-sectional rank) using config weights; emit LONG/SHORT + filter low-rank | `generate_signals` |\n| **5. Position sizing** | Two-stage: (1) inverse-vol parity so each leg contributes equal risk, (2) capped Kelly fraction (\u00b125% of signal) + global max-position cap | `size_positions` |\n| **6. Portfolio construction** | CVaR-aware constrained optimisation (min vol) with constraints on leverage, per-asset cap, sector exposure | `construct_portfolio` |\n| **7. Execution queue** | Target weights \u2192 concrete orders, slippage + cost model, priority by weight change | `queue_orders` |\n\n**Reference flow:**\n\n```python\ncfg      = PipelineConfig(universe_symbols=[...])\nprices   = ingest_market_data(cfg.universe_symbols, \"2020-01-01\", \"2026-05-25\")\nmacro    = ingest_macro_data(\"2020-01-01\", \"2026-05-25\")\nsignals  = generate_signals(cfg, prices, macro)\nweights  = size_positions(signals, get_vols(prices), cfg)\nopt_wt   = construct_portfolio(weights, get_cov_matrix(prices), cfg)\norders   = queue_orders(opt_wt, current_holdings, latest_prices, cfg)\n```\n\nAll steps deterministic, modular, swappable for more sophisticated models (true HMM, ML score, alt optimisers).\n\n---\n\n## 2. Risk-Budgeting Pitfalls (8 traps to avoid)\n\n| # | Pitfall | What breaks | Fix |\n|---|---|---|---|\n| 1 | Assuming covariance stationarity | Shock (e.g., Mar 2020) breaks \"equal-risk\" allocation | Time-decayed covariances (exp-decay) + Ledoit-Wolf shrinkage; recompute often |\n| 2 | Ignoring transaction-cost feedback | High-turnover signals eat the profit | Model slippage + commissions IN the optimiser; penalise turnover |\n| 3 | Nominal-$ vs vol-equivalent sizing | 1 M$ gold \u2260 1 M$ BTC \u2014 hidden concentration | Express budgets as % portfolio vol; `target_weight = target_risk \u00d7 portfolio_vol / asset_vol` |\n| 4 | Hidden sector/country concentration | Multiple \"different\" US-tech stocks = single sector | Sector caps, cluster by correlation, cap risk per cluster |\n| 5 | Over-fit risk-budget params | Few-month tune yields fake Sharpe that collapses | Freeze params \u2265 2 quarters; Monte-Carlo perturbation stress-test |\n| 6 | Confusing ex-ante vs ex-post risk | Predicted 8% DD turns into 14% realised | Continuously compare realised vs predicted vol; widen buffers if realised > predicted |\n| 7 | Pure Kelly without caps | Kelly says 23%, a few bad weeks wipe equity | Fractional Kelly (~25%) + hard max-position cap (~10%) |\n| 8 | Rebalancing-induced timing risk | Large monthly rebal during flash crash moves market against you | Drift-triggered rebal (e.g., > 1.5\u00d7 expected drift); VWAP / slice large orders |\n\n---\n\n## 3. Robust OOS Back-Testing + Walk-Forward Validation\n\n### Step 1 \u2014 Train/test definition\n- **No overlap** between train + test windows.\n- Rolling **expanding window**: each fold trains on all data up to t, tests on next h days.\n\n### Step 2 \u2014 Walk-forward implementation\n1. Split timeline into n roughly-equal test intervals.\n2. Per fold:\n   - Build signals only from data **before** the test start.\n   - Verify no look-ahead (`_assert_no_lookahead`).\n   - Run strategy on test slice; collect Sharpe / WR / max-DD.\n\n### Step 3 \u2014 Statistical significance\n- 1-sample t-test on OOS Sharpe.\n- Binomial test on WR > 50%.\n- Max-DD threshold (e.g., < 20%).\n- Bonferroni correction for multiple-strategy comparisons.\n\n### Step 4 \u2014 Stability diagnostics\n- CoV of Sharpe across folds (target < 0.5).\n- Edge-decay slope from rolling 3-fold Sharpe \u2014 steep negative = over-fit.\n- Regime-specific variance (bull/bear/sideways).\n- Parameter sensitivity (\u00b120% shifts).\n- Permutation test (random shuffle to assess significance).\n\n### Step 5 \u2014 Deployment gate (must-pass checklist)\n\n| Gate | Target |\n|---|---|\n| OOS Sharpe \u2265 0.50 / yr | \u2610 |\n| Max DD < 20% | \u2610 |\n| Win-rate binomial p < 0.05 | \u2610 |\n| Sharpe CoV < 0.5 | \u2610 |\n| Edge-decay slope > \u22120.05 | \u2610 |\n| Permutation p < 0.10 | \u2610 |\n| Net Sharpe after costs > 0.30 | \u2610 |\n| Zero leakage flags | \u2610 |\n| Parameter sweep stability (< 15% PnL loss) | \u2610 |\n| Stress-test (e.g., Mar 2020) DD \u2264 30% | \u2610 |\n\nIf any gate fails: fix underlying issue OR accept reduced sizing/position cap before going live.\n\n---\n\n## TL;DR\n\n- Pipeline = raw market+macro \u2192 composite score \u2192 rank \u2192 size by risk \u2192 optimise \u2192 orders.\n- Pitfalls mostly = hidden assumptions (stationary cov, ignoring costs, $-not-vol units) + over-fit.\n- Walk-forward + leakage guards + statistical tests + stability diagnostics = the deployment gate.\n\n## Action items in this repo\n\n1. **Refactor `alpha_engine` to the 7-stage modular layout above** (ENHANCEMENT_OVERALL). Current code mixes stages \u2014 separating them allows swapping any single stage (e.g., HMM regime for the rolling-Sharpe proxy).\n2. **Wire the deployment-gate checklist into CI** so no strategy promotes from shadow \u2192 probation without all 10 gates green (extends the kilocode/nemotron purged-k-fold proposal).\n3. **Implement CVaR-aware portfolio constructor** as a replacement for the current rank-and-fill logic.\n4. **Add turnover penalty to the optimiser** to operationalise pitfall #2.\n\nThese all land as separate ENHANCEMENT_OVERALL rows linking back to this doc."
      },
      {
        "enhancement_id": 6,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Universe expansion v1.2 \u2014 match AI tournament universe to /audit traded symbols",
        "description": "Currently the AI tournament locks symbols to 2026-05-19 snapshot. Widen to S&P 500 + active /audit picks per class so cross-system comparison is apples-to-apples.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Per-class universe doubles or matches /audit symbol count; tournament leaderboard remains stable across switch",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:04:26",
        "implemented_at": null,
        "link_md_path": "audit_dashboard/ai-tournament.html (universe panel)",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 7,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Pick-funnel rejection visibility on /audit",
        "description": "Show why each symbol scanned but not picked was rejected (which gate killed it). Pick-funnel automation already extracts this; needs UI surface beyond /audit/pick_funnel.html.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Each asset class shows funnel: scanned -> passed score -> passed trust -> passed regime -> opened. Visible from main /audit page.",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:06",
        "implemented_at": null,
        "link_md_path": "audit_dashboard/pick_funnel.html",
        "link_url": "https://findtorontoevents.ca/audit/pick_funnel.html",
        "link_github_ref": null,
        "enhancement_plan": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Pick Funnel \u00b7 findtorontoevents.ca/audit/pick-funnel</title>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<style>\n  * { box-sizing: border-box; }\n  body { font-family: -apple-system, system-ui, sans-serif; max-width: 1400px; margin: 24px auto; padding: 0 16px; background: #0a0a0f; color: #e6e6f0; line-height: 1.5; }\n  h1 { margin-bottom: 4px; font-size: 22px; }\n  h2 { font-size: 14px; padding-bottom: 6px; border-bottom: 1px solid rgba(255,255,255,0.1); color: #a0a0b0; margin: 24px 0 10px; text-transform: uppercase; letter-spacing: 0.5px; }\n  h3 { font-size: 13px; color: #c0c0d0; margin: 12px 0 6px; }\n  a { color: #60a5fa; text-decoration: none; }\n  a:hover { text-decoration: underline; }\n  code { background: rgba(255,255,255,0.06); padding: 1px 5px; border-radius: 3px; font-size: 11px; }\n  .small { font-size: 11px; color: #a0a0b0; }\n  .nav { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }\n  .nav a { background: rgba(255,255,255,0.05); padding: 6px 14px; border-radius: 6px; font-size: 13px; border: 1px solid rgba(255,255,255,0.08); }\n  .nav a:hover { background: rgba(96,165,250,0.12); text-decoration: none; }\n  .nav a.active { background: rgba(96,165,250,0.2); border-color: #60a5fa; color: #93c5fd; }\n  .hero { text-align: center; padding: 28px 16px 20px; background: linear-gradient(135deg, rgba(96,165,250,0.08) 0%, rgba(34,197,94,0.08) 100%); border-radius: 12px; margin-bottom: 24px; border: 1px solid rgba(96,165,250,0.15); }\n  .hero h1 { font-size: 26px; margin-bottom: 8px; }\n  .hero p { color: #a0a0b0; max-width: 720px; margin: 0 auto; font-size: 13px; }\n  table.lb { width: 100%; border-collapse: collapse; font-size: 12px; margin: 8px 0; }\n  table.lb th { background: rgba(255,255,255,0.04); font-weight: 700; padding: 8px 10px; text-align: left; border-bottom: 2px solid rgba(255,255,255,0.1); font-size: 11px; color: #a0a0b0; text-transform: uppercase; letter-spacing: 0.5px; }\n  table.lb th.num { text-align: right; }\n  table.lb td { padding: 6px 10px; border-bottom: 1px solid rgba(255,255,255,0.05); vertical-align: middle; }\n  table.lb tr:hover td { background: rgba(96,165,250,0.06); }\n  table.lb .num { text-align: right; font-variant-numeric: tabular-nums; }\n  .pnl-pos { color: #22c55e; }\n  .pnl-neg { color: #ef4444; }\n  .pnl-neu { color: #a0a0b0; }\n  .badge { display:inline-block; padding:2px 7px; border-radius:9px; font-weight:700; font-size:10px; letter-spacing:0.3px; }\n  .b-pass { background:#14532d; color:#86efac; border:1px solid #22c55e; }\n  .b-fail { background:#7c2d12; color:#fca5a5; border:1px solid #ef4444; }\n  .b-meh  { background:#3a3a44; color:#a0a0b0; border:1px solid #6b7280; }\n  .b-hc   { background:#1e3a5f; color:#93c5fd; border:1px solid #3b82f6; }\n  .b-disp { background:#78350f; color:#fcd34d; border:2px solid #f59e0b; font-size:11px; letter-spacing:0.5px; }\n  /* DISPUTED row highlight in nav matrix */\n  tr.disputed td { background: rgba(245,158,11,0.08); }\n  tr.disputed td:first-child { border-left: 3px solid #f59e0b; }\n  /* Funnel bar */\n  .funnel-row { display:grid; grid-template-columns: 90px 1fr; gap:10px; margin:8px 0; align-items:center; }\n  .funnel-row .ac-name { font-size:12px; color:#c0c0d0; font-weight:700; }\n  .funnel-bars { display:flex; gap:2px; height:24px; background:rgba(255,255,255,0.02); border-radius:3px; overflow:hidden; }\n  .stage { display:flex; align-items:center; justify-content:center; font-size:10px; color:#fff; font-weight:700; min-width:24px; padding:0 6px; }\n  .s1 { background:#3b82f6; }      /* scanned */\n  .s2 { background:#2563eb; }      /* smart */\n  .s3 { background:#1e40af; }      /* hc */\n  .s4 { background:#1e3a8a; }      /* opened */\n  .s5 { background:#22c55e; }      /* win */\n  .s6 { background:#ef4444; }      /* loss */\n  .panel { background: rgba(255,255,255,0.02); border:1px solid rgba(255,255,255,0.07); border-radius:8px; padding:14px; margin:16px 0; }\n  .panel h3 { margin-top:0; }\n  .eli5 { display:none; background:rgba(255,255,255,0.03); border:1px solid rgba(255,255,255,0.08); border-radius:8px; padding:12px; margin:6px 0; font-size:12px; line-height:1.6; color:#c0c0d0; }\n  .eli5-btn { background:rgba(255,255,255,0.05); border:1px solid rgba(255,255,255,0.1); border-radius:5px; color:#e6e6f0; font-size:10px; padding:2px 10px; cursor:pointer; margin:6px 0; }\n  .edge-cell { font-family: ui-monospace, monospace; font-size: 11px; color:#c0c0d0; }\n  .info { display:inline-block; width:13px; height:13px; line-height:13px; text-align:center; border-radius:50%; background:rgba(96,165,250,0.2); color:#93c5fd; font-size:9px; font-weight:700; margin-left:4px; cursor:help; border:1px solid rgba(96,165,250,0.35); user-select:none; }\n  .info:hover { background:rgba(96,165,250,0.4); color:#fff; }\n  .glossary { background:rgba(96,165,250,0.04); border:1px solid rgba(96,165,250,0.18); border-radius:10px; padding:14px 18px; margin:0 0 18px; }\n  .glossary summary { cursor:pointer; font-weight:700; color:#93c5fd; font-size:13px; padding:4px 0; }\n  .glossary[open] summary { margin-bottom:10px; border-bottom:1px solid rgba(96,165,250,0.18); }\n  .glossary dl { display:grid; grid-template-columns: 140px 1fr; gap:6px 14px; margin:8px 0 0; font-size:12px; line-height:1.55; }\n  .glossary dt { font-weight:700; color:#c0c0d0; font-family:ui-monospace,monospace; }\n  .glossary dd { margin:0; color:#a0a0b0; }\n  .glossary dd b { color:#e6e6f0; }\n  .eli5-row { background:rgba(34,197,94,0.04); border-left:2px solid rgba(34,197,94,0.4); }\n  .eli5-row td { font-size:11px; color:#86efac; font-style:italic; padding:4px 10px 8px !important; }\n  footer { margin-top: 40px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,0.07); color: #4b5563; font-size: 11px; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px; }\n  .ac-section { margin: 18px 0; padding: 10px 14px; background: rgba(255,255,255,0.015); border-radius: 6px; border-left: 3px solid #60a5fa; }\n  pre.verdict { white-space: pre-wrap; background:#0e0e16; padding:12px; border-radius:6px; font-size:11px; line-height:1.5; max-height: 480px; overflow:auto; border:1px solid rgba(255,255,255,0.05); }\n  /* Recency subset styling \u2014 distinct accents per window. */\n  .recency-2w  { border-left: 4px solid #f59e0b; background: rgba(245,158,11,0.04); padding: 10px 14px; border-radius: 4px; margin: 10px 0; }\n  .recency-48h { border-left: 4px solid #ec4899; background: rgba(236,72,153,0.05); padding: 10px 14px; border-radius: 4px; margin: 10px 0; }\n  /* Visually demote (do not hide) rows whose only \"edge\" comes from a single-source concentration caveat. */\n  tr.row-demoted { opacity: 0.55; }\n  tr.row-demoted td { font-style: italic; }\n  .demote-icon { color: #fbbf24; margin-right: 4px; cursor: help; }\n  .raw-sub { display:block; font-size: 9px; color:#9ca3af; font-weight: normal; }\n  .pf-undefined { color: #9ca3af !important; text-decoration: underline dotted; cursor: help; }\n  .chip-14d { display:inline-block; padding:2px 7px; border-radius:9px; font-weight:800; font-size:10px; letter-spacing:0.3px; background:#78350f; color:#fcd34d; border:1px solid #f59e0b; margin-left:6px; }\n  .chip-48h { display:inline-block; padding:2px 7px; border-radius:9px; font-weight:800; font-size:10px; letter-spacing:0.3px; background:#831843; color:#fbcfe8; border:1px solid #ec4899; margin-left:6px; }\n  .chip-all { display:inline-block; padding:2px 7px; border-radius:9px; font-weight:800; font-size:10px; letter-spacing:0.3px; background:#1e3a8a; color:#bfdbfe; border:1px solid #3b82f6; margin-left:6px; }\n  .insuff   { color:#a0a0b0; font-style:italic; font-size:11px; }\n  .recency-hero { background: linear-gradient(135deg, rgba(236,72,153,0.10), rgba(245,158,11,0.06)); border:2px solid rgba(236,72,153,0.5); border-radius:10px; padding:14px 18px; margin:18px 0 24px; }\n  .recency-hero h2 { border-bottom: none; margin-top:0; color:#fbcfe8; text-transform:none; letter-spacing:0; font-size:16px; }\n</style>\n</head>\n<body>\n<div class=\"hero\">\n  <h1>\ud83d\udd2c Pick Funnel \u00b7 /audit</h1>\n  <p>Every pick scanned \u2192 score floor \u2192 trust gate \u2192 high-conviction \u2192 opened \u2192 closed \u2192 win/loss. Per-class visibility into where edge lives and where money would have been made.</p>\n  <div style=\"margin-top:10px;font-size:11px;color:#4b5563\" id=\"generated-at\">Loading\u2026</div>\n</div>\n\n<nav class=\"nav\">\n  <a href=\"/audit/\">\u2190 Main Audit</a>\n  <a href=\"/audit/ai-tournament.html\">\ud83c\udfc6 AI Tournament</a>\n  <a href=\"/audit/pick_funnel.html\" class=\"active\">\ud83d\udd2c Pick Funnel</a>\n  <a href=\"/audit/ai_leaderboard.html\">AI Leaderboard</a>\n  <a href=\"/audit/research_index.html\">Research Index</a>\n</nav>\n\n<details class=\"glossary\">\n  <summary>What do these terms mean? (click to expand)</summary>\n  <dl>\n    <dt>WR (shrunk)</dt>\n    <dd><b>Beta-shrunk Bayesian win rate</b> \u2014 instead of raw <code>wins/n</code> (which makes 5-of-7 look like a 71% edge), we compute <code>(wins + 0.5*20) / (n + 20)</code>. This pulls small-n cells toward a 50% prior so noise cells don't look like real edges. Source: <code>tools/audit_pick_funnel/top_edges.py::bayes_wr()</code>.</dd>\n    <dt>PF</dt>\n    <dd><b>Profit Factor</b> = <code>sum(positive pnls) / abs(sum(negative pnls))</code>. <b>1.0</b> = break-even. <b>\u22651.5</b> = solid edge. <b>\u22653.0</b> = elite (always sanity-check n and leakage). Cell PF&lt;1 means losers outweighed winners even if WR was high.</dd>\n    <dt>n</dt>\n    <dd>Closed-trade sample size in the cell (WIN+LOSS only \u2014 flats/expired excluded). PROVEN tier requires <code>n\u226520</code>.</dd>\n    <dt>fam</dt>\n    <dd><b>Strategy family</b> \u2014 bucketed from the <code>strategy</code> column by keyword: <code>scalp</code>, <code>breakout</code>, <code>momentum</code>, <code>mean_reversion</code>, <code>trend</code>, <code>vol</code>, <code>consensus</code>. <b>cftc</b> = strategies with \"cftc\" in the name (Commodity Futures Trading Commission positioning signals \u2014 commercial-hedger COT data)."
      },
      {
        "enhancement_id": 157,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "Regime tagging at pick time + signal-resolution funnel + score-PnL scatter",
        "description": "Store market_regime_id + volatility_atr on each pick; add a Generated->Validated->Executed->TP/SL/Expired funnel (surfaces the 70-95% expiry) and a live elite_score vs realized_pnl scatter to detect scoring decay. Per Zoo Quant review.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "zoo + claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Regime-conditional WR view live; funnel shows expiry rate",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-09 05:10:14",
        "updated_at": "2026-06-09 05:10:14",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 57,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Tournament virtual book for deepseek_v4 (paper n\u2265100 target)",
        "description": "deepseek_v4 #1 tournament leaderboard (n=208, PF~3.5 paper). Bridge tournament picks through admissibility \u2014 separate universe from at_raw_picks until virtual forward book matches production gates.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": "deepseek_v4",
        "proposed_features": null,
        "success_metric": "Virtual book n\u2265100 resolved; live PF within \u00b110% of paper for 8 weeks before merge.",
        "target_release": "2026-07-15",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "reports/EAGLE_SWARM_SYNTHESIS_2026-06-02.md",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 61,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "EAGLE2: Quant ops dashboard \u2014 PF, WR, MDD, HHI, resolver dispute rate",
        "description": "Grafana-style panel per EAGLE2 \u00a74.6: per-class PF/WR/MDD, portfolio HHI <0.20 target, resolver dispute alerts, admit pipeline latency \u22645 min/sleeve.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Dashboard or /audit section shows 5 metrics with alert thresholds documented in updates/.",
        "target_release": "2026-08-31",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 165,
        "asset_class": "OVERALL",
        "source_ref": null,
        "title": "strategy_tier_tracker spams ~30+ timestamped reports/*.md per day \u2014 write to one canonical path",
        "description": "A 15-min agent loop runs tools/strategy_tier_tracker.py which writes a NEW reports/strategy_tier_tracker_<ts>.md every run (30+ on 2026-06-12 alone). Repo bloat + buries substantive reports. Fix: default output to a single canonical reports/strategy_tier_tracker_latest.md (timestamped only with --archive), or add retention cleanup.",
        "category": "SCORING",
        "expected_impact": "LOW",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-fable-mdreview",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "<=1 tracker file per day in reports/",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-12 18:23:21",
        "updated_at": "2026-06-12 18:23:21",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 139,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "AI-tournament WR/PF table likely reproduces the known single-snapshot resolver artifact",
        "description": "The page's model leaderboard (deepseek_v4 55.8% WR / PF 3.72 n=43, cursor_agent 66.1% / 2.35 n=59, etc.) mirrors the /audit tournament 73-91% WR figures that project memory documents as a single-snapshot resolver artifact (not edge), fixed only by intrabar OHLC replay. Showing these high WR/PF beside actionable picks lends false confidence.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.85, \"review_evidence\": \"Memory: 'AI-tournament WR artifact 2026-06-03 \u2014 /audit tournament 73-91% WR is a single-snapshot resolver artifact (not edge)'. Page tournament block picks-now.html lines ~742-786.\", \"verify_evidence\": \"picks-now.html lines 733-788 show the AI-tournament model leaderboard with exactly the claimed values (cursor_agent 66.1% WR / PF 2.35 / n=59; deepseek_v4 55.8% WR / PF 3.72 / n=43; llama4_scout 61.4%/2.26/n=57; grok3 58.4%/2.02/n=89), labeled \\\"Rank #1/#2\\\" beside actionable picks. grep for intrabar|single-snapshot|resolver-artifact|artifact|inflate in picks-now.html returns 0 matches \u2014 no caveat present. The linked /audit/ai-tournament.html DOES carry the caveat: div id=\\\"resolver-artifact-banner\\\" (ai-tournament.html:192-198) states intrabar OHLC replay only landed 2026-06-04, 4,154 picks flagged MISPRICED_ENTRY, and \\\"Treat current Tier-1 badges as UNPROVEN until ~7 days of replay-resolved closes (n>=100)\\\"; the leaderboard Tier-column tooltip (line 211) and JS t1WarnTip (lines 693-696) say the single-snapshot resolver \\\"inflate[s] WR by 15-30%\\\". DB confirms source is single-snapshot: tournament_picks resolves via pnl_pct (statuses WIN 872 / LOSS 913 / OPEN 1160 / MISPRICED_ENTRY 4154); no intrabar-replay field feeds these aggregates. The memory note \\\"AI-tournament WR artifact 2026-06-03\\\" is real and consistent.\"}",
        "success_metric": "Add the same intrabar-replay caveat banner used on ai-tournament.html, or link out to it, and annotate the table as 'snapshot, not OOS-validated'. Long-term: feed these WR/PF from the intrabar-replayed resolver.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:01",
        "updated_at": "2026-06-06 07:34:01",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 141,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Persist source + asof onto the pick so /audit can attribute price provenance and exclude proxy-priced closures",
        "description": "The enricher throws away result['source'] and result['asof'] (only price is kept). Carrying these onto each pick would let the audit pipeline (a) filter out picks whose exit was driven by a daily/monthly/spot proxy when computing class WR/PF, and (b) flag which FX/commodity classes are surviving on degraded sources vs real-time \u2014 directly relevant to the Goal #1 'never size up without verifying' rule.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.9, \"review_evidence\": \"alpha_engine/universal_price_enricher.py:415-416 sets only current_price + last_checked; result['source']/['asof'] available at forex_price_failover.py:155/:187 and commodity_price_failover.py:190/:330 but unused\", \"verify_evidence\": \"All claimed code references verified in /home/eaguiar2015/findtorontoevents_antigravity.ca:\\n- alpha_engine/universal_price_enricher.py:201 `_fetch_yfinance_prices(symbols) -> dict[str, float]` returns only {symbol: price}. Inside (lines 226-234) it calls fetch_forex_rate/fetch_commodity_price, gets `result` containing price+source+asof, but stores ONLY `result[\\\"price\\\"]` into price_map (lines 228, 233). `result['source']` is merely printed to stdout (lines 229, 234); `result['asof']` is never read at all.\\n- enrich_all_picks stamps the pick with only `current_price` (line 415) and `last_checked` (line 416) \u2014 no price_source/price_asof. grep -c price_source|price_asof on the enricher = 0.\\n- forex_price_failover.py DOES return source/asof: yahoo_v8 block returns {price,base,quote,asof(:154),source(:155)}; also frankfurter/open_er_api/finnhub/twelve_data/alpha_vantage each return source+asof. (Claim cited :155/:187; actual yahoo source is :155, asof :154 \u2014 minor offset, claim is substantively correct.)\\n- commodity_price_failover.py returns source/asof: yahoo_v8 {price,symbol,asof(:189),source(:190)}; stooq/fmp/finnhub/fred(:330-331) likewise. Claim cited :190/:330 \u2014 both are real source-return sites. Verified accurate.\\n- DB: SHOW COLUMNS on trading_picks shows only entry_price/exit_price (price), source_system (pick-emitter, NOT price source), and zero asof/price_source columns. So the audit pipeline has no provenance to filter on today.\\nThe pre-change lines are quoted verbatim an\"}",
        "success_metric": "In _fetch_yfinance_prices, return (price, source, asof) tuples (or a parallel dict) and have enrich_all_picks stamp pick['price_source'] / pick['price_asof']; surface in pick_funnel / asset_class_health so proxy-priced trades can be down-weighted.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:01",
        "updated_at": "2026-06-06 07:34:01",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 135,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Add a build-time DB<->JSON reconciliation badge and generated-at staleness check on the page",
        "description": "Because the page is built from an exported snapshot that can diverge from the DB (root cause of the grok3 discrepancy), add a visible reconciliation indicator: at generation time compare each model's JSON WIN/LOSS to a live COUNT(*) and stamp the page with 'DB-reconciled YYYY-MM-DD' (green) or 'snapshot drift detected' (red). Also surface the leaderboard generated_at prominently with a >24h-stale red treatment (the template already has a 24h stale threshold concept for the price tracker but not for the leaderboard cohort).",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.82, \"review_evidence\": \"leaderboard generated_at=2026-06-05T23:50:56, DB max resolved_at=2026-06-05T23:50:45 (close), yet per-model splits diverge (grok3 52 vs 98). No page element tells the user the per-model numbers are reconciled to the DB.\", \"verify_evidence\": \"Claimed evidence is accurate and reproducible.\\n\\n1) leaderboard generated_at: audit_dashboard/data/ai_tournament_leaderboard.json shows \\\"generated_at\\\":\\\"2026-06-05T23:50:56.966642+00:00\\\"; live DB query SELECT MAX(resolved_at) FROM tournament_picks = \\\"2026-06-05T23:50:45...\\\" \u2014 matches the claimed near-simultaneous timestamps.\\n\\n2) grok3 \\\"52 vs 98\\\" confirmed exactly: DB query SELECT SUM(status='WIN'),SUM(status='LOSS') FROM tournament_picks WHERE model_id='grok3' => WIN=35, LOSS=17, total=52. Leaderboard JSON grok3 has n_resolved=98, n_wins=54. So 52 (DB resolved WIN+LOSS) vs 98 (JSON n_resolved). The divergence is real because (a) the snapshot ai_tournament_picks_latest.json holds 468 grok3 rows but the live DB holds only 355 (superset/out-of-sync), and (b) update_leaderboard.py counts trustworthy non-OPEN picks via is_resolution_trustworthy (which drops MISPRICED_ENTRY/timestamp/TPSL violations): 420 non-OPEN -> 98 trustworthy -> 54 wins. update_leaderboard.py NEVER touches the DB (no pymysql/SELECT/db_env import \u2014 verified by grep), so nothing reconciles the snapshot against the live table.\\n\\n3) No reconciliation element exists: grep for \\\"reconcil|DB-reconciled|snapshot drift\\\" across audit_dashboard/ and tools/ai_tournament/ returns only unrelated equity/price-reconciliation text, no per-model JSON-vs-DB badge. The \\\"stale 1/4 subset\\\" failure mode is a documented (RESOLVED) P1 incident in audit_dashboard/incidents.html (\\\"ai_tournament dashboard JSON is a stale 1/4 subset (1037 pu\"}",
        "success_metric": "In update_leaderboard.py after writing JSON, run a SELECT model_id, SUM(status='WIN'), SUM(status='LOSS') FROM tournament_picks GROUP BY model_id and diff against the JSON; emit a 'reconciliation' object into the JSON and render a banner. Fail loudly (non-zero exit) when drift exceeds tolerance so the deploy step can hold a bad snapshot.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:00",
        "updated_at": "2026-06-06 07:34:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 136,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Show DB-wide honest baseline (48.9% WR, n=1785) as an explicit reference line on the leaderboard",
        "description": "The single most grounding number is missing from the page: across all 1,785 resolved tournament picks the WR is 48.9% (872 WIN / 913 LOSS), i.e. the tournament as a whole has no demonstrated edge over a coin flip yet. Putting this baseline on the page (as a horizontal reference and a one-line 'fleet aggregate' row) makes it obvious that the 3 T1 models are outliers within a near-50% population and prevents readers from over-trusting the top rows.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.9, \"review_evidence\": \"DB query SUM(status='WIN')=872, SUM(status='LOSS')=913 -> 48.9% fleet WR. The page shows individual model WRs of 55-66% but no fleet aggregate to contextualize them.\", \"verify_evidence\": \"DB query against ejaguiar1_stocks.tournament_picks: SUM(status='WIN')=872, SUM(status='LOSS')=913, n=1785, WR=872/1785=48.85%\u224848.9% \u2014 matches the claimed evidence exactly. status breakdown also shows MISPRICED_ENTRY=4154 (excluded from WR/PF) and OPEN=1160. The leaderboard page is /home/eaguiar2015/findtorontoevents_antigravity.ca/audit_dashboard/ai-tournament.html. The leaderboard table render (lines 711-736) emits only per-model rows (WR, Wilson CI, PF, CI-shrunk score m.score) and a separate BUILDING section \u2014 there is NO totals/footer/fleet-aggregate row and NO horizontal baseline reference line. grep for 'TOTAL|tfoot|aggregate|fleet|coin' returns nothing in the table; the only baseline mention is prose at line 196 ('still above 50% baseline'), not a rendered fleet row. The summary line (line 935) prints 'N models \u00b7 X picks \u00b7 Y resolved' \u2014 a count, never a fleet WR. The source JSON audit_dashboard/data/ai_tournament_model_summary.json has top-level keys [generated_at,n_models,n_picks_total,n_resolved,models] with NO fleet WR/aggregate field; summing per-model wins/losses gives 825/886 = 48.2% (post-trustworthiness filter, n_resolved=1711). Template line 135 (verified verbatim) is the 'All-time in snapshot' element with id pf-all-time-models, which at lines 899-902 only renders data.n_models (a count), so the scaffold the fix proposes to reuse exists.\"}",
        "success_metric": "Add a pinned 'FLEET AGGREGATE' summary row (n_resolved, WR, PF across all models) computed by the generator, and draw it as the baseline the CI-shrunk score is measured against. Reuse the existing 'All-time in snapshot' PF element scaffold (template line 135).",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:00",
        "updated_at": "2026-06-06 07:34:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 138,
        "asset_class": "OVERALL",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "Add a staleness guard so a stale or schema-shifted JSON cannot silently render",
        "description": "The page consumed a 2026-06-06 JSON that silently lost a key the template depends on, with no visible error \u2014 the fallback `||{}` hides it. There is no on-page assertion that required keys (smart_picks_db_stats, funnel_by_class) exist, nor a max-age check on generated_at. The banner's whole credibility rests on the ground-truth table existing.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.9, \"review_evidence\": \"pick_funnel.html:971 `d90.smart_picks_db_stats||{}` and :964 `today.funnel_by_class||{}` both swallow missing keys; footer claims 'Auto-refresh nightly via .github/workflows/pick-funnel-nightly.yml' but no schema/age validation on the consumed JSON.\", \"verify_evidence\": \"Cited lines are exact. audit_dashboard/pick_funnel.html:971 `renderSmartPicksDbStats(d90.smart_picks_db_stats||{}, d90)` and :964 `renderFunnelBars(today.funnel_by_class||{}, 'funnel-bars-today')` (also :965/:967 for d90.funnel_by_class) \u2014 all use `||{}` which silently swallows a missing key. The only error path is the catch on :974-975 (JSON parse/fetch failure \u2192 \\\"Load error\\\"), which does NOT fire for a present-but-schema-shifted or stale JSON. No max-age / generated_at age check exists: grep for Date.now|getTime|stale|age|integrity in the file finds only the unrelated 14d localStorage click cutoff (:835) and the static DISPUTED prose (:140-160); `toEST` (:340-346) merely formats the timestamp for display, no comparison. The nightly workflow .github/workflows/pick-funnel-nightly.yml has zero schema/jq/assert/validate steps \u2014 it just runs extract_funnel.py and `git add`s the JSON (:82-85). Live JSON audit_dashboard/data/pick_funnel_90d.json currently has both keys present, generated_at=2026-05-29T06:25:16Z \u2014 i.e. 8 days stale as of 2026-06-06, and the page renders it with no freshness warning, demonstrating the exact silent-staleness defect the claim describes.\"}",
        "success_metric": "In the page bootstrap, validate that pick_funnel_90d.json contains funnel_by_class AND smart_picks_db_stats and that generated_at is < 48h old; if not, render a red 'data integrity' notice in the relevant panel instead of a perpetual 'Loading\u2026'. Optionally add a CI check on the emitted JSON schema in pick-funnel-nightly.yml.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:00",
        "updated_at": "2026-06-06 07:34:00",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "STOCKS": [
      {
        "enhancement_id": 3,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar-2026-05-13) to production_scanner + equity_strategies.py per 90-day QW-1",
        "description": "From reports/2026-05-27_quick_wins_from_90day_plans.md + equity_vix_regime_breakthrough_20260513.md + consolidated_plan_2026-05-29.md. Backtest lift: VIX<22 PF 4.55 / MDD 16.8% vs baseline 2.82/24% on large-cap universe. Single production caller needed per Wire-Up Rule. Goal #1 critical for EQUITY edge.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29 + 90day-consolidation",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "EQUITY 14d/48h WR >=55% and PF>1.5 with gate active; >=30 new forward trades in 14 days",
        "target_release": "2026-06-05 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:37:09",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/asset_class_consolidated_plan_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Asset Class Consolidated Plan & Live Task Tracker \u2014 2026-05-29 Update\n\n**Supersedes / augments:** `reports/90day_plan_2026-05-15.html` (and its 8 per-class pages) + `reports/2026-05-27_world_class_gameplan_synthesis.md` + `reports/2026-05-27_remaining_items_from_90day_plans.md` + `reports/2026-05-27_quick_wins_from_90day_plans.md` + May 29 autonomous strategy hunt (Cycles 2-17).\n\n**Primary Goal (per CLAUDE.md Goal #1):** Institutional/hedge-fund-grade performance (Tier 2 minimum: PF>1.5 / WR>50 / MDD<20; long-term Tier 1 Renaissance target) across **ALL** asset classes on `/audit`. 0/6 classes met T2 on 2026-05-27 canonical policy-clean data (`pf_registry.by_asset_class_policy_clean_net`, `money_ready_verdict.json`). 3 classes degraded in prior 72h. CRYPTO collapsed 78.9%\u219238% WR over 14d with 0 closed in 48h.\n\n**Status as of 2026-05-29 (post Cycles 2-17):** All 6 asset classes now have **proven edge** (1,064+ strategy-symbol combos tested; 16 strategies wired to production including universal vol_mr, macd_divergence, momentum_breakout, ichimoku, yield_curve_proxy, range_trading + prior). COMMODITY strongest in recent MC validation (multiple Tier 1 on GC/SI/CL). BOND/FOREX breakthroughs (ZN=F mean_rev_atr PF 2.11; USDCHF rsi_mr PF 4.28). However, **data quality rot (PnL mismatches, ghosts, stale resolver, trust NULL) still blocks real-money sizing**. `money_ready_verdict` remains empty. incidents.html is now the canonical live task tracker for these plans.\n\n**See also:** `/audit/incidents.html` (this page is the go-to for latest per-plan tasks), `reports/BURIED_WINNERS_AUDIT_2026-05-29.md`, `memory/2026-05-29.md`, per-class 90-day pages under `reports/90day_pages_2026-05-15/`.\n\n---\n\n## Current Per-Class Verdict (Policy-Clean + Recent Hunt)\n\n| Class | Pre-May29 (May27 synthesis) | Post-Cycle17 Hunt (2026-05-29) | 90-Day Plan Focus (May15) | Key Open Risks (from incidents.html + plans) |\n|-------|-----------------------------|--------------------------------|---------------------------|---------------------------------------------|\n| CRYPTO | PF 0.96 / WR ~31-39% (n=210 policy-clean); 78.9% Smart-Picks disputed (raw DB 39% WR) | Edge proven (ml_crypto_predictor DSR 0.95+, multiple new wired); still sub-T2 overall | Liquid core + ADV gate + on-chain + BTC hour filter (M-001) + quan drag quarantine (M-004) + confidence inversion | 4 P1 incidents (DSR small-n, meta explosion, leakage edges PF99+, quan_scalp PF0.42 drag); 91.7% concentration in claude_gainer_st (only 3 closed rows) |\n| EQUITY | INSUFF-N (n=33) | Edge proven (stocks_rsi2_pullback 62.9% OOS n=70 + new momentum/rsi_mr wired) | VIX regime gate (QW-1), PEAD promote, large-cap clean universe, UEPS wiring | P0: pead_equity shadow; P1: penny pollution, UEPS zero emits, scanner routing gaps |\n| COMMODITY | INSUFF / pre-clean COT contamination (11.9% WR / PF0.29 class) | Strongest class (CL=F RSI-MR PF7.2, GC/SI multiple Tier1; COT dedup in progress) | Post-dedup COT recompute (QW-5), diversify beyond CT=F (M-039), carry-momo sidecar | P0: COT over-emission + pre-clean headline contamination (3 incidents); COMMODITY tile still unsafe |\n| FOREX | FAIL (PF0.55 / WR40% n=53; USDJPY 55% concentration) | Breakthrough (USDCHF rsi_mr PF4.28 Tier1; 5 new strategies incl. ichimoku/yield) | HARD_DISABLE + majors-only paper + live carry_yield + CFTC COT for futures | P0: all but one loser + 93% USDJPY conc (1 incident); SL too tight; forex_carry unwired |\n| ETF | INSUFF-N (n=2) | Edge via dual-momentum + VIX overlay backtests | VIX<25 gate wire (QW-2), pick 1-2 for probation | P2: 5 strategies probation, 0 forward trades |\n| BOND | 0% WR n=9 (antigravity_bond only) | Breakthrough (ZN=F/ZF=F mean_rev_atr PF~2.0 Tier1; yield_curve + tsmom pilots) | FRED key + wire bond_scanner + TSMOM sidecar + 3 research pilots | P0: kill emission until viable strategy; P3 new probation no track |\n| FUTURES | Zombie (overlaps COMMODITY) | Covered in COMMODITY hunt wins | Unified taxonomy (no separate tile) | P1: zombie tile misleading (EAGLE) |\n\n**Key cross-cutting from 90-day + EAGLE + May29 hunt:**\n- Data rot is #1 blocker (38.97% PnL mismatch, 56k ghosts, 82d stale resolver, trust NULL 99.99%) \u2014 12+ P0s in incidents.html. Fix before any sizing.\n- VIX/realised-vol regime tag at submission (HIGH impact, S effort, from persona survey + plans).\n- Bounded hot-streak exemption + audit trail.\n- Profitable-but-filtered lane (P0 OVERALL).\n- All new strategies must pass Wire-Up Rule (production caller in scanner/production path) + hypothesis_registry pre-reg.\n\n---\n\n## Consolidated Action Tracker (Go-To: /audit/incidents.html)\n\nThe table below is the **live task list** extracted/synthesized from:\n- May 15 90-day per-class plans (M- ids, QW-1..5)\n- May 27 remaining/quick-wins/synthesis\n- May 29 strategy hunt + buried winners (newly wired + fixes)\n- Cross-checked vs the 45 incidents + 47 enhancements already in `/audit/incidents.html` (as of 2026-05-29 05:00 UTC refresh).\n\n**New entries proposed below should be seeded into the INCIDENT_*/ENHANCEMENT_* tables via `tools/audit_pick_funnel/cli_track.py` (see commands at bottom).** Until seeded + nightly render, they appear only in this MD and the injected section on the local incidents.html snapshot.\n\n| Plan Ref | Class | Type | Sev/Impact | Title (for incidents.html) | Target | Component / From | Why / Success | Existing Overlap? |\n|----------|-------|------|------------|----------------------------|--------|------------------|---------------|-------------------|\n| QW-1 + 90d EQUITY | EQUITY | ENH | HIGH / S | Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py | 2026-06-05 | alpha_engine/equity_strategies.py + vix_regime_gate.py | +57% PF / -69% MDD on LC universe (PF5.37 VIX<20). Backtest proven. | None \u2014 new from plans |\n| QW-2 + 90d ETF | ETF | ENH | HIGH / S | Wire vix_regime_gate.is_safe_regime() into etf_sector_emitter (and other ETF emitters) | 2026-06-03 | alpha_engine/etf_sector_emitter.py | Backtest PF 2.05\u21923.22. Zero code for gate itself. | None |\n| M-001 + QW-3 | CRYPTO | ENH | HIGH / S | Enable BTC UTC-hour death-zone filter (08-09Z reject, 22Z boost) in score_booster.py | 2026-06-02 | alpha_engine/score_booster.py (CRYPTO_UTC_HOUR_FILTER) | Memory n>1000: clear edge. Env-gated, no behavior change until flag. | None (was in master plan) |\n| QW-4 | CRYPTO | ENH | MED / S | Set CRYPTO_ONCHAIN_MOMENTUM_ENABLED=1 in GHA env (MVRV-Z + Glassnode) | 2026-06-01 | .github/workflows/* + crypto_onchain_momentum.py | Module exists, default-OFF; high-signal on BTC/ETH majors per 90d research. | None |\n| QW-5 + 90d COMMODITY | COMMODITY | INC | P0 | Recompute + canonicalize COMMODITY asset_class_health from deduped independent COT cycles only (post PR#994) | 2026-06-04 | audit_trail/ + dashboard_generator + money_ready_verdict | Pre-dedup contamination still driving class PF/WR (3 existing P0s). 5 deduped trades only. | Overlaps existing \"COT paper pilot over-emission\" + \"COMMODITY headline contaminated\" |\n| M-007 + 90d FOREX | FOREX | INC | P1 | Add FOREX_HARD_DISABLE env + enforce majors-only (EURUSD/GBPUSD/USDCHF/JPYUSD) for paper phase | 2026-06-08 | alpha_engine/config.py + non_crypto_policy + production_scanner | 93% USDJPY concentration + broad losers killing class. | Overlaps \"All FOREX losers except one concentrated\" P0 |\n| 90d BOND + Cycle17 | BOND | ENH | HIGH / S | Wire bond_scanner.py (yield_momentum, duration_rotation, mean_reversion) + promote ZN=F/ZF=F mean_rev_atr from hunt | 2026-06-10 | alpha_engine/bond_scanner.py + production_scanner.py | 0% class \u2192 Tier1 pilots (PF~2.0). FRED key still needed for full. | Overlaps \"kill BOND emission\" P0 + \"wire bond_scanner\" existing ENH |\n| 90d + hunt universal | OVERALL | ENH | HIGH / M | Add VIX/realised-vol regime tag at every pick submission (quality_gates + scanner) | 2026-06-07 | alpha_engine/quality_gates.py + production_scanner + score_booster | ~30% picks in wrong regime (persona survey). Cheapest single lift per 7 personas. | New (referenced in incidents as HIGH GATE but not yet seeded from 90d) |\n| May29 hunt + buried | OVERALL | INC | P1 | mega_mutation stale block in negative_knowledge_registry.py removed (was blocking PF2.97 winner) | 2026-05-29 (done) | alpha_engine/negative_knowledge_registry.py | Fixed in 2026-05-29 session; verify no other stale blocks remain. | New (post 90d) |\n| 90d CRYPTO + EAGLE | CRYPTO | INC | P1 | Enforce liquid-core ADV >$1M + source whitelist (dna_winner + mega_mutation + kimi + baby_forward only) in production path | 2026-06-12 | alpha_engine/asset_class.py + production_scanner + quality_gates | 179 symbols incl heavy memes/alts diluting edge. 90d plan core recommendation. | Partial overlap with existing quan drag + concentration incidents |\n| All classes post-hunt | OVERALL | ENH | MED / M | Refresh all 8 per-class 90-day plan pages + consolidated MD + incidents task section after Cycle 17 wiring + buried fixes | 2026-06-01 | reports/90day_plan_2026-05-15.html + this MD + audit_dashboard/incidents.html | Plans (May15) predate the strategy hunt breakthroughs and data quality fixes. incidents.html must stay the single source of truth for tasks. | New meta-task |\n\n**Full proposed CLI commands (run with DB_PASS_STOCKS in env from ~/dbpasses.txt):**\n\n```bash\n# Example for one (copy/adapt for all 8+ above)\npython tools/audit_pick_funnel/cli_track.py enhancement \\\n  --class EQUITY \\\n  --title \"Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py\" \\\n  --description \"From 90-day plan QW-1 + reports/equity_vix_regime_breakthrough_20260513.md. Backtest: VIX<22 PF 4.55 / MDD 16.8% vs baseline 2.82/24%. Wire one caller per Wire-Up Rule.\" \\\n  --category GATE --impact HIGH --effort S --status BACKLOG \\\n  --proposed-by \"grok-4.3-xai + 90day-plan-consolidation-2026-05-29\" \\\n  --success-metric \"EQUITY 14d/48d WR >=55% with VIX gate active;"
      },
      {
        "enhancement_id": 2,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Split LARGE_CAP_EQUITY from PENNY research-only names",
        "description": "The main EQUITY sleeve should reflect the clean large-cap / regime-controlled strategy set, while penny/meme names live in a separate research-only bucket. This improves both reporting honesty and future gate calibration.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Main EQUITY class no longer contains penny/meme symbols; parent-class PF/WR and gate calibration are recomputed on the clean universe.",
        "target_release": "2026-06-12 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 1,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Promote pead_equity from shadow to probation",
        "description": "Only WF-VERIFIED equity strategy (62.2% OOS WR). Currently dormant.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "ring-2.6-1t",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "pead_equity emits >=30 forward picks in first 30 days post-promotion with WR>=55%",
        "target_release": "2026-06-01 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-28 23:29:48",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 6,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Quarantine EQUITY cta_replicator dead weight (n=6 WR 0%)",
        "description": "Added (EQUITY, cta_replicator) to emitter_whitelist HARDCODED_TOXIC_PAIRS. pf_registry policy_clean: EQUITY cta_replicator n=6 WR=0% PF=0. Per-class only (FOREX cta_replicator allowlist intact). Held the broader cta_* kill (cta_golden_cross n=3 too small; cta_tsmom_blend/donchian_55/cross_asset_tsmom have zero EQUITY rows = mutation-before-kill).",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "EQUITY clean cohort WR/PF lifts as dead weight stops emitting",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "4470fbf0ed",
        "created_at": "2026-06-09 04:20:23",
        "updated_at": "2026-06-09 04:20:23",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 7,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "picks-now: demote STRONG_BUY on negative analyst upside + validity-filter SAFEST bucket",
        "description": "STRONG_BUY/BUY with analyst upside < -10% (e.g. MU -22%) now demoted to WATCH. SAFEST bucket now requires rvol>0 and excludes AVOID/WATCH so a degenerate flat series (ARB-USD, no data) cannot float to the top.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "6053b3ebb7",
        "created_at": "2026-06-09 04:20:23",
        "updated_at": "2026-06-09 04:20:23",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": "https://findtorontoevents.ca/audit/picks-now.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 4,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "Consensus Quick Picks (CQP) \u2014 analyst/13F/moat aggregation methodology",
        "description": "Pure-consensus (no backtest) stability-tilted basket from 6-model panel. Top: MSFT(6/6), BRKB(5/6), SGOV, VOO; AVOID INTC, NVDA divisive. Documented in ejaguiar1_backtests.eagle2_consensus_picks + eagle2_methodology.",
        "category": "SCORING",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Live verification vs TipRanks/Morningstar before sizing.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:14",
        "updated_at": "2026-06-02 14:17:14",
        "implemented_at": null,
        "link_md_path": "reports/CONSENSUS_QUICK_PICKS_2026-06-02.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 5,
        "asset_class": "STOCKS",
        "source_ref": null,
        "title": "EQUITY cross-sectional momentum (clean-bar) \u2014 MIXED: high-beta + survivorship, not promoted",
        "description": "48mo clean-bar mega-cap momentum: PF3.53 Sharpe1.65 but #111 attribution vs SPY FAILS (alpha t=1.98<2.0, beta1.13=amplified equity beta) + survivorship bias (hindsight universe). Not promoted. Needs point-in-time universe to be a real test.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 03:50:46",
        "updated_at": "2026-06-04 03:50:46",
        "implemented_at": null,
        "link_md_path": "reports/equity_momentum_backtest_2026-06-03.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "ETFS": [
      {
        "enhancement_id": 4,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "ETF cross-sectional momentum is closest to first Tier-2 class \u2014 accumulate live n",
        "description": "etf_cross_sectional_momentum (Jegadeesh-Titman 12-1 top-3, long-only) backtests PF 2.05/WR 70.5%/Sharpe 0.97/MDD 16.1%, slippage-robust (PF holds 1.99-2.05 across 5 friction scenarios), n=122mo 2015-2026. Already registered in alpha_engine/etf_scanner.py and ETF_CS_MOM_ENABLED defaults ON. Only gap is live n (currently n=4). Long/short variant FAILS (PF 0.94) \u2014 keep long-only.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4.8(money-maker-readyv2 fleet)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "n>=30 resolved at PF>=1.5/WR>=55%/MDD<18% -> promote off probation (most likely first Tier-2 class)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-31 02:24:46",
        "updated_at": "2026-05-31 02:24:46",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 8,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "ETF dual-momentum (clean-bar) \u2014 forward-shadow candidate, clears attribution+bootstrap",
        "description": "PR-merged backtest: 48mo walk-forward dual-momentum PF3.57 Sharpe1.62 MDD-12.4%; clears #111 attribution vs SPY (t=2.36 IR0.37 beta0.34=real alpha), bootstrap PF CI[1.64,9.69], cost-robust 20bps. FIRST sleeve to clear the gate-stack.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "VALIDATED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Forward 2x4wk within +-10% backtest PF via #67 shadow ladder before sizing.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-03 18:56:39",
        "updated_at": "2026-06-03 19:36:16",
        "implemented_at": null,
        "link_md_path": "reports/etf_dual_momentum_backtest_2026-06-03.md",
        "link_url": null,
        "link_github_ref": "509",
        "enhancement_plan": "PR#502 backtest + PR#509 purged-embargoed OOS CV: train PF2.30/Sharpe1.08, test PF5.37/Sharpe2.16, HOLDS_OOS no decay. Clears attribution(t2.36)+bootstrap[1.64,9.69]+cost+OOS. Caveat test n=19<20 for test-only attribution. Next: M-107 pre-register + #67 forward shadow <=0.5%."
      },
      {
        "enhancement_id": 7,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "ETF verified dual momentum forward pilot (shadow, n accumulation)",
        "description": "Lab WF OOS PASS (PF ~1.21); production merge OFF. Daily etf_dual_momentum_pilot.py logs virtual signals to etf_dual_momentum_paper_log.jsonl. First OPEN 2026-06-02 XLK; n_closed=0; promotion_ready=false until n\u2265100, PF\u22651.5, WR\u226550% (shadow checkpoint n\u226530).",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "VALIDATED",
        "proposed_by": "cursor-composer-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "etf_forward_stats_latest.json shows n_closed\u226530 shadow checkpoint then n\u2265100 promotion gate.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:30",
        "updated_at": "2026-06-02 14:17:30",
        "implemented_at": null,
        "link_md_path": "updates/2026-06-02-eagle2-operational-next-steps.md",
        "link_url": "https://findtorontoevents.ca/audit/data/pilot_forward_dashboard.json",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 3,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "Make VIX-gated sector rotation the primary ETF sleeve",
        "description": "EAGLE review identified ETF sector rotation plus VIX gating as the cleanest underused edge in the current repo. Existing mixed ETF sources dilute that cleaner regime-aware strategy story.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "ETF rotation becomes a first-class tracked sleeve with rolling PF/WR/MDD and contributes the majority of ETF class quality picks.",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 5,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "EAGLE2: ETF dual momentum forward pilot \u2014 shadow n\u219230 then 100",
        "description": "Only multi-class lab Tier-2 pass (PF 1.60, n=104, WF OOS PASS). Admit FORWARD_PILOT_ONLY. Gate: etf_forward_stats.promotion_ready, MDD<15%, live PF \u22650.9\u00d7 backtest, \u22640.5% shadow capital.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "ACCEPTED",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": "etf_verified_dual_momentum",
        "proposed_features": null,
        "success_metric": "Forward paper n\u226530 (then 100); promotion_ready=true in verified_strategies/paper_pilot/.",
        "target_release": "2026-06-30",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "updates/eagle2-swarm-session-summary-2026-06-02.html",
        "link_url": "https://findtorontoevents.ca/audit/",
        "link_github_ref": "PR #458",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 6,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "ETF dual-momentum sleeve + 24-month walk-forward",
        "description": "ETF is best lab edge / low concentration but n=3 live. Build absolute+relative dual-momentum (SPY/EFA/AGG/GLD), monthly rebalance, 24mo walk-forward.",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "VALIDATED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "n>=30 forward, MDD<15%, PF holds out-of-sample.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:13",
        "updated_at": "2026-06-02 18:41:32",
        "implemented_at": null,
        "link_md_path": "reports/QUICK_PICK_METHODOLOGY_SWARM_2026-06-02.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "Pilot already exists: verified_strategies/paper_pilot/etf_dual_momentum_pilot.py (daily BUY/HOLD/EXIT, logs jsonl, sidecar ETF_VERIFIED_DUAL_MOMENTUM_ENABLED OFF until forward n>=30 + MDD<15% per updates/2026-05-31-etf-promotion-path.md). Remaining: accumulate forward n>=30 then enable."
      },
      {
        "enhancement_id": 2,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "Verify regime_adaptive x ETF Wilson CI 49.7-91.8% claim",
        "description": "Roo's session reports that regime_adaptive x ETF is the only persona-asset pair passing all statistical gates (binomial significance + positive PnL + positive Sharpe), Wilson CI 49.7-91.8%. Cross-reference with the prior 30d ETF PF=3.88 'STRONG RECENT' regime-shift thesis. If confirmed, this is the first non-COMMODITY production candidate after the COMMODITY edge debunk.",
        "category": "",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Wilson CI reproduced from regime_adaptive persona's ETF picks; binomial significance test documented",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:32",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_multi_ai_panel_meta_review.md",
        "link_url": "audit_dashboard/data/research/edge_significance_gate.json",
        "link_github_ref": null,
        "enhancement_plan": "# Multi-AI Panel Meta-Review \u2014 2026-05-25\n\n**TL;DR:** Two parallel multi-AI panels reached **opposite verdicts on the same COMMODITY question.** The difference was prompt grounding, not model capability. A 5-engine NVIDIA NIM panel (working from pre-dedup numbers) called COMMODITY the system's #1 alpha; a 3-engine codex/grok/gemini panel (shown the same numbers PLUS the leakage signals) classified it `DATA_QUALITY_LEAKAGE` at ~90% confidence. **Independent in-house verification confirmed the leakage panel.** This is the most important lesson of the session: multi-AI consensus is only as good as the prompt grounding.\n\n---\n\n## The two panels\n\n### Panel A \u2014 NVIDIA NIM 5-model (DeepSeek/Roo session, 2026-05-25)\n\nEngines: Kimi K2.6, GPT-OSS-120B, GLM-5.1, Nemotron Super 49B, Mistral Nemotron.\nPrompt: per-class WR/PF/Sharpe + 7d/30d/90d windows, **without** leakage signals or dedup history.\nVerdict: **5/5 agreed COMMODITY is #1 alpha, allocate 20-30%.**\nReport: [`reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`](2026-05-25_asset_class_edge_audit_deepseek_session.md) (Roo's audit).\n\n### Panel B \u2014 Codex / Grok / Gemini (this session, also 2026-05-25)\n\nEngines: OpenAI Codex, xAI Grok, Google Gemini.\nPrompt: same JSON cell **PLUS** the leakage concerns (single-symbol concentration, train_pf vs holdout_pf discontinuity, source-system mechanics, prior 2026-05-16 autopsy).\nVerdict: **3/3 agreed `DATA_QUALITY_LEAKAGE`, ~90% confidence**, recognized as residue from already-rejected H-001 (CFTC COT publication-lag look-ahead, REJECTED 2026-05-20 under M-095).\nReports: [`reports/2026-05-25_commodity_cot_edge_triangulation.md`](2026-05-25_commodity_cot_edge_triangulation.md) + per-engine consult files.\n\n---\n\n## In-house ground-truth verification\n\nThree independent investigations (committed `28d221116` / `406661cf9` / `a93dec2af`) confirmed Panel B:\n\n1. **DB trade-level forensics:** 87.6% (120/137) of the headline cell is one symbol (CT=F cotton); other 17 trades are wheat/soybean losses. 136 of 137 trades fall in the last 30 days, 0 in 60-90d. Mean win is +0.0255%/trade via PRICE_RESOLVED intraday drift \u2014 realistic CT=F round-trip cost (~2-4 bp) wipes the edge. Effective independent Bonferroni tests \u2248 7, not 200 (25 cells share identical trade-id sets).\n2. **Filter pipeline tracing:** `top_edges.py` runs no dedup; the same source/cell collapsed PF 20.54 \u2192 0.17 after 72h COT dedup in a 2026-05-16 swarm autopsy (cited in `quality_gates.py:5575-5581`).\n3. **Merged-cohort `build_pf_registry` rerun** (the new MySQL flag `PF_REGISTRY_INCLUDE_DB=1` from `a93dec2af`): COMMODITY by_asset_class_policy_clean_net PF moves from 0.18 \u2192 **0.937** when DB is merged \u2014 well under T2's 1.5 bar, matching Panel B's prediction range of 0.3-1.0.\n\n**The \"edge\" was already known-bad as of 2026-05-20.** Panel A reconstituted it from ungrounded numbers.\n\n---\n\n## What Panel A got right anyway\n\nRoo's session surfaced one striking finding that does NOT depend on the COMMODITY cell and is worth following up:\n\n> **648 un-gated picks went 0-for-648 over the 6-day window (2026-05-16 \u2192 21), destroying \u2212825% PnL.**\n> - `moderate_confidence`: 455 picks, 0.0% WR, \u22121.47%/pick avg\n> - `low_confidence`: 193 picks, 0.0% WR, \u22120.82%/pick avg\n> - Meanwhile 300 gated picks (elite_a + profitable_tp) generated +994%.\n\nIf real, this is the single most powerful filter in the system \u2014 gating alone would flip aggregate PnL from \u2212825% to +994% on the same emission. **But** the same scientific standard that debunked COMMODITY applies here:\n\n- 0-for-455 on `moderate_confidence` is statistically implausible (p \u2248 0.5^455) on *honest* trades; the bucket may be **defined by what falls through all gates**, i.e., circular by construction.\n- Need to verify whether the live system actually allocates capital to those buckets or just labels them \u2014 if they're already filtered upstream, \"gate them\" is a no-op.\n\n**Action queued (NOT yet executed):** drop a verification agent on the quality-tier definition + verify the 0-for-648 claim against `audit_dashboard/data/dashboard_data.json::picks.recent_closed` filtered to 2026-05-16..21.\n\nRoo also re-confirmed (in agreement with the .md sweep this session):\n- `regime_adaptive \u00d7 ETF` is the only persona\u00d7asset pair passing all statistical gates (Wilson CI 49.7\u201391.8%).\n- `kimi_signal_tracking` is the top source-system by total PnL over the 6-day window (168 picks, WR 53.6%, +257.34%).\n- `aggregated_picks` shows 74.1% WR at n=58 \u2014 interesting but underpowered for Bonferroni.\n\nThese three findings deserve verification with the same rigor that killed the COMMODITY claim.\n\n---\n\n## Lessons\n\n1. **Prompt grounding is the variable, not model count.** Both panels used reputable models. The 5-engine panel reached a wrong consensus because it never saw the leakage evidence. Future multi-AI consults must include all known leakage signals + a sentence: *\"Be skeptical; if the data suggests one symbol/source dominates, flag concentration risk.\"*\n2. **Multi-AI consensus does not increase signal-to-noise on ungrounded prompts.** It compounds whatever bias is in the prompt by averaging plausible-sounding fabrications.\n3. **The H-001 rejection on 2026-05-20 was real progress** \u2014 the system *had* this lesson on file. It just didn't propagate to Panel A's prompt context. The fix is operational, not statistical: when running `consult-nvidia-models` or `consult-cloudflare-models`, mandate inclusion of `reports/hypothesis_registry.json` rejected-hypothesis entries that intersect the prompt's asset class.\n4. **The `build_pf_registry` MySQL extension (`a93dec2af`) is the load-bearing infrastructure fix here.** It collapsed two divergent cohorts (top_edges raw n=1219 vs verdict policy-clean n=28) into one dedup+policy+NET pipeline. Future \"edge claims\" can be A/B'd against the merged cohort by toggling `PF_REGISTRY_INCLUDE_DB=1`.\n\n---\n\n## Action list\n\n| # | Action | Owner | Status |\n|---|---|---|---|\n| 1 | Save Roo's session report to canonical `reports/` path | session | DONE \u2014 `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md` |\n| 2 | Write this meta-review reconciling the two panels | session | DONE \u2014 this file |\n| 3 | Add an `updates/index.html` card | session | DONE \u2014 same commit |\n| 4 | Add incident \"Multi-AI panel grounding failure\" + 2 enhancements to seed_incidents_enhancements.py | session | DONE \u2014 same commit |\n| 5 | Verify the 0-for-648 quality-gate claim against raw DB cohort | follow-up agent | OPEN |\n| 6 | Verify `regime_adaptive \u00d7 ETF` Wilson CI 49.7-91.8% claim | follow-up agent | OPEN |\n| 7 | Verify `kimi_signal_tracking` / `aggregated_picks` per-source claims | follow-up agent | OPEN |\n| 8 | Update CLAUDE.md guardrail to require leakage-context in multi-AI prompts | session | OPEN |\n\n---\n\n## Related artifacts\n\n- Roo's original report: `audit_reports/ASSET_CLASS_EDGE_AUDIT_2026-05-25.md` and the canonical copy at `reports/2026-05-25_asset_class_edge_audit_deepseek_session.md`\n- Codex/Grok/Gemini panel synthesis: `reports/2026-05-25_commodity_cot_edge_triangulation.md`\n- Per-engine consult files: `reports/2026-05-25_commodity_cot_edge_consult_{codex,gemini,grok}.md`\n- DB-level forensics: `reports/2026-05-25_commodity_cot_edge_deep_dive.md`\n- Filter-pipeline tracing: `reports/2026-05-25_policy_clean_vs_top_edges_funnel.md`\n- Pre-registered hypothesis H-101 with kill criteria: `reports/hypothesis_registry.json`\n- MySQL registry extension: `tools/build_pf_registry.py` (gated by `PF_REGISTRY_INCLUDE_DB=1`)"
      },
      {
        "enhancement_id": 1,
        "asset_class": "ETFS",
        "source_ref": null,
        "title": "Add real GEX + 0DTE flow data for gamma_raid persona",
        "description": "spotgamma/unusualwhales feeds. gamma_raid currently narrates gamma without consuming it; persona is already at WR 67.9% \u2014 real data should lift it further.",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude+persona_survey",
        "related_persona_id": "gamma_raid",
        "proposed_features": null,
        "success_metric": "gamma_raid persona shows >=3pp WR improvement after data integration",
        "target_release": "2026-09-26",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_persona_improvement_survey.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Persona Improvement Survey \u2014 AI Tournament\n\n**Date:** 2026-05-25\n**Author:** investigation subagent\n**Goal alignment:** Goal #1 (phenomenal performance across all asset classes on `findtorontoevents.ca/audit`)\n**Mandate:** for every persona in the AI tournament with n>=5 picks, identify the data inputs / external signals that would most improve pick quality.\n\n## Sources\n\n- Picks corpus: `audit_dashboard/data/ai_tournament_picks_latest.json` (1,411 records, 1,055,454 bytes, snapshot 2026-05-25 02:08 UTC). 1,105 records carry a `persona_id`; 306 do not (legacy `data_source` rows from `alpha_engine` and `quan_engine`, plus a handful of free-text-thesis grok3 rows that the cerebras/gpt4o submission layer never tagged).\n- New submissions (2026-05-25, added on top of the dashboard snapshot for completeness, even though none reach n>=5 individually):\n  - `data/ai_tournament/submissions/mercury_v2_20260525.json` \u2014 20 picks across 5 hedge-fund personas (voss_global_macro, reed_long_short_fundamental, sharma_quant_momentum, chen_thematic_ai_growth, lang_value_contrarian; 4 picks each).\n  - `data/ai_tournament/submissions/grok3_hedgefund_20260525.json` \u2014 12 picks across 6 grok-prefixed personas (vargas/chen/sharma/okonkwo/reyes/li; 1\u20133 picks each).\n  - `data/ai_tournament/submissions/qwen3_6_max_hedgefund_20260525.json` \u2014 18 picks across 6 qwen-prefixed personas (value_hunter/momentum_rider/quant_systematic/macro_global/contrarian/carry_yield; 3 picks each).\n- Registry: `tools/ai_tournament/persona_registry.py` (17 canonical personas as of 2026-05-25; the picks corpus also references ~25 additional `persona_id` strings used by various model adapters that have not been canonicalised into the registry yet \u2014 e.g. `momentum_momentum`, `quality_compound`, `growth_at_reasonable_price`, `gamma_raid`, `cta_trend`, `bayesian_breakout`, `inventory_cycle`, `macro_hedge`, `purchasing_power_parity`, `seasonal_pattern`, `bankruptcy_recovery`, `correlation_breaker`, `cross_sectional_momentum`, `supply_demand`, `volatility_breakout`, `grid_trader`). The improvement recommendations below treat the picks-corpus tag as the source of truth.\n\n**Note on overrepresentation:** several personas are dominated by a single model resubmitting near-identical picks at each daily tournament tick (e.g. `breakout_scanner` n=204 is 51\u00d7FIL + 51\u00d7ZK + 51\u00d7NEAR + variations \u2014 all from `grok3`). I flag those cases inline and treat them as effectively n\u22484 of *distinct* signals, even though the raw n is large.\n\n## Qualifying personas (n>=5)\n\n22 personas reach the threshold from the dashboard snapshot. None of the brand-new hedge-fund personas (`voss_*`, `reed_*`, `sharma_*`, `chen_*`, `lang_*`, `grok_*`, `qwen_*`) yet do \u2014 they sit at n=1\u20134 and are listed at the end as \"watchlist\".\n\n---\n\n### 1. `breakout_scanner` \u2014 Breakout Scanner (technical_breakout)\n\n- **n=204, resolved=2, WR=100% (2/2), avg unrealized PnL = n/a (mostly OPEN)** \u2014 but n is misleading: 51+51+51 are repeated FIL/ZK/NEAR submissions by `grok3`, so true distinct-signal n \u2248 12.\n- **Asset class:** CRYPTO 100%. **Direction:** 99.5% LONG.\n- **Already relies on:** `ml_crypto_pred` confidence score, \"multi-timeframe EMA alignment\", volume signal, 20-day consolidation range.\n- **Top 3 missing inputs:**\n  1. **True consolidation-width vs realised volatility** \u2014 the persona claims \"20-day consolidation\" but never publishes the \u03c3-of-\u03c3 ratio that distinguishes a real coiled range from a slow drift. Adding the Bollinger-Bandwidth percentile (current width vs prior 250d distribution) would let it reject the false breakouts that dominate crypto.\n  2. **Order-book depth / spot CVD divergence at the breakout candle** \u2014 every entry would be filterable by \"were aggressive market buys present, or was the breakout passive-bid-lift on thin book?\" Without this the persona is short-volatility in disguise.\n  3. **Funding-rate and perp basis at entry** \u2014 crypto breakouts often coincide with funding>0.05%/8h, which converts the trade into a carry headwind. A funding-percentile filter (top decile = stand aside) would lift hold-period PnL.\n- **Tier promotion plan:** WR=100% on n=2 is meaningless. Need n>=50 distinct breakouts (not symbol repeats) over 60+ days; require BB-width percentile <30 AND funding-percentile <70 to fire. Target PF>1.8 on CRYPTO is realistic with those filters; without them the persona will likely settle at PF~0.9 (the strategy is paying spread + funding without an edge source).\n- **Cross-persona conflict:** directly contradicts `mean_reversion` and `volatility_breakout` on the same crypto symbols (`mean_reversion` is long BTC where `breakout_scanner` is long alt-breakouts \u2014 different symbol universes, low overlap). Conflicts with `bayesian_breakout` (same setup, different probabilistic gate) \u2014 ~30% same-symbol overlap on ETH/SOL/AVAX; the bayesian variant adds a Bayesian posterior that the raw scanner lacks.\n\n### 2. `momentum_momentum` \u2014 3-6mo Equity Momentum (technical_momentum, grok3)\n\n- **n=92, resolved=33, WR=57.6%, avg PnL +4.03%.** EQUITY 100%, 89% LONG.\n- **Heavy-tail caveat:** 46/92 are repeated MU submissions; distinct-symbol n \u2248 25.\n- **Already relies on:** `growth_stock_screener` engine, \"relative strength in semiconductor sector\", confidence scores 70\u201384%.\n- **Top 3 missing inputs:**\n  1. **Sector-relative momentum z-score** (vs SPY or sector ETF), not just absolute price action. MU is bid because semis are bid; the persona should fade MU when its z-score vs SOXX collapses, which is the historical reversal tell.\n  2. **Earnings-revision breadth from FactSet/Refinitiv (or Yahoo as a proxy)** \u2014 momentum that is *not* backed by upward EPS revisions is the classic late-stage failure pattern. Adding a simple \"3-month EPS revision up?\" gate is the largest single edge available.\n  3. **Short-interest delta / days-to-cover** \u2014 momentum that is short-interest-driven mean-reverts violently. Filter out names with SI>15% of float.\n- **Tier promotion plan:** already past T2 on WR (57.6%). Need PF \u2014 current avg PnL/avg loss not computed, but trend looks positive. With EPS-revisions filter and a beta-neutral pair (short SPY same-dollar), this persona can stretch to T1 territory. Need n>=50 distinct symbols (not 25\u00d7 MU).\n- **Conflict:** sometimes contradicts `mean_reversion` (same EQUITY symbols on opposite sides) and `growth_at_reasonable_price` (NVDA: GARP says long, momentum says long \u2014 agreement, not conflict). Overlaps `cross_sectional_momentum` heavily (~40% symbol overlap with PYPL/ADBE/CRM); the persona-level redundancy is real and should be collapsed.\n\n### 3. `quality_compound` \u2014 Quality Compounder (fundamental_quality, cursor_agent)\n\n- **n=68, resolved=17, WR=100% (17/17), avg unrealized PnL \u22122.39%.** Universe is 51\u00d7 NVDA + 17\u00d7 IWM. Distinct n=2. WR=100% is an artefact of duplicate resolution.\n- **Already relies on:** Two-Day RSI Reversal signal, \"ROE>15%, debt/equity<0.5\" (per persona name) \u2014 though the actual thesis text is technical, not fundamental.\n- **Top 3 missing inputs:**\n  1. **Actual fundamental data** \u2014 ROIC, FCF/EV, accruals quality (Sloan ratio). The persona is named \"quality_compound\" but the thesis cites RSI(2), which is the opposite of a fundamental gate. Either rename it or wire in a Compustat-equivalent feed (Yahoo `getKeyStatistics` is a free starting point).\n  2. **Universe expansion** \u2014 running this on NVDA alone is concentration risk, not a strategy. Needs a quality screen producing 20\u201350 names per quarter.\n  3. **Pricing-power signal** \u2014 gross-margin expansion YoY is the cleanest moat tell; without it the persona is just buying expensive stocks.\n- **Tier promotion plan:** the WR=100% is unreal; needs forced de-duplication of repeated picks. After de-dup, expect PF~1.1 (the \u22122.39% avg PnL is a tell). Promotion requires rebuilding the entry gate from fundamentals.\n- **Conflict:** overlaps `growth_at_reasonable_price` (NVDA) and `chen_thematic_ai_growth` (NVDA) \u2014 three personas chasing the same name through different doors.\n\n### 4. `growth_at_reasonable_price` \u2014 GARP (cerebras_llama4)\n\n- **n=67, resolved=11, WR=54.5%, avg PnL \u22123.31%.** EQUITY 100%, 92% LONG. 56/67 are NVDA repeats; distinct n \u2248 12.\n- **Already relies on:** \"PEG<1.5, revenue growth>15%\", MACD divergence, 20-day EMA.\n- **Top 3 missing inputs:**\n  1. **Forward PEG using consensus EPS** (current persona is using trailing PEG inferred from thesis text). Forward PEG is the only GARP signal that backtests.\n  2. **Capex intensity vs FCF conversion** \u2014 a true GARP filter rejects companies with rising capex/revenue and stagnant FCF (the AMD/INTC failure pattern). Without this gate, GARP repeatedly picks tops in capex-heavy semis.\n  3. **Sell-side estimate-dispersion** \u2014 narrow dispersion + upward revisions = high-quality GARP signal; wide dispersion = noise. Free proxy via Yahoo analyst count + high/low estimate range.\n- **Tier promotion plan:** avg PnL \u22123.31% is sub-floor. Need forward-EPS + dispersion filters before any size; expect to halve trade count and double per-trade edge. Target WR 55%+ at PF>1.4.\n- **Conflict:** redundant with `quality_compound` and `value_investor`; rename to `growth_momentum_combo` or merge.\n\n### 5. `trend_follower` \u2014 Trend Follower (technical_trend, deepseek_v4)\n\n- **n=67, resolved=55 (highest resolution rate of any persona), WR=34.5%, avg PnL +4.20%.** EQUITY 100%, 70% LONG.\n- **Already relies on:** \"20/50 EMA cross\", ADX>25, \"higher lows/higher highs\", ISM/credit-spreads (per thesis text).\n- **Top 3 missing inputs:**\n  1. **ADX-regime gate** \u2014 the registry says \"require ADX>25 at entry\" but the WR=34.5% suggests it isn't actually being enforced. Add a hard pre-trade ADX measurement.\n  2. **Cross-sectional trend strength** \u2014 trend-following alpha lives in being long *the strongest* trends and short the weakest, not in catching every cross. A 12-1 momentum ranking + decile filter is the canonical fix.\n  3. **Volatility-target sizing input (annualised \u03c3 over last 21d)** \u2014 equal-dollar s"
      }
    ],
    "CRYPTO": [
      {
        "enhancement_id": 10,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Backfill signal_ts + provenance so gates run on auditable data",
        "description": null,
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CRYPTO signal_ts 0->100% recoverable, source->100% (144 rows now auditable)",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "484",
        "created_at": "2026-06-03 00:50:28",
        "updated_at": "2026-06-03 00:50:28",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "484",
        "enhancement_plan": "PR #484 report-only proposer tools/backfill_provenance.py. Swarm-chosen. Real coverage: CRYPTO signal_ts/source ->100%, OVERALL signal_ts ->44.8%. Next (human-approved): review --out proposals, apply-PR writes fields back with _backfilled flag, then re-run resolver_hygiene_check + enable FDR/single-source enforce on the now-auditable CRYPTO sample."
      },
      {
        "enhancement_id": 9,
        "asset_class": "CRYPTO",
        "source_ref": "EAGLE_*.MD 2026-06-02",
        "title": "Promote macd_rsi_m048 to PROMOTED_STRATEGIES after 30d shadow",
        "description": "Promote macd_rsi_m048 to PROMOTED_STRATEGIES after 30d shadow",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7",
        "related_persona_id": null,
        "proposed_features": "{\"pf\": 3.33, \"wr\": 0.754, \"source\": \"zoo EAGLE2 summary\", \"closed_picks\": 65, \"walk_forward\": \"5/5 folds PASS\"}",
        "success_metric": "First crypto strategy on PROMOTED_STRATEGIES allowlist after sustained 30d forward PF",
        "target_release": "Capital staging step 2",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:32",
        "updated_at": "2026-06-02 14:17:32",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 2,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Enable BTC UTC-hour death-zone filter (M-001 / QW-3) in score_booster.py - reject 08-09Z, boost 22Z",
        "description": "From reports/asset_class_90day_plan_CRYPTO_2026-05-15.md + 2026-05-27_quick_wins + consolidated_plan_2026-05-29.md + EAGLE sessions. Memory n>1000 shows clear WR edge in those hours. Env-gated (CRYPTO_UTC_HOUR_FILTER). Highest-leverage low-effort CRYPTO item from 90-day plans.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BTC subset WR lift >=4pp in first 14 days post-enable; measurable in smart_picks + asset_class_health",
        "target_release": "2026-06-02 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:37:14",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/asset_class_consolidated_plan_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Asset Class Consolidated Plan & Live Task Tracker \u2014 2026-05-29 Update\n\n**Supersedes / augments:** `reports/90day_plan_2026-05-15.html` (and its 8 per-class pages) + `reports/2026-05-27_world_class_gameplan_synthesis.md` + `reports/2026-05-27_remaining_items_from_90day_plans.md` + `reports/2026-05-27_quick_wins_from_90day_plans.md` + May 29 autonomous strategy hunt (Cycles 2-17).\n\n**Primary Goal (per CLAUDE.md Goal #1):** Institutional/hedge-fund-grade performance (Tier 2 minimum: PF>1.5 / WR>50 / MDD<20; long-term Tier 1 Renaissance target) across **ALL** asset classes on `/audit`. 0/6 classes met T2 on 2026-05-27 canonical policy-clean data (`pf_registry.by_asset_class_policy_clean_net`, `money_ready_verdict.json`). 3 classes degraded in prior 72h. CRYPTO collapsed 78.9%\u219238% WR over 14d with 0 closed in 48h.\n\n**Status as of 2026-05-29 (post Cycles 2-17):** All 6 asset classes now have **proven edge** (1,064+ strategy-symbol combos tested; 16 strategies wired to production including universal vol_mr, macd_divergence, momentum_breakout, ichimoku, yield_curve_proxy, range_trading + prior). COMMODITY strongest in recent MC validation (multiple Tier 1 on GC/SI/CL). BOND/FOREX breakthroughs (ZN=F mean_rev_atr PF 2.11; USDCHF rsi_mr PF 4.28). However, **data quality rot (PnL mismatches, ghosts, stale resolver, trust NULL) still blocks real-money sizing**. `money_ready_verdict` remains empty. incidents.html is now the canonical live task tracker for these plans.\n\n**See also:** `/audit/incidents.html` (this page is the go-to for latest per-plan tasks), `reports/BURIED_WINNERS_AUDIT_2026-05-29.md`, `memory/2026-05-29.md`, per-class 90-day pages under `reports/90day_pages_2026-05-15/`.\n\n---\n\n## Current Per-Class Verdict (Policy-Clean + Recent Hunt)\n\n| Class | Pre-May29 (May27 synthesis) | Post-Cycle17 Hunt (2026-05-29) | 90-Day Plan Focus (May15) | Key Open Risks (from incidents.html + plans) |\n|-------|-----------------------------|--------------------------------|---------------------------|---------------------------------------------|\n| CRYPTO | PF 0.96 / WR ~31-39% (n=210 policy-clean); 78.9% Smart-Picks disputed (raw DB 39% WR) | Edge proven (ml_crypto_predictor DSR 0.95+, multiple new wired); still sub-T2 overall | Liquid core + ADV gate + on-chain + BTC hour filter (M-001) + quan drag quarantine (M-004) + confidence inversion | 4 P1 incidents (DSR small-n, meta explosion, leakage edges PF99+, quan_scalp PF0.42 drag); 91.7% concentration in claude_gainer_st (only 3 closed rows) |\n| EQUITY | INSUFF-N (n=33) | Edge proven (stocks_rsi2_pullback 62.9% OOS n=70 + new momentum/rsi_mr wired) | VIX regime gate (QW-1), PEAD promote, large-cap clean universe, UEPS wiring | P0: pead_equity shadow; P1: penny pollution, UEPS zero emits, scanner routing gaps |\n| COMMODITY | INSUFF / pre-clean COT contamination (11.9% WR / PF0.29 class) | Strongest class (CL=F RSI-MR PF7.2, GC/SI multiple Tier1; COT dedup in progress) | Post-dedup COT recompute (QW-5), diversify beyond CT=F (M-039), carry-momo sidecar | P0: COT over-emission + pre-clean headline contamination (3 incidents); COMMODITY tile still unsafe |\n| FOREX | FAIL (PF0.55 / WR40% n=53; USDJPY 55% concentration) | Breakthrough (USDCHF rsi_mr PF4.28 Tier1; 5 new strategies incl. ichimoku/yield) | HARD_DISABLE + majors-only paper + live carry_yield + CFTC COT for futures | P0: all but one loser + 93% USDJPY conc (1 incident); SL too tight; forex_carry unwired |\n| ETF | INSUFF-N (n=2) | Edge via dual-momentum + VIX overlay backtests | VIX<25 gate wire (QW-2), pick 1-2 for probation | P2: 5 strategies probation, 0 forward trades |\n| BOND | 0% WR n=9 (antigravity_bond only) | Breakthrough (ZN=F/ZF=F mean_rev_atr PF~2.0 Tier1; yield_curve + tsmom pilots) | FRED key + wire bond_scanner + TSMOM sidecar + 3 research pilots | P0: kill emission until viable strategy; P3 new probation no track |\n| FUTURES | Zombie (overlaps COMMODITY) | Covered in COMMODITY hunt wins | Unified taxonomy (no separate tile) | P1: zombie tile misleading (EAGLE) |\n\n**Key cross-cutting from 90-day + EAGLE + May29 hunt:**\n- Data rot is #1 blocker (38.97% PnL mismatch, 56k ghosts, 82d stale resolver, trust NULL 99.99%) \u2014 12+ P0s in incidents.html. Fix before any sizing.\n- VIX/realised-vol regime tag at submission (HIGH impact, S effort, from persona survey + plans).\n- Bounded hot-streak exemption + audit trail.\n- Profitable-but-filtered lane (P0 OVERALL).\n- All new strategies must pass Wire-Up Rule (production caller in scanner/production path) + hypothesis_registry pre-reg.\n\n---\n\n## Consolidated Action Tracker (Go-To: /audit/incidents.html)\n\nThe table below is the **live task list** extracted/synthesized from:\n- May 15 90-day per-class plans (M- ids, QW-1..5)\n- May 27 remaining/quick-wins/synthesis\n- May 29 strategy hunt + buried winners (newly wired + fixes)\n- Cross-checked vs the 45 incidents + 47 enhancements already in `/audit/incidents.html` (as of 2026-05-29 05:00 UTC refresh).\n\n**New entries proposed below should be seeded into the INCIDENT_*/ENHANCEMENT_* tables via `tools/audit_pick_funnel/cli_track.py` (see commands at bottom).** Until seeded + nightly render, they appear only in this MD and the injected section on the local incidents.html snapshot.\n\n| Plan Ref | Class | Type | Sev/Impact | Title (for incidents.html) | Target | Component / From | Why / Success | Existing Overlap? |\n|----------|-------|------|------------|----------------------------|--------|------------------|---------------|-------------------|\n| QW-1 + 90d EQUITY | EQUITY | ENH | HIGH / S | Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py | 2026-06-05 | alpha_engine/equity_strategies.py + vix_regime_gate.py | +57% PF / -69% MDD on LC universe (PF5.37 VIX<20). Backtest proven. | None \u2014 new from plans |\n| QW-2 + 90d ETF | ETF | ENH | HIGH / S | Wire vix_regime_gate.is_safe_regime() into etf_sector_emitter (and other ETF emitters) | 2026-06-03 | alpha_engine/etf_sector_emitter.py | Backtest PF 2.05\u21923.22. Zero code for gate itself. | None |\n| M-001 + QW-3 | CRYPTO | ENH | HIGH / S | Enable BTC UTC-hour death-zone filter (08-09Z reject, 22Z boost) in score_booster.py | 2026-06-02 | alpha_engine/score_booster.py (CRYPTO_UTC_HOUR_FILTER) | Memory n>1000: clear edge. Env-gated, no behavior change until flag. | None (was in master plan) |\n| QW-4 | CRYPTO | ENH | MED / S | Set CRYPTO_ONCHAIN_MOMENTUM_ENABLED=1 in GHA env (MVRV-Z + Glassnode) | 2026-06-01 | .github/workflows/* + crypto_onchain_momentum.py | Module exists, default-OFF; high-signal on BTC/ETH majors per 90d research. | None |\n| QW-5 + 90d COMMODITY | COMMODITY | INC | P0 | Recompute + canonicalize COMMODITY asset_class_health from deduped independent COT cycles only (post PR#994) | 2026-06-04 | audit_trail/ + dashboard_generator + money_ready_verdict | Pre-dedup contamination still driving class PF/WR (3 existing P0s). 5 deduped trades only. | Overlaps existing \"COT paper pilot over-emission\" + \"COMMODITY headline contaminated\" |\n| M-007 + 90d FOREX | FOREX | INC | P1 | Add FOREX_HARD_DISABLE env + enforce majors-only (EURUSD/GBPUSD/USDCHF/JPYUSD) for paper phase | 2026-06-08 | alpha_engine/config.py + non_crypto_policy + production_scanner | 93% USDJPY concentration + broad losers killing class. | Overlaps \"All FOREX losers except one concentrated\" P0 |\n| 90d BOND + Cycle17 | BOND | ENH | HIGH / S | Wire bond_scanner.py (yield_momentum, duration_rotation, mean_reversion) + promote ZN=F/ZF=F mean_rev_atr from hunt | 2026-06-10 | alpha_engine/bond_scanner.py + production_scanner.py | 0% class \u2192 Tier1 pilots (PF~2.0). FRED key still needed for full. | Overlaps \"kill BOND emission\" P0 + \"wire bond_scanner\" existing ENH |\n| 90d + hunt universal | OVERALL | ENH | HIGH / M | Add VIX/realised-vol regime tag at every pick submission (quality_gates + scanner) | 2026-06-07 | alpha_engine/quality_gates.py + production_scanner + score_booster | ~30% picks in wrong regime (persona survey). Cheapest single lift per 7 personas. | New (referenced in incidents as HIGH GATE but not yet seeded from 90d) |\n| May29 hunt + buried | OVERALL | INC | P1 | mega_mutation stale block in negative_knowledge_registry.py removed (was blocking PF2.97 winner) | 2026-05-29 (done) | alpha_engine/negative_knowledge_registry.py | Fixed in 2026-05-29 session; verify no other stale blocks remain. | New (post 90d) |\n| 90d CRYPTO + EAGLE | CRYPTO | INC | P1 | Enforce liquid-core ADV >$1M + source whitelist (dna_winner + mega_mutation + kimi + baby_forward only) in production path | 2026-06-12 | alpha_engine/asset_class.py + production_scanner + quality_gates | 179 symbols incl heavy memes/alts diluting edge. 90d plan core recommendation. | Partial overlap with existing quan drag + concentration incidents |\n| All classes post-hunt | OVERALL | ENH | MED / M | Refresh all 8 per-class 90-day plan pages + consolidated MD + incidents task section after Cycle 17 wiring + buried fixes | 2026-06-01 | reports/90day_plan_2026-05-15.html + this MD + audit_dashboard/incidents.html | Plans (May15) predate the strategy hunt breakthroughs and data quality fixes. incidents.html must stay the single source of truth for tasks. | New meta-task |\n\n**Full proposed CLI commands (run with DB_PASS_STOCKS in env from ~/dbpasses.txt):**\n\n```bash\n# Example for one (copy/adapt for all 8+ above)\npython tools/audit_pick_funnel/cli_track.py enhancement \\\n  --class EQUITY \\\n  --title \"Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py\" \\\n  --description \"From 90-day plan QW-1 + reports/equity_vix_regime_breakthrough_20260513.md. Backtest: VIX<22 PF 4.55 / MDD 16.8% vs baseline 2.82/24%. Wire one caller per Wire-Up Rule.\" \\\n  --category GATE --impact HIGH --effort S --status BACKLOG \\\n  --proposed-by \"grok-4.3-xai + 90day-plan-consolidation-2026-05-29\" \\\n  --success-metric \"EQUITY 14d/48d WR >=55% with VIX gate active;"
      },
      {
        "enhancement_id": 7,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "EAGLE2: Shadow crypto VWAP reversion + Bollinger MR after resolver clean",
        "description": "WF: vwap_reversion PASS (PF 1.32, n=516 OOS); bollinger_mr PASS (PF 1.67). Hyro pilot sleeves gated by CRYPTO_VERIFIED_* env. Donchian FAIL \u2014 do not enable.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-cli-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Resolver GREEN + 14d CRYPTO panel stable; shadow sleeves emit with env flags only.",
        "target_release": "2026-06-23",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:04",
        "updated_at": "2026-06-02 14:17:04",
        "implemented_at": null,
        "link_md_path": "verified_strategies/WALKFORWARD_REPORT.json",
        "link_url": null,
        "link_github_ref": "PR #458",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 4,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "R:R optimize atr_percentile_gate (58.6% WR, PF 1.10 -> 1.67 via tighter SL)",
        "description": "atr_percentile_gate has a winning entry (58.6% WR, n=29 policy-clean) but losers exceed winners (avgW +0.42% vs avgL -0.54%, |W/L|=0.78), capping PF at 1.10. Loss-cap counterfactual: SL @ -0.5% -> PF 1.47; SL @ -0.4% -> PF 1.67 (crosses Tier-2). Winsorization is upper-bound; needs price-path backtest. [VALIDATED 2026-05-31: price-path backtest REFUTES tighter SL \u2014 real PF at 0.4/0.5% = 0.93/1.07, NOT 1.67/1.47. PF rises only as stop LOOSENS (0.8% -> PF 1.28, still sub-T2). 100% BTCUSDT single-symbol scalp. Lead = looser stops + n>=100. See reports/rr_backtest_validation_2026-05-31.md]",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "VALIDATED",
        "proposed_by": "claude-opus-4.8(money-maker-readyv2)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "PF>=1.5 on price-path backtest with tightened SL, n>=30 forward",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-31 02:03:24",
        "updated_at": "2026-05-31 02:12:38",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 5,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "R:R + exit-timing fix for crypto_liquidity_wick_reversal_v1 (PF 1.50 -> 2.96)",
        "description": "Closest CRYPTO money-ready sleeve: n=43, 58.1% WR, PF 1.498 policy-clean. 40% of exits are TIME (timeout) not TP/SL (TP:10 SL:16 TIME:17) -> exit timing mistuned. Loss-cap counterfactual: SL @ -0.5% -> PF 2.47; SL @ -0.4% -> PF 2.96. Needs n>=100 to reach money-ready. [VALIDATED 2026-05-31: price-path backtest REFUTES tighter SL \u2014 real PF at 0.4-0.8% = 0.22-0.64 vs baseline 1.50 (whipsaw). Do NOT tighten; explore wider stops 1.0-2.0%. 100% BTCUSDT. See reports/rr_backtest_validation_2026-05-31.md]",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "VALIDATED",
        "proposed_by": "claude-opus-4.8(money-maker-readyv2)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "n>=100 forward at PF>=1.5, WR>=55%; reduce TIME-exit share below 20%",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-31 02:03:24",
        "updated_at": "2026-05-31 02:12:38",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 3,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Meta-Labeler Gate for CRYPTO production wiring (drop leaky features + confidence inversion first)",
        "description": "From daily_ideas_edge_sweep_2026_05_17.md + synthesis + this Daily Ideas subagent. Wire meta_labeler.py into passes_active_gate; CRITICAL drop of forward_wr (leak) + confidence (inverted) from features. Partial shipped (code exists) but production gate wiring OPEN. +8-15pp WR projected on filtered subset.",
        "category": "GATE",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CRYPTO filtered subset WR/PF lift; no leakage in forward tests",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:46:01",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_edge_sweep_2026_05_17.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Daily Ideas Edge Sweep \u2014 2026-05-17\n\n**Sources:** 19 DAILY_IDEAS files from 12+ AI agents (Antigravity, Cursor, Grok, Kimi, HuggingFace, Nvidia, Ollama, OpenMonoAgent, XiaoMi Mimo, GH Copilot, Kilocode, LMArena)  \n**Synthesized:** 2026-05-17T22:00Z  \n**Method:** Read all files; ranked by multi-agent consensus count + evidence quality + effort-to-impact\n\n## Current Performance Baseline\n\n| Class | PF | WR | n | Status |\n|---|---|---|---|---|\n| EQUITY | 1.56 | 51.5% | 425 | Tier 2 confirmed |\n| COMMODITY | 2.57 | 62.6% | 337 | Tier 1 candidate (CT=F probation) |\n| CRYPTO | 1.31\u20131.36 filtered | 46.5% | 7935 | Sub-floor; qualification gate needed |\n| ETF | 1.32 | 57% | 107 | Approaching T2 |\n| FOREX | 0.27 | 46.2% | 1355 | HARD_DISABLE active |\n| BOND | 0.66 | 54.5% | 11 | Too thin (n<30) |\n\n---\n\n## TOP 15 IDEAS \u2014 Ranked by Multi-Agent Consensus\n\n### #1: CRYPTO UTC-Hour Death-Zone Filter\n**Consensus:** 4 agents (Ollama, Edge-per-class, KimiCLI, Synthesis-05-15)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** XS  \n22:00 UTC = 61.2% WR; 08-09 UTC = 0% WR. Block 06:00\u201311:00 UTC.  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 6645\u20136682  \n**Projected impact:** +14pp WR for CRYPTO class\n\n---\n\n### #2: Remove MySQL Silent-Fail from Sync Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Fix | **Effort:** XS (5 min)  \n`|| echo \"non-fatal\"` in `mysql-trading-sync.yml` line 43 swallows DB failures silently.  \n**Status: \ud83d\udd04 OPEN** \u2014 5-minute fix  \n**Projected impact:** Catch DB outages instantly instead of hours later\n\n---\n\n### #3: COMMODITY COT Post-Dedup Verification Gate\n**Consensus:** 6 agents (Grok, Edge-per-class, KimiCLI, Cursor, Kilocode, Ollama)  \n**Asset class:** COMMODITY | **Type:** Gate | **Effort:** S  \n`multi_asset_cot` PF=21.33 may contain duplicated 144 trades \u2192 phantom 88.2% WR. Gate sizing behind MATCH + DSR\u22650.85 until ab_analysis confirms.  \n**Status: \u2705 DISPATCHED** \u2014 `ab_analysis.yml` runs daily; awaiting result  \n**Projected impact:** Unlock COMMODITY Tier 1 OR reveal artifact (PF 2.57 real either way)\n\n---\n\n### #4: CRYPTO Strategy-Level Drag Auto-Quarantine\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Synthesis-05-15, OpenMono, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** S  \nAuto-quarantine CRYPTO strategies >40% volume with PF<1.0 (kimi_signal_tracking PF=\u2212930%, crypto_winners PF=0.39).  \n**Status: \u2705 SHIPPED** \u2014 `quality_gates.py` lines 5643\u20135690  \n**Projected impact:** +15-20pp WR for CRYPTO class\n\n---\n\n### #5: FOREX Hard-Disable Until Carry-Factor Ships\n**Consensus:** 5 agents (Edge-per-class, Kilocode, Synthesis-05-15, Cursor, Ollama)  \n**Asset class:** FOREX | **Type:** Safety gate | **Effort:** XS  \nWR=46.2%, PF=0.27, \u22121026% total PnL. Carry-factor (G10 high-yield long/low-yield short) is only documented 30-yr edge.  \n**Status: \u2705 SHIPPED** \u2014 `FOREX_HARD_DISABLE=1` active  \n**Projected impact:** Eliminate \u22121026% bleed; unlock FOREX T2 when carry ships\n\n---\n\n### #6: Replace Confidence with trust_score in HIGH_CONVICTION Gate\n**Consensus:** 5 agents (Edge-per-class, KimiCLI, Cursor, Synthesis-05-15, OpenMono)  \n**Asset class:** CRYPTO, ETF | **Type:** Score adjustment | **Effort:** S  \nConfidence is anti-edge on CRYPTO/ETF (higher conf \u2192 lower WR). Gate on `trust_score >= 0.6` instead.  \n**Status: \u2705 SHIPPED** \u2014 `template.html` HC filter patched  \n**Projected impact:** Prevent anti-edge picks from reaching dashboard\n\n---\n\n### #7: DB Freshness Guardian Workflow\n**Consensus:** 5 agents (Cursor, KimiCode, Copilot, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S  \nHourly GH Action checks live_picks/resolver_outputs/bt_backtest_trades stale > 6h; auto-opens GitHub Issue.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/db-freshness-guardian.yml`  \n**Projected impact:** MTTR hours \u2192 <15 min\n\n---\n\n### #8: EQUITY PEAD (Post-Earnings Drift) Strategy\n**Consensus:** 3 agents (Edge-per-class, Synthesis-05-15, Copilot)  \n**Asset class:** EQUITY | **Type:** New strategy | **Effort:** M  \nLong-only top-100 EQUITY in 2-day post-earnings window. Earnings feed via yfinance `ticker.earnings_dates`.  \n**Status: \u2705 SHIPPED** \u2014 `alpha_engine/strategies/pead_equity.py` wired  \n**Projected impact:** +3-8pp WR for EQUITY top-100 cohort\n\n---\n\n### #9: Schema Drift Watchdog Workflow\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** S (3h)  \nNightly snapshot `information_schema` metadata \u2192 diff against version-controlled baseline in `schemas/`. CI fails on unexplained drift.  \n**Status: \ud83d\udd04 OPEN** \u2014 High value, no workflow found  \n**Projected impact:** Catch silent schema regressions before dashboard generator fails\n\n---\n\n### #10: Cross-DB Strategy Key Consistency Audit\n**Consensus:** 4 agents (Cursor, KimiCode, GH-Copilot, Synthesis-05-15)  \n**Asset class:** Infrastructure | **Type:** Infrastructure | **Effort:** M  \nCompare ejaguiar1_backtests vs ejaguiar1_stocks: strategies in backtests but never emitting live; symbol-class label mismatches.  \n**Status: \u2705 SHIPPED** \u2014 `.github/workflows/cross-db-audit.yml` daily  \n**Projected impact:** Reduce false-confidence misclassification 40-60%\n\n---\n\n### #11: Confidence Calibration Tracking Table\n**Consensus:** 4 agents (KimiCode, Cursor, LMArena, Synthesis-05-15)  \n**Asset class:** CRYPTO, ETF | **Type:** New data table | **Effort:** S  \n`at_confidence_calibration` MySQL table: per-bucket actual WR vs expected WR. Auto-quarantine when calibration_gap < \u221250pp.  \n**Status: \ud83d\udd04 BLOCKED** \u2014 Needs `at_pick_outcomes` table + DB_PASS_BACKTESTS secret  \n**Projected impact:** +8-12pp class WR by auto-preventing inverted-confidence picks\n\n---\n\n### #12: Meta-Labeler Gate for CRYPTO\n**Consensus:** 3 agents (LMArena, Cursor, Ollama)  \n**Asset class:** CRYPTO | **Type:** New filter | **Effort:** M  \nWire `meta_labeler.py` into `quality_gates.passes_active_gate`. CRITICAL: must drop `forward_wr` (look-ahead leak) and `confidence` (known-inverted) from feature vector first.  \n**Status: \u2705 PARTIAL** \u2014 `meta_labeler.py` shipped with leak fixes; production gate wiring OPEN  \n**Projected impact:** +8-15pp WR for CRYPTO filtered subset (high risk if gates miss)\n\n---\n\n### #13: Regime-Alignment Multiplier + Overconfidence Decay\n**Consensus:** 3 agents (LMArena, Gemini, Ollama)  \n**Asset class:** All | **Type:** Score adjustment | **Effort:** S  \n`score_booster.py`: decay score \u00d70.8 when `abs(score) > THRESH`; regime multiplier \u00d70.6 counter-regime / \u00d71.2 with-regime.  \n**Status: \u2705 SHIPPED** \u2014 `_apply_overconfidence_decay` in `alpha_engine/score_booster.py`  \n**Projected impact:** +2-4pp WR on top-quartile cohorts; prevents overconfidence blowups\n\n---\n\n### #14: FOREX Carry-Factor Scaffold\n**Consensus:** 4 agents (Edge-per-class, Kilocode, Synthesis-05-15, Ollama)  \n**Asset class:** FOREX | **Type:** New strategy (research) | **Effort:** M (1 day)  \n`tools/research/forex_carry.py`: long G10 high-yielders, short low-yielders; monthly rebalance. AQR-documented 30-yr Sharpe 0.7-0.9. FRED_API_KEY already in secrets.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet scaffolded; FOREX hard-disabled until this ships  \n**Projected impact:** Only documented path from FOREX PF=0.27 to Tier 2\n\n---\n\n### #15: ETF Sector Rotation + Risk-Parity Overlay\n**Consensus:** 3 agents (Edge-per-class, Kilocode, Synthesis-05-15)  \n**Asset class:** ETF | **Type:** New strategy | **Effort:** M (1 day)  \nRelative-strength across 11 SPDRs (XLF/XLE/XLK/...) + Black-Litterman risk-parity. Wire into `alpha_engine/etf_rotation_strategy.py`.  \n**Status: \ud83d\udd04 OPEN** \u2014 Not yet shipped  \n**Projected impact:** ETF PF 1.32\u21922.1 (target); n=107 accumulating toward T2 floor\n\n---\n\n## Multi-Agent Consensus Summary\n\n| Idea | Agents | Status |\n|---|---|---|\n| CRYPTO UTC-hour filter | 4 | \u2705 SHIPPED |\n| MySQL silent-fail removal | 4 | \ud83d\udd04 OPEN (5 min) |\n| COMMODITY COT post-dedup gate | 6 | \u2705 DISPATCHED |\n| CRYPTO drag auto-quarantine | 5 | \u2705 SHIPPED |\n| FOREX hard-disable | 5 | \u2705 SHIPPED |\n| Replace confidence w/ trust_score | 5 | \u2705 SHIPPED |\n| DB freshness guardian | 5 | \u2705 SHIPPED |\n| Cross-DB consistency audit | 4 | \u2705 SHIPPED |\n| Schema drift watchdog | 4 | \ud83d\udd04 OPEN (3h) |\n| Confidence calibration table | 4 | \ud83d\udd04 BLOCKED (DB secret) |\n\n## Critical Blockers (User Action Required)\n\n| Blocker | Impact | Fix |\n|---|---|---|\n| `DB_PASS_BACKTESTS` not in GH secrets | Blocks 4 P0/P1 items | `gh secret set DB_PASS_BACKTESTS` |\n| MySQL password rotation | P0 Security \u2014 `stocks123` in git history | Manual action (see PR #1086) |\n| CT=F PROBATION review | 2026-06-06 deadline | Run `ab_analysis.yml` daily; calendar reminder |\n\n## Open Action Items (Autonomous \u2014 No Approval Needed)\n\n1. **Remove MySQL silent-fail** (XS, 5 min) \u2014 `mysql-trading-sync.yml` line 43\n2. **Schema drift watchdog** (S, 3h) \u2014 new `schemas/baseline/` + workflow  \n3. **FOREX carry-factor scaffold** (M, 1 day) \u2014 `tools/research/forex_carry.py`\n4. **ETF sector rotation** (M, 1 day) \u2014 `alpha_engine/etf_rotation_strategy.py`"
      },
      {
        "enhancement_id": 6,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "OOS forward-validate genome mega_mutation_MACD_RSI before trusting PF 4.28",
        "description": "genome mega_mutation_MACD_RSI: n=210, 68.6% WR, PF 4.276, diversified (JUPUSDT 21.9%), balanced L/S (107/103), clean exits (TP 141 SL 65). EXCLUDED from policy-clean (collapses to n=1) because genome is a genetic-evolution BACKTEST engine -> likely in-sample overfit. If it survives strict OOS forward test it is the strongest CRYPTO money-ready candidate.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4.8(money-maker-readyv2)",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "OOS forward n>=50 holds PF>=2.0, WR>=55%, no single-symbol >30%",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-31 02:03:25",
        "updated_at": "2026-05-31 02:03:25",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 1,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Add on-chain + funding-rate feed (Glassnode + Coinglass)",
        "description": "Top recommendation from persona-improvement survey: addresses CLAUDE.md CRYPTO PF 1.25 -> T2 PF 1.5 gap. Covers 6 crypto personas (~453 picks).",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "claude+persona_survey",
        "related_persona_id": "ring_crypto_native",
        "proposed_features": null,
        "success_metric": "CRYPTO PF improves from 1.25 to >=1.5 on next 90d sample with funding+whale gates applied",
        "target_release": "2026-08-27",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:07",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_persona_improvement_survey.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Persona Improvement Survey \u2014 AI Tournament\n\n**Date:** 2026-05-25\n**Author:** investigation subagent\n**Goal alignment:** Goal #1 (phenomenal performance across all asset classes on `findtorontoevents.ca/audit`)\n**Mandate:** for every persona in the AI tournament with n>=5 picks, identify the data inputs / external signals that would most improve pick quality.\n\n## Sources\n\n- Picks corpus: `audit_dashboard/data/ai_tournament_picks_latest.json` (1,411 records, 1,055,454 bytes, snapshot 2026-05-25 02:08 UTC). 1,105 records carry a `persona_id`; 306 do not (legacy `data_source` rows from `alpha_engine` and `quan_engine`, plus a handful of free-text-thesis grok3 rows that the cerebras/gpt4o submission layer never tagged).\n- New submissions (2026-05-25, added on top of the dashboard snapshot for completeness, even though none reach n>=5 individually):\n  - `data/ai_tournament/submissions/mercury_v2_20260525.json` \u2014 20 picks across 5 hedge-fund personas (voss_global_macro, reed_long_short_fundamental, sharma_quant_momentum, chen_thematic_ai_growth, lang_value_contrarian; 4 picks each).\n  - `data/ai_tournament/submissions/grok3_hedgefund_20260525.json` \u2014 12 picks across 6 grok-prefixed personas (vargas/chen/sharma/okonkwo/reyes/li; 1\u20133 picks each).\n  - `data/ai_tournament/submissions/qwen3_6_max_hedgefund_20260525.json` \u2014 18 picks across 6 qwen-prefixed personas (value_hunter/momentum_rider/quant_systematic/macro_global/contrarian/carry_yield; 3 picks each).\n- Registry: `tools/ai_tournament/persona_registry.py` (17 canonical personas as of 2026-05-25; the picks corpus also references ~25 additional `persona_id` strings used by various model adapters that have not been canonicalised into the registry yet \u2014 e.g. `momentum_momentum`, `quality_compound`, `growth_at_reasonable_price`, `gamma_raid`, `cta_trend`, `bayesian_breakout`, `inventory_cycle`, `macro_hedge`, `purchasing_power_parity`, `seasonal_pattern`, `bankruptcy_recovery`, `correlation_breaker`, `cross_sectional_momentum`, `supply_demand`, `volatility_breakout`, `grid_trader`). The improvement recommendations below treat the picks-corpus tag as the source of truth.\n\n**Note on overrepresentation:** several personas are dominated by a single model resubmitting near-identical picks at each daily tournament tick (e.g. `breakout_scanner` n=204 is 51\u00d7FIL + 51\u00d7ZK + 51\u00d7NEAR + variations \u2014 all from `grok3`). I flag those cases inline and treat them as effectively n\u22484 of *distinct* signals, even though the raw n is large.\n\n## Qualifying personas (n>=5)\n\n22 personas reach the threshold from the dashboard snapshot. None of the brand-new hedge-fund personas (`voss_*`, `reed_*`, `sharma_*`, `chen_*`, `lang_*`, `grok_*`, `qwen_*`) yet do \u2014 they sit at n=1\u20134 and are listed at the end as \"watchlist\".\n\n---\n\n### 1. `breakout_scanner` \u2014 Breakout Scanner (technical_breakout)\n\n- **n=204, resolved=2, WR=100% (2/2), avg unrealized PnL = n/a (mostly OPEN)** \u2014 but n is misleading: 51+51+51 are repeated FIL/ZK/NEAR submissions by `grok3`, so true distinct-signal n \u2248 12.\n- **Asset class:** CRYPTO 100%. **Direction:** 99.5% LONG.\n- **Already relies on:** `ml_crypto_pred` confidence score, \"multi-timeframe EMA alignment\", volume signal, 20-day consolidation range.\n- **Top 3 missing inputs:**\n  1. **True consolidation-width vs realised volatility** \u2014 the persona claims \"20-day consolidation\" but never publishes the \u03c3-of-\u03c3 ratio that distinguishes a real coiled range from a slow drift. Adding the Bollinger-Bandwidth percentile (current width vs prior 250d distribution) would let it reject the false breakouts that dominate crypto.\n  2. **Order-book depth / spot CVD divergence at the breakout candle** \u2014 every entry would be filterable by \"were aggressive market buys present, or was the breakout passive-bid-lift on thin book?\" Without this the persona is short-volatility in disguise.\n  3. **Funding-rate and perp basis at entry** \u2014 crypto breakouts often coincide with funding>0.05%/8h, which converts the trade into a carry headwind. A funding-percentile filter (top decile = stand aside) would lift hold-period PnL.\n- **Tier promotion plan:** WR=100% on n=2 is meaningless. Need n>=50 distinct breakouts (not symbol repeats) over 60+ days; require BB-width percentile <30 AND funding-percentile <70 to fire. Target PF>1.8 on CRYPTO is realistic with those filters; without them the persona will likely settle at PF~0.9 (the strategy is paying spread + funding without an edge source).\n- **Cross-persona conflict:** directly contradicts `mean_reversion` and `volatility_breakout` on the same crypto symbols (`mean_reversion` is long BTC where `breakout_scanner` is long alt-breakouts \u2014 different symbol universes, low overlap). Conflicts with `bayesian_breakout` (same setup, different probabilistic gate) \u2014 ~30% same-symbol overlap on ETH/SOL/AVAX; the bayesian variant adds a Bayesian posterior that the raw scanner lacks.\n\n### 2. `momentum_momentum` \u2014 3-6mo Equity Momentum (technical_momentum, grok3)\n\n- **n=92, resolved=33, WR=57.6%, avg PnL +4.03%.** EQUITY 100%, 89% LONG.\n- **Heavy-tail caveat:** 46/92 are repeated MU submissions; distinct-symbol n \u2248 25.\n- **Already relies on:** `growth_stock_screener` engine, \"relative strength in semiconductor sector\", confidence scores 70\u201384%.\n- **Top 3 missing inputs:**\n  1. **Sector-relative momentum z-score** (vs SPY or sector ETF), not just absolute price action. MU is bid because semis are bid; the persona should fade MU when its z-score vs SOXX collapses, which is the historical reversal tell.\n  2. **Earnings-revision breadth from FactSet/Refinitiv (or Yahoo as a proxy)** \u2014 momentum that is *not* backed by upward EPS revisions is the classic late-stage failure pattern. Adding a simple \"3-month EPS revision up?\" gate is the largest single edge available.\n  3. **Short-interest delta / days-to-cover** \u2014 momentum that is short-interest-driven mean-reverts violently. Filter out names with SI>15% of float.\n- **Tier promotion plan:** already past T2 on WR (57.6%). Need PF \u2014 current avg PnL/avg loss not computed, but trend looks positive. With EPS-revisions filter and a beta-neutral pair (short SPY same-dollar), this persona can stretch to T1 territory. Need n>=50 distinct symbols (not 25\u00d7 MU).\n- **Conflict:** sometimes contradicts `mean_reversion` (same EQUITY symbols on opposite sides) and `growth_at_reasonable_price` (NVDA: GARP says long, momentum says long \u2014 agreement, not conflict). Overlaps `cross_sectional_momentum` heavily (~40% symbol overlap with PYPL/ADBE/CRM); the persona-level redundancy is real and should be collapsed.\n\n### 3. `quality_compound` \u2014 Quality Compounder (fundamental_quality, cursor_agent)\n\n- **n=68, resolved=17, WR=100% (17/17), avg unrealized PnL \u22122.39%.** Universe is 51\u00d7 NVDA + 17\u00d7 IWM. Distinct n=2. WR=100% is an artefact of duplicate resolution.\n- **Already relies on:** Two-Day RSI Reversal signal, \"ROE>15%, debt/equity<0.5\" (per persona name) \u2014 though the actual thesis text is technical, not fundamental.\n- **Top 3 missing inputs:**\n  1. **Actual fundamental data** \u2014 ROIC, FCF/EV, accruals quality (Sloan ratio). The persona is named \"quality_compound\" but the thesis cites RSI(2), which is the opposite of a fundamental gate. Either rename it or wire in a Compustat-equivalent feed (Yahoo `getKeyStatistics` is a free starting point).\n  2. **Universe expansion** \u2014 running this on NVDA alone is concentration risk, not a strategy. Needs a quality screen producing 20\u201350 names per quarter.\n  3. **Pricing-power signal** \u2014 gross-margin expansion YoY is the cleanest moat tell; without it the persona is just buying expensive stocks.\n- **Tier promotion plan:** the WR=100% is unreal; needs forced de-duplication of repeated picks. After de-dup, expect PF~1.1 (the \u22122.39% avg PnL is a tell). Promotion requires rebuilding the entry gate from fundamentals.\n- **Conflict:** overlaps `growth_at_reasonable_price` (NVDA) and `chen_thematic_ai_growth` (NVDA) \u2014 three personas chasing the same name through different doors.\n\n### 4. `growth_at_reasonable_price` \u2014 GARP (cerebras_llama4)\n\n- **n=67, resolved=11, WR=54.5%, avg PnL \u22123.31%.** EQUITY 100%, 92% LONG. 56/67 are NVDA repeats; distinct n \u2248 12.\n- **Already relies on:** \"PEG<1.5, revenue growth>15%\", MACD divergence, 20-day EMA.\n- **Top 3 missing inputs:**\n  1. **Forward PEG using consensus EPS** (current persona is using trailing PEG inferred from thesis text). Forward PEG is the only GARP signal that backtests.\n  2. **Capex intensity vs FCF conversion** \u2014 a true GARP filter rejects companies with rising capex/revenue and stagnant FCF (the AMD/INTC failure pattern). Without this gate, GARP repeatedly picks tops in capex-heavy semis.\n  3. **Sell-side estimate-dispersion** \u2014 narrow dispersion + upward revisions = high-quality GARP signal; wide dispersion = noise. Free proxy via Yahoo analyst count + high/low estimate range.\n- **Tier promotion plan:** avg PnL \u22123.31% is sub-floor. Need forward-EPS + dispersion filters before any size; expect to halve trade count and double per-trade edge. Target WR 55%+ at PF>1.4.\n- **Conflict:** redundant with `quality_compound` and `value_investor`; rename to `growth_momentum_combo` or merge.\n\n### 5. `trend_follower` \u2014 Trend Follower (technical_trend, deepseek_v4)\n\n- **n=67, resolved=55 (highest resolution rate of any persona), WR=34.5%, avg PnL +4.20%.** EQUITY 100%, 70% LONG.\n- **Already relies on:** \"20/50 EMA cross\", ADX>25, \"higher lows/higher highs\", ISM/credit-spreads (per thesis text).\n- **Top 3 missing inputs:**\n  1. **ADX-regime gate** \u2014 the registry says \"require ADX>25 at entry\" but the WR=34.5% suggests it isn't actually being enforced. Add a hard pre-trade ADX measurement.\n  2. **Cross-sectional trend strength** \u2014 trend-following alpha lives in being long *the strongest* trends and short the weakest, not in catching every cross. A 12-1 momentum ranking + decile filter is the canonical fix.\n  3. **Volatility-target sizing input (annualised \u03c3 over last 21d)** \u2014 equal-dollar s"
      },
      {
        "enhancement_id": 8,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "CRYPTO paper watch \u2014 tournament + SHORT bias (no production capital)",
        "description": "Swarm SUPPORT: deepseek_v4/gpt4o tournament sleeves; CRYPTO SHORT ~67% vs LONG ~33% on reviewed cohort. Capital decision NO-GO on production /audit sizing until money_ready clears.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "VALIDATED",
        "proposed_by": "cursor-composer-eagle2-2026-06-02",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "Paper trades only; production Smart Picks flag stays off; 14d/48h recency checked before any promotion.",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-02 14:17:30",
        "updated_at": "2026-06-02 14:17:30",
        "implemented_at": null,
        "link_md_path": "reports/best_picks_swarm_review_2026-06-02.json",
        "link_url": "https://findtorontoevents.ca/audit/ai-tournament.html",
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 11,
        "asset_class": "CRYPTO",
        "source_ref": null,
        "title": "Wire TSMOM vol-scaled sleeve after intrabar resolver fix",
        "description": null,
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "PF_LB95 > 1.05 on rolling 60d forward-pilot before sizing",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "42e403e79d",
        "created_at": "2026-06-09 04:20:23",
        "updated_at": "2026-06-09 04:20:23",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "tsmom_volscaled WIRED 2026-06-09 into academic_strategies_emitter as CRYPTO paper-pilot (forward_test_only=True). Reaches prod via academic-strategies-daily.yml cron -> priority_picks_emitter:79. Signal-based sign-flip exit structurally avoids TIME_EXPIRED. Code shipped; promotion gated on PF_LB95>1.05."
      }
    ],
    "FOREX": [
      {
        "enhancement_id": 4,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX n/WR/PF disagreement between money_ready_verdict and pf_registry at same timestamp",
        "description": "Both JSON files generated at 2026-06-05T05:33Z but report different FOREX figures: money_ready.classes.FOREX = {n_resolved:23, wr:0.2174, pf:10.80} vs pf_registry.by_asset_class_policy_clean_net[FOREX] = {n:22, win_rate_pct:22.73, pf:11.22}. 1-pick + 0.42 PF gap means the two pipelines have divergent dedup/filter logic. Any UI cell that mixes feeds shows inconsistent FOREX numbers.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-7 /loop-1h",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "money_ready.classes.FOREX.n_resolved == pf_registry.by_asset_class_policy_clean_net[FOREX].n at same generated_at, and PF values match within rounding",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-05 05:48:39",
        "updated_at": "2026-06-05 05:48:39",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 2,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FOREX carry-factor scaffold (G10 long high-yield / short low-yield) as rescue leg",
        "description": "From daily_ideas_synthesis_2026-05-16.md + edge_sweep + this Daily Ideas subagent (4+ agent consensus, P0/CRITICAL for FOREX rescue from FAIL PF 0.27). Scaffold tools/research/forex_carry.py (monthly rebalance, AQR 30yr Sharpe 0.7-0.9); FRED_API_KEY present. Hard-disable in place until shipped + n>=30 clean.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "FOREX PF >=1.5 / WR>=50% on n>=30 clean rolling (post-carry); class exits HARD_DISABLE",
        "target_release": "2026-06-10",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:43:37",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 1,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "Add forex_carry to non_crypto_policy allowlist",
        "description": "Implementation already in repo (alpha_engine/new_strategies/forex_carry.py) with G10 rate differential, claimed 55-60% WR. Only missing the allowlist entry.",
        "category": "GATE",
        "expected_impact": "MEDIUM",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "ring-2.6-1t",
        "related_persona_id": "voss_global_macro",
        "proposed_features": null,
        "success_metric": "Strategy emits picks within 7 days of allowlist add; achieves >=50% WR on n>=10 within 30 days",
        "target_release": "2026-07-13",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:04:26",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 3,
        "asset_class": "FOREX",
        "source_ref": null,
        "title": "FX trend (clean-bar) \u2014 MIXED: real alpha vs USD but edge too weak/unstable",
        "description": "48mo clean-bar FX trend: attribution vs UUP PASSES (alpha t=2.13, beta -0.61 short-USD), but Sharpe 0.42 + bootstrap PF CI[0.63,3.36] lower<1. Real but small/unstable alpha. NOT promoted. FXE fetch-failed (4-ccy universe).",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-03 19:23:00",
        "updated_at": "2026-06-03 19:23:00",
        "implemented_at": null,
        "link_md_path": "reports/fx_trend_backtest_2026-06-03.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "COMMODITIES": [
      {
        "enhancement_id": 3,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Recompute class health from deduped independent COT cycles only",
        "description": "The class should only advertise edge using independent-cycle-aware COT accounting. This enhancement formalizes the honest source-of-truth rule and blocks stale, over-emitted history from defining the class story.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "COMMODITY dashboard tile and supporting rollups use independent-cycle-only metrics; Tier verdict matches the recomputed clean history.",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 1,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Wire CFTC COT weekly feed for non-cot strategies",
        "description": "Top-2 data-feed investment from survey. Addresses sub-floor FOREX/COMMODITY classes by giving cta_trend / supply_demand / inventory_cycle real positioning data instead of inferring from price.",
        "category": "DATA_FEED",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude+persona_survey",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "CFTC COT data ingested weekly into a dedicated table; non-cot strategies show >=5pp WR lift",
        "target_release": "2026-07-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/2026-05-25_persona_improvement_survey.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Persona Improvement Survey \u2014 AI Tournament\n\n**Date:** 2026-05-25\n**Author:** investigation subagent\n**Goal alignment:** Goal #1 (phenomenal performance across all asset classes on `findtorontoevents.ca/audit`)\n**Mandate:** for every persona in the AI tournament with n>=5 picks, identify the data inputs / external signals that would most improve pick quality.\n\n## Sources\n\n- Picks corpus: `audit_dashboard/data/ai_tournament_picks_latest.json` (1,411 records, 1,055,454 bytes, snapshot 2026-05-25 02:08 UTC). 1,105 records carry a `persona_id`; 306 do not (legacy `data_source` rows from `alpha_engine` and `quan_engine`, plus a handful of free-text-thesis grok3 rows that the cerebras/gpt4o submission layer never tagged).\n- New submissions (2026-05-25, added on top of the dashboard snapshot for completeness, even though none reach n>=5 individually):\n  - `data/ai_tournament/submissions/mercury_v2_20260525.json` \u2014 20 picks across 5 hedge-fund personas (voss_global_macro, reed_long_short_fundamental, sharma_quant_momentum, chen_thematic_ai_growth, lang_value_contrarian; 4 picks each).\n  - `data/ai_tournament/submissions/grok3_hedgefund_20260525.json` \u2014 12 picks across 6 grok-prefixed personas (vargas/chen/sharma/okonkwo/reyes/li; 1\u20133 picks each).\n  - `data/ai_tournament/submissions/qwen3_6_max_hedgefund_20260525.json` \u2014 18 picks across 6 qwen-prefixed personas (value_hunter/momentum_rider/quant_systematic/macro_global/contrarian/carry_yield; 3 picks each).\n- Registry: `tools/ai_tournament/persona_registry.py` (17 canonical personas as of 2026-05-25; the picks corpus also references ~25 additional `persona_id` strings used by various model adapters that have not been canonicalised into the registry yet \u2014 e.g. `momentum_momentum`, `quality_compound`, `growth_at_reasonable_price`, `gamma_raid`, `cta_trend`, `bayesian_breakout`, `inventory_cycle`, `macro_hedge`, `purchasing_power_parity`, `seasonal_pattern`, `bankruptcy_recovery`, `correlation_breaker`, `cross_sectional_momentum`, `supply_demand`, `volatility_breakout`, `grid_trader`). The improvement recommendations below treat the picks-corpus tag as the source of truth.\n\n**Note on overrepresentation:** several personas are dominated by a single model resubmitting near-identical picks at each daily tournament tick (e.g. `breakout_scanner` n=204 is 51\u00d7FIL + 51\u00d7ZK + 51\u00d7NEAR + variations \u2014 all from `grok3`). I flag those cases inline and treat them as effectively n\u22484 of *distinct* signals, even though the raw n is large.\n\n## Qualifying personas (n>=5)\n\n22 personas reach the threshold from the dashboard snapshot. None of the brand-new hedge-fund personas (`voss_*`, `reed_*`, `sharma_*`, `chen_*`, `lang_*`, `grok_*`, `qwen_*`) yet do \u2014 they sit at n=1\u20134 and are listed at the end as \"watchlist\".\n\n---\n\n### 1. `breakout_scanner` \u2014 Breakout Scanner (technical_breakout)\n\n- **n=204, resolved=2, WR=100% (2/2), avg unrealized PnL = n/a (mostly OPEN)** \u2014 but n is misleading: 51+51+51 are repeated FIL/ZK/NEAR submissions by `grok3`, so true distinct-signal n \u2248 12.\n- **Asset class:** CRYPTO 100%. **Direction:** 99.5% LONG.\n- **Already relies on:** `ml_crypto_pred` confidence score, \"multi-timeframe EMA alignment\", volume signal, 20-day consolidation range.\n- **Top 3 missing inputs:**\n  1. **True consolidation-width vs realised volatility** \u2014 the persona claims \"20-day consolidation\" but never publishes the \u03c3-of-\u03c3 ratio that distinguishes a real coiled range from a slow drift. Adding the Bollinger-Bandwidth percentile (current width vs prior 250d distribution) would let it reject the false breakouts that dominate crypto.\n  2. **Order-book depth / spot CVD divergence at the breakout candle** \u2014 every entry would be filterable by \"were aggressive market buys present, or was the breakout passive-bid-lift on thin book?\" Without this the persona is short-volatility in disguise.\n  3. **Funding-rate and perp basis at entry** \u2014 crypto breakouts often coincide with funding>0.05%/8h, which converts the trade into a carry headwind. A funding-percentile filter (top decile = stand aside) would lift hold-period PnL.\n- **Tier promotion plan:** WR=100% on n=2 is meaningless. Need n>=50 distinct breakouts (not symbol repeats) over 60+ days; require BB-width percentile <30 AND funding-percentile <70 to fire. Target PF>1.8 on CRYPTO is realistic with those filters; without them the persona will likely settle at PF~0.9 (the strategy is paying spread + funding without an edge source).\n- **Cross-persona conflict:** directly contradicts `mean_reversion` and `volatility_breakout` on the same crypto symbols (`mean_reversion` is long BTC where `breakout_scanner` is long alt-breakouts \u2014 different symbol universes, low overlap). Conflicts with `bayesian_breakout` (same setup, different probabilistic gate) \u2014 ~30% same-symbol overlap on ETH/SOL/AVAX; the bayesian variant adds a Bayesian posterior that the raw scanner lacks.\n\n### 2. `momentum_momentum` \u2014 3-6mo Equity Momentum (technical_momentum, grok3)\n\n- **n=92, resolved=33, WR=57.6%, avg PnL +4.03%.** EQUITY 100%, 89% LONG.\n- **Heavy-tail caveat:** 46/92 are repeated MU submissions; distinct-symbol n \u2248 25.\n- **Already relies on:** `growth_stock_screener` engine, \"relative strength in semiconductor sector\", confidence scores 70\u201384%.\n- **Top 3 missing inputs:**\n  1. **Sector-relative momentum z-score** (vs SPY or sector ETF), not just absolute price action. MU is bid because semis are bid; the persona should fade MU when its z-score vs SOXX collapses, which is the historical reversal tell.\n  2. **Earnings-revision breadth from FactSet/Refinitiv (or Yahoo as a proxy)** \u2014 momentum that is *not* backed by upward EPS revisions is the classic late-stage failure pattern. Adding a simple \"3-month EPS revision up?\" gate is the largest single edge available.\n  3. **Short-interest delta / days-to-cover** \u2014 momentum that is short-interest-driven mean-reverts violently. Filter out names with SI>15% of float.\n- **Tier promotion plan:** already past T2 on WR (57.6%). Need PF \u2014 current avg PnL/avg loss not computed, but trend looks positive. With EPS-revisions filter and a beta-neutral pair (short SPY same-dollar), this persona can stretch to T1 territory. Need n>=50 distinct symbols (not 25\u00d7 MU).\n- **Conflict:** sometimes contradicts `mean_reversion` (same EQUITY symbols on opposite sides) and `growth_at_reasonable_price` (NVDA: GARP says long, momentum says long \u2014 agreement, not conflict). Overlaps `cross_sectional_momentum` heavily (~40% symbol overlap with PYPL/ADBE/CRM); the persona-level redundancy is real and should be collapsed.\n\n### 3. `quality_compound` \u2014 Quality Compounder (fundamental_quality, cursor_agent)\n\n- **n=68, resolved=17, WR=100% (17/17), avg unrealized PnL \u22122.39%.** Universe is 51\u00d7 NVDA + 17\u00d7 IWM. Distinct n=2. WR=100% is an artefact of duplicate resolution.\n- **Already relies on:** Two-Day RSI Reversal signal, \"ROE>15%, debt/equity<0.5\" (per persona name) \u2014 though the actual thesis text is technical, not fundamental.\n- **Top 3 missing inputs:**\n  1. **Actual fundamental data** \u2014 ROIC, FCF/EV, accruals quality (Sloan ratio). The persona is named \"quality_compound\" but the thesis cites RSI(2), which is the opposite of a fundamental gate. Either rename it or wire in a Compustat-equivalent feed (Yahoo `getKeyStatistics` is a free starting point).\n  2. **Universe expansion** \u2014 running this on NVDA alone is concentration risk, not a strategy. Needs a quality screen producing 20\u201350 names per quarter.\n  3. **Pricing-power signal** \u2014 gross-margin expansion YoY is the cleanest moat tell; without it the persona is just buying expensive stocks.\n- **Tier promotion plan:** the WR=100% is unreal; needs forced de-duplication of repeated picks. After de-dup, expect PF~1.1 (the \u22122.39% avg PnL is a tell). Promotion requires rebuilding the entry gate from fundamentals.\n- **Conflict:** overlaps `growth_at_reasonable_price` (NVDA) and `chen_thematic_ai_growth` (NVDA) \u2014 three personas chasing the same name through different doors.\n\n### 4. `growth_at_reasonable_price` \u2014 GARP (cerebras_llama4)\n\n- **n=67, resolved=11, WR=54.5%, avg PnL \u22123.31%.** EQUITY 100%, 92% LONG. 56/67 are NVDA repeats; distinct n \u2248 12.\n- **Already relies on:** \"PEG<1.5, revenue growth>15%\", MACD divergence, 20-day EMA.\n- **Top 3 missing inputs:**\n  1. **Forward PEG using consensus EPS** (current persona is using trailing PEG inferred from thesis text). Forward PEG is the only GARP signal that backtests.\n  2. **Capex intensity vs FCF conversion** \u2014 a true GARP filter rejects companies with rising capex/revenue and stagnant FCF (the AMD/INTC failure pattern). Without this gate, GARP repeatedly picks tops in capex-heavy semis.\n  3. **Sell-side estimate-dispersion** \u2014 narrow dispersion + upward revisions = high-quality GARP signal; wide dispersion = noise. Free proxy via Yahoo analyst count + high/low estimate range.\n- **Tier promotion plan:** avg PnL \u22123.31% is sub-floor. Need forward-EPS + dispersion filters before any size; expect to halve trade count and double per-trade edge. Target WR 55%+ at PF>1.4.\n- **Conflict:** redundant with `quality_compound` and `value_investor`; rename to `growth_momentum_combo` or merge.\n\n### 5. `trend_follower` \u2014 Trend Follower (technical_trend, deepseek_v4)\n\n- **n=67, resolved=55 (highest resolution rate of any persona), WR=34.5%, avg PnL +4.20%.** EQUITY 100%, 70% LONG.\n- **Already relies on:** \"20/50 EMA cross\", ADX>25, \"higher lows/higher highs\", ISM/credit-spreads (per thesis text).\n- **Top 3 missing inputs:**\n  1. **ADX-regime gate** \u2014 the registry says \"require ADX>25 at entry\" but the WR=34.5% suggests it isn't actually being enforced. Add a hard pre-trade ADX measurement.\n  2. **Cross-sectional trend strength** \u2014 trend-following alpha lives in being long *the strongest* trends and short the weakest, not in catching every cross. A 12-1 momentum ranking + decile filter is the canonical fix.\n  3. **Volatility-target sizing input (annualised \u03c3 over last 21d)** \u2014 equal-dollar s"
      },
      {
        "enhancement_id": 2,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Execute COT 7-step testing plan (steps 1-5 active work + step 6 paper-pilot + step 7 risk-of-ruin)",
        "description": "Opencode P2 PASSIVE. Gates the only currently-DSR-verified single-class deviation candidate (cot_positioning + CT=F). Steps 1-5 ~6h active work; Step 6 = 4-week paper pilot (currently SHADOW); Step 7 = Monte Carlo risk-of-ruin sim.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "opencode/ring-2.6-1t",
        "related_persona_id": "lang_value_contrarian",
        "proposed_features": null,
        "success_metric": "All 7 steps green; cot_positioning + CT=F clears the 10-step Lopez de Prado AFML readiness gate; first eligible LIVE candidate",
        "target_release": "2026-09-26",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:45:06",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/cot_paper_pilot_testing_plan_2026-05-12.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# COT Paper Pilot \u2014 Testing + Backtesting Plan for Statistical Edge Proof\n\n**Strategy:** `cot_positioning` on `CT=F` (ICE Cotton Futures)\n**Generated:** 2026-05-12\n**Author:** Claude Code SUPREME EDGE session\n**Status:** DRAFT \u2014 awaiting agent-swarm cross-review\n\n## Hypothesis under test\n\n> The `cot_positioning + CT=F` edge that scored DSR=1.0000 (Lopez de Prado AFML eq 14.5) on n=100 closed picks (WR 90%, Sharpe +1.377) is a **real, statistically-validated, persistent edge** that will produce net positive P&L in forward live trading at futures-contract sizing.\n\n**Null hypothesis (H0):** The 90% WR is sample-window luck; OOS performance reverts to coin-flip (45-55% WR) or worse.\n\n**Alternative hypothesis (H1):** The 90% WR holds within \u00b110pp on a strict OOS window AND the per-trade net P&L falls within $3-15/contract band predicted from contract-scaling math.\n\n## Why this matters\n\nUser accepted single-class deviation per Codex governance 2026-05-12. cot_positioning + CT=F is the #1 candidate for first real-money LIVE_EXECUTION. Before risking capital, we must independently verify:\n\n1. The DB-reported edge is NOT a data artifact (Agent E's synthetic-data concern was partially debunked but warrants test gates).\n2. The edge persists OOS (Lopez de Prado AFML methodology).\n3. Per-trade economics match the futures-contract math ($3.40-$13.40 net per trade).\n4. Risk-of-ruin under realistic capital ($5-15k starter) is acceptable.\n\n## 7-step validation pipeline (mandatory before any LIVE_EXECUTION sizing)\n\n### Step 1 \u2014 Reproducibility audit (pass/fail gate, 1h)\n\n**Goal:** Confirm the n=100 / WR 90% claim reproduces under independent queries.\n\n**Actions:**\n- Re-run `tools/anti_overfit_audit_sidecar.py --min-n 20` and verify cot_positioning DSR still \u22650.95\n- Independent SQL query (different session) against `trading_picks`:\n  ```sql\n  SELECT status, COUNT(*) FROM trading_picks\n   WHERE strategy='cot_positioning' AND symbol='CT=F'\n     AND status IN ('WON','LOST','WIN','LOSS','TP_HIT','SL_HIT')\n   GROUP BY status\n  ```\n- Expected: 90 WON + 10 LOST = 100 total (matches Agent A DB probe 2026-05-11)\n\n**Pass criterion:** WR within \u00b15pp of 90%.\n\n### Step 2 \u2014 Data-integrity audit (pass/fail gate, 1h)\n\n**Goal:** Verify the 100 closed picks are NOT synthetic.\n\n**Actions:**\n- Query `trading_picks` for cot_positioning + CT=F: check `exit_price=0` count, `pnl_pct=0` count, weekend `created_at` count, whole-dollar entry/exit prices.\n- Cross-reference `created_at` against CFTC COT publication calendar \u2014 every CFTC release falls on a Friday 3:30pm ET. Picks created within 1 trading day of a CFTC release pass.\n- Spot-check 10 random closed picks: do the entry/exit prices match historical CT=F closes (within 1%)?\n\n**Pass criterion:** 0 zero-PnL rows, 0 missing exits (already confirmed by Agent A); \u226580% of created_at timestamps fall within 0-3 trading days post-CFTC release.\n\n### Step 3 \u2014 Walk-forward OOS test (statistical gate, 2h)\n\n**Goal:** Validate edge persistence under combinatorial purged cross-validation (CPCV).\n\n**Actions:**\n- Split 100 closed picks into 10 folds (chronologically).\n- For each fold-as-OOS-holdout configuration: compute WR + PF on held-out 10 picks.\n- Compute WR variance across all 10 OOS folds.\n\n**Pass criterion:**\n- Mean OOS WR \u2265 75% (allows 15pp regression from training-set 90%).\n- WR variance across folds \u2264 15pp.\n- Worst fold \u2265 60% WR.\n- At least 8 of 10 folds beat 50% WR.\n\n### Step 4 \u2014 Deflated Sharpe Ratio re-verification (statistical gate, 30 min)\n\n**Goal:** Confirm DSR\u22650.95 holds under more conservative `n_trials` assumption.\n\n**Actions:**\n- Re-run `deflated_sharpe(sharpe=1.377, n_trials=131, returns_array=...)` per Lopez de Prado AFML eq 14.5 (131 = total systems in dashboard payload \u2014 more conservative than 42 default).\n- Re-run with n_trials=500 (penalty for multiple comparisons across mutation-axis variants).\n\n**Pass criterion:** DSR \u2265 0.85 even at n_trials=500.\n\n### Step 5 \u2014 Sample-window robustness (statistical gate, 30 min)\n\n**Goal:** Confirm edge holds on recent windows, not just the full 100-pick sample.\n\n**Actions:**\n- Compute WR + PF on:\n  - Full 100 picks\n  - Last 60 picks (~60% sample)\n  - Last 30 picks (~30% sample)\n- Confirm WR drift \u2264 10pp across windows.\n\n**Pass criterion:** Last-30 WR \u2265 80% (allows 10pp drift from full-sample 90%).\n\n### Step 6 \u2014 Forward paper-pilot (live gate, 4 weeks)\n\n**Goal:** Observe edge persistence on NEW closed picks emitted post-test.\n\n**Actions:**\n- Run `alpha_engine/strategies/cot_paper_pilot.py` weekly post-CFTC release.\n- Accumulate \u22654 NEW closed CT=F picks (typically 1 per week).\n- Track rolling P&L in `audit_dashboard/data/cot_paper_pilot_status.json`.\n\n**Pass criterion:**\n- After 4 weeks: \u22653 of 4 new picks closed\n- Net P&L per contract within tolerance band \u00b150% of expected mid ($8.40) = [$4.20, $12.60]\n- WR \u2265 75% on new picks\n\n### Step 7 \u2014 Risk-of-ruin Monte Carlo (statistical gate, 1h)\n\n**Goal:** Confirm capital tier survives realistic worst-case sequences.\n\n**Actions:**\n- Bootstrap 10,000 simulated 50-trade sequences from the 100-pick PnL distribution.\n- For each, compute drawdown trajectory + final P&L at $5k / $10k / $25k starter.\n- Compute probability of margin call at each tier.\n\n**Pass criterion:**\n- $10k starter: probability of margin call < 5% over 50-trade sequence\n- $25k starter: probability of margin call < 1%\n\n## Disqualifying conditions (any one = NO REAL MONEY)\n\n- Step 1 fails reproducibility\n- Step 2 finds >10% synthetic-data signature\n- Step 3 walk-forward mean OOS WR < 75%\n- Step 4 DSR drops below 0.85 at conservative n_trials\n- Step 5 last-30 WR drops below 80%\n- Step 6 forward paper-pilot WR < 75% on \u22654 new picks\n- Step 7 margin-call probability > 5% at $10k tier\n\n## Auxiliary verification (recommended but not gating)\n\n### Independent academic cross-check\n- Replicate Miffre 2010 (SSRN 1127213) commodity carry+momo double-sort on CT=F alone. Expected \u03b1 21% annualized class-wide should map to a multiple of cot_positioning at CT=F sub-edge.\n- Cross-check against current `tools/research/commodity_carry_momo.py` output (live result: NG=F SHORT signal). Does cot_positioning agree?\n\n### External COT consensus check\n- Pull CFTC current-week COT data from public API (NDelventhal/cot_reports repo).\n- Compare current commercial-net positioning to the threshold the strategy uses.\n- Sanity-check: is the strategy's \"long\" signal currently aligned with commercials' net-long state?\n\n### Brokerage validation\n- Confirm at least 3 retail brokers offer CT=F: Interactive Brokers \u2713 ($1,200 margin), TD Ameritrade \u2713 (~$1,500), AMP Futures \u2713 (~$1,000)\n- Verify commission per round-trip is at most $5/contract (Interactive Brokers Tiered: $0.85/contract + exchange fees ~$2.50)\n\n## Statistical thresholds summary\n\n| Gate | Metric | Pass threshold |\n|---|---|---|\n| Reproducibility | WR | within \u00b15pp of 90% |\n| Data integrity | zero-PnL rows | <10% |\n| Walk-forward | mean OOS WR | \u226575% |\n| Walk-forward | WR variance | \u226415pp |\n| Walk-forward | worst fold | \u226560% |\n| DSR (conservative) | DSR | \u22650.85 at n_trials=500 |\n| Recent window | last-30 WR | \u226580% |\n| Forward paper-pilot | new-pick WR | \u226575% on \u22654 new picks |\n| Forward paper-pilot | per-trade $ | [$4.20, $12.60] net |\n| Risk-of-ruin | margin-call prob | <5% at $10k tier |\n\n## Estimated total testing time\n\n| Step | Time | Type |\n|---|---|---|\n| 1. Reproducibility | 1h | code + SQL |\n| 2. Data integrity | 1h | SQL spot-checks |\n| 3. Walk-forward CPCV | 2h | code + analysis |\n| 4. DSR conservative | 30m | re-run validator |\n| 5. Sample-window | 30m | SQL + plot |\n| 6. Forward paper-pilot | **4 weeks** | passive observation |\n| 7. Risk-of-ruin MC | 1h | code + plot |\n| **Total active work** | **~6h** | + 4-week passive wait |\n\n## Codex state-machine transitions\n\n```\nREHAB  \u2500\u2500[Steps 1-5 pass]\u2500\u2500>  OOS_READY  \u2500\u2500[Step 6 4wk pass]\u2500\u2500>  SHADOW  \u2500\u2500[Step 7 + user approval]\u2500\u2500>  LIVE_ELIGIBLE\n                                                                                                                \u2502\n                                                                                                                \u25bc\n                                                                                                  $5-15k capital, 1 contract live\n```\n\n## Open questions for swarm review\n\n1. Is the WR \u226575% mean OOS threshold appropriate, or should we demand \u226585%? (Conservative answer = 85%; aggressive = 70%)\n2. Is 4 weeks paper-pilot enough? (Antonacci GEM uses 90 days post-discovery; Lopez de Prado AFML suggests 6 months for novel signals)\n3. Should we replicate the strategy code from scratch as an independent implementation, OR is using the existing trading_picks rows sufficient?\n4. Does the microscopic per-trade PnL ($3.40 net) survive real-world slippage on a $35k notional?\n5. Should we paper-pilot KC=F (coffee, Agent A confirmed n=95 WR 93.7%) in parallel as a diversification check?\n6. Is anti_overfit_audit_sidecar's DSR using returns_array correctly for monthly-frequency COT signals? (DSR variance assumes IID returns)\n7. What's the right time-stamp for the closing decision \u2014 Friday CFTC release T+0, T+1, T+5?\n\n## Verifiable claims log\n\nAll numbers above derive from:\n- `tools/anti_overfit_audit_sidecar.py` (commit `3e388035b8c`) producing `audit_dashboard/data/anti_overfit_audit.json` with DSR=1.0 on cot_positioning\n- `alpha_engine/strategies/cot_paper_pilot.py` (commit pending this turn) producing first-run: n_trades=100, WR=90%, cum_pnl=$344.49, avg=$3.44\n- Agent A DB probe 2026-05-11 (transcript in session)\n- Antigravity audit walkthrough.md / money_maker_ready_2026-05-11.md.resolved at `C:\\Users\\zerou\\.gemini\\antigravity\\brain\\506d900a-9cc5-461c-9f3a-e39405ae5a00\\`\n\n## Recommended next actions\n\n1. Ship this plan to GitHub main + FTP for review\n2. Dispatch agent-swarm cross-review (target: `/swarm-second-opinion` or `tools/swarm` with 3-engine consensus on Steps 3, 6, 7 specifically)\n3. Build the audit_dashboard/paper_pilot.ht"
      },
      {
        "enhancement_id": 5,
        "asset_class": "COMMODITY",
        "source_ref": "workflow:audit-review-and-baby-strategy-sweep; verified adversarially",
        "title": "FMP symbol mapping s.replace('=F','USD') is wrong for grains/softs (ZC=F->ZCUSD does not exist on FMP)",
        "description": "_adapter_fmp maps GC=F->GCUSD which works for metals, but blindly applies the same s.replace('=F','USD') to grains/softs (ZC=F->ZCUSD, KC=F->KCUSD, CT=F->CTUSD). FMP does not list those as <X>USD pairs, so FMP will return empty/None for the exact commodities (CT=F cotton is the documented concentration in the COMMODITY class) where Yahoo+Stooq are most likely to be unavailable. Not a correctness bug (returns None, falls through to FRED which also lacks them -> overall None), but it makes FMP dead weight for the contracts that need it most.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8 (audit-review workflow waesvw9hq 2026-06-06)",
        "related_persona_id": null,
        "proposed_features": "{\"confidence\": 0.68, \"review_evidence\": \"alpha_engine/commodity_price_failover.py:250 (fmp_sym = s.replace('=F','USD')); contrast _STOOQ_MAP at :145-150 which has an explicit per-symbol table\", \"verify_evidence\": \"Code evidence is exact and real. alpha_engine/commodity_price_failover.py:250 = `fmp_sym = s.replace(\\\"=F\\\", \\\"USD\\\")` (verbatim, blanket transform, git blame: commit 17437b5c8a, 2026-06-06). Contrast _STOOQ_MAP at lines 145-150 is an explicit 16-entry per-symbol table (verbatim). Module IS in production path: universal_price_enricher.py:218 imports `fetch_commodity_price` and :231 calls it for every `=F` symbol. Grains/softs are real production symbols (ejaguiar1_stocks.trading_picks GROUP BY symbol where category='commodity'): ZC=F=550, ZS=F=592, ZW=F=554, KC=F=232, CT=F=214 \u2014 so the blanket replace produces ZCUSD/ZSUSD/ZWUSD/KCUSD/CTUSD. FRED fallback (_FRED_MAP lines 153-158) only covers GC/CL/NG/HG, so grains/softs have NO macro fallback either \u2014 confirms the 'falls through to FRED which also lacks them -> None' part. NOT a correctness bug: line 253 `if not isinstance(data, list) or not data: return None` safely handles FMP error/empty responses (my live test: FMP returns {'Error Message':'Limit Reach'} dict, handled cleanly). FMP could NOT be empirically tested for symbol coverage \u2014 the free-tier key (FMP_API_KEY in env) is daily-rate-limited ('Limit Reach') on /quote AND /symbol/available-commodities.\"}",
        "success_metric": "Replace the blanket .replace with an explicit FMP symbol table (metals -> <X>USD, energy/grains -> FMP's commodities endpoint tickers like ZCUSX/KCUSX) or skip FMP for symbols not in a known-good map, so the chain falls through to a source that can actually answer.",
        "target_release": null,
        "review_notes": "FMP restricted to metals/energy <X>USD set",
        "implementation_pr": null,
        "created_at": "2026-06-06 07:34:01",
        "updated_at": "2026-06-06 07:34:01",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": "fb27cfa7eb",
        "enhancement_plan": null
      },
      {
        "enhancement_id": 4,
        "asset_class": "COMMODITIES",
        "source_ref": null,
        "title": "Commodity TSMOM (clean-bar) \u2014 REJECTED: beta not alpha",
        "description": "Clean-bar 48mo TSMOM: PF1.69 Sharpe0.67 MDD-33.8%. Fails #111 (alpha t=0.84, beta0.72 vs DBC) + bootstrap PF CI[0.78,3.93]. Mostly commodity beta, no alpha. Gate-stack correctly rejects (vs ETF which passed).",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "REJECTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-03 19:10:14",
        "updated_at": "2026-06-03 19:10:14",
        "implemented_at": null,
        "link_md_path": "reports/commodity_tsmom_backtest_2026-06-03.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "BONDS": [
      {
        "enhancement_id": 3,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Wire bond_scanner.py (yield_momentum, duration_rotation, mean_reversion) + promote ZN=F/ZF=F mean_rev_atr from hunt to production",
        "description": "From 90-day BOND plan + Cycle 17 hunt (PF 2.11 Tier 1) + consolidated_plan_2026-05-29.md. BOND class was 0% WR n=9; now has proven edge but still not emitting at scale. FRED key + wiring = high leverage for Goal #1.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BOND n>=50 within 14 days of wire; class no longer INSUFF-N on /audit",
        "target_release": "2026-06-10 17:00 EST",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:38:27",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/asset_class_consolidated_plan_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Asset Class Consolidated Plan & Live Task Tracker \u2014 2026-05-29 Update\n\n**Supersedes / augments:** `reports/90day_plan_2026-05-15.html` (and its 8 per-class pages) + `reports/2026-05-27_world_class_gameplan_synthesis.md` + `reports/2026-05-27_remaining_items_from_90day_plans.md` + `reports/2026-05-27_quick_wins_from_90day_plans.md` + May 29 autonomous strategy hunt (Cycles 2-17).\n\n**Primary Goal (per CLAUDE.md Goal #1):** Institutional/hedge-fund-grade performance (Tier 2 minimum: PF>1.5 / WR>50 / MDD<20; long-term Tier 1 Renaissance target) across **ALL** asset classes on `/audit`. 0/6 classes met T2 on 2026-05-27 canonical policy-clean data (`pf_registry.by_asset_class_policy_clean_net`, `money_ready_verdict.json`). 3 classes degraded in prior 72h. CRYPTO collapsed 78.9%\u219238% WR over 14d with 0 closed in 48h.\n\n**Status as of 2026-05-29 (post Cycles 2-17):** All 6 asset classes now have **proven edge** (1,064+ strategy-symbol combos tested; 16 strategies wired to production including universal vol_mr, macd_divergence, momentum_breakout, ichimoku, yield_curve_proxy, range_trading + prior). COMMODITY strongest in recent MC validation (multiple Tier 1 on GC/SI/CL). BOND/FOREX breakthroughs (ZN=F mean_rev_atr PF 2.11; USDCHF rsi_mr PF 4.28). However, **data quality rot (PnL mismatches, ghosts, stale resolver, trust NULL) still blocks real-money sizing**. `money_ready_verdict` remains empty. incidents.html is now the canonical live task tracker for these plans.\n\n**See also:** `/audit/incidents.html` (this page is the go-to for latest per-plan tasks), `reports/BURIED_WINNERS_AUDIT_2026-05-29.md`, `memory/2026-05-29.md`, per-class 90-day pages under `reports/90day_pages_2026-05-15/`.\n\n---\n\n## Current Per-Class Verdict (Policy-Clean + Recent Hunt)\n\n| Class | Pre-May29 (May27 synthesis) | Post-Cycle17 Hunt (2026-05-29) | 90-Day Plan Focus (May15) | Key Open Risks (from incidents.html + plans) |\n|-------|-----------------------------|--------------------------------|---------------------------|---------------------------------------------|\n| CRYPTO | PF 0.96 / WR ~31-39% (n=210 policy-clean); 78.9% Smart-Picks disputed (raw DB 39% WR) | Edge proven (ml_crypto_predictor DSR 0.95+, multiple new wired); still sub-T2 overall | Liquid core + ADV gate + on-chain + BTC hour filter (M-001) + quan drag quarantine (M-004) + confidence inversion | 4 P1 incidents (DSR small-n, meta explosion, leakage edges PF99+, quan_scalp PF0.42 drag); 91.7% concentration in claude_gainer_st (only 3 closed rows) |\n| EQUITY | INSUFF-N (n=33) | Edge proven (stocks_rsi2_pullback 62.9% OOS n=70 + new momentum/rsi_mr wired) | VIX regime gate (QW-1), PEAD promote, large-cap clean universe, UEPS wiring | P0: pead_equity shadow; P1: penny pollution, UEPS zero emits, scanner routing gaps |\n| COMMODITY | INSUFF / pre-clean COT contamination (11.9% WR / PF0.29 class) | Strongest class (CL=F RSI-MR PF7.2, GC/SI multiple Tier1; COT dedup in progress) | Post-dedup COT recompute (QW-5), diversify beyond CT=F (M-039), carry-momo sidecar | P0: COT over-emission + pre-clean headline contamination (3 incidents); COMMODITY tile still unsafe |\n| FOREX | FAIL (PF0.55 / WR40% n=53; USDJPY 55% concentration) | Breakthrough (USDCHF rsi_mr PF4.28 Tier1; 5 new strategies incl. ichimoku/yield) | HARD_DISABLE + majors-only paper + live carry_yield + CFTC COT for futures | P0: all but one loser + 93% USDJPY conc (1 incident); SL too tight; forex_carry unwired |\n| ETF | INSUFF-N (n=2) | Edge via dual-momentum + VIX overlay backtests | VIX<25 gate wire (QW-2), pick 1-2 for probation | P2: 5 strategies probation, 0 forward trades |\n| BOND | 0% WR n=9 (antigravity_bond only) | Breakthrough (ZN=F/ZF=F mean_rev_atr PF~2.0 Tier1; yield_curve + tsmom pilots) | FRED key + wire bond_scanner + TSMOM sidecar + 3 research pilots | P0: kill emission until viable strategy; P3 new probation no track |\n| FUTURES | Zombie (overlaps COMMODITY) | Covered in COMMODITY hunt wins | Unified taxonomy (no separate tile) | P1: zombie tile misleading (EAGLE) |\n\n**Key cross-cutting from 90-day + EAGLE + May29 hunt:**\n- Data rot is #1 blocker (38.97% PnL mismatch, 56k ghosts, 82d stale resolver, trust NULL 99.99%) \u2014 12+ P0s in incidents.html. Fix before any sizing.\n- VIX/realised-vol regime tag at submission (HIGH impact, S effort, from persona survey + plans).\n- Bounded hot-streak exemption + audit trail.\n- Profitable-but-filtered lane (P0 OVERALL).\n- All new strategies must pass Wire-Up Rule (production caller in scanner/production path) + hypothesis_registry pre-reg.\n\n---\n\n## Consolidated Action Tracker (Go-To: /audit/incidents.html)\n\nThe table below is the **live task list** extracted/synthesized from:\n- May 15 90-day per-class plans (M- ids, QW-1..5)\n- May 27 remaining/quick-wins/synthesis\n- May 29 strategy hunt + buried winners (newly wired + fixes)\n- Cross-checked vs the 45 incidents + 47 enhancements already in `/audit/incidents.html` (as of 2026-05-29 05:00 UTC refresh).\n\n**New entries proposed below should be seeded into the INCIDENT_*/ENHANCEMENT_* tables via `tools/audit_pick_funnel/cli_track.py` (see commands at bottom).** Until seeded + nightly render, they appear only in this MD and the injected section on the local incidents.html snapshot.\n\n| Plan Ref | Class | Type | Sev/Impact | Title (for incidents.html) | Target | Component / From | Why / Success | Existing Overlap? |\n|----------|-------|------|------------|----------------------------|--------|------------------|---------------|-------------------|\n| QW-1 + 90d EQUITY | EQUITY | ENH | HIGH / S | Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py | 2026-06-05 | alpha_engine/equity_strategies.py + vix_regime_gate.py | +57% PF / -69% MDD on LC universe (PF5.37 VIX<20). Backtest proven. | None \u2014 new from plans |\n| QW-2 + 90d ETF | ETF | ENH | HIGH / S | Wire vix_regime_gate.is_safe_regime() into etf_sector_emitter (and other ETF emitters) | 2026-06-03 | alpha_engine/etf_sector_emitter.py | Backtest PF 2.05\u21923.22. Zero code for gate itself. | None |\n| M-001 + QW-3 | CRYPTO | ENH | HIGH / S | Enable BTC UTC-hour death-zone filter (08-09Z reject, 22Z boost) in score_booster.py | 2026-06-02 | alpha_engine/score_booster.py (CRYPTO_UTC_HOUR_FILTER) | Memory n>1000: clear edge. Env-gated, no behavior change until flag. | None (was in master plan) |\n| QW-4 | CRYPTO | ENH | MED / S | Set CRYPTO_ONCHAIN_MOMENTUM_ENABLED=1 in GHA env (MVRV-Z + Glassnode) | 2026-06-01 | .github/workflows/* + crypto_onchain_momentum.py | Module exists, default-OFF; high-signal on BTC/ETH majors per 90d research. | None |\n| QW-5 + 90d COMMODITY | COMMODITY | INC | P0 | Recompute + canonicalize COMMODITY asset_class_health from deduped independent COT cycles only (post PR#994) | 2026-06-04 | audit_trail/ + dashboard_generator + money_ready_verdict | Pre-dedup contamination still driving class PF/WR (3 existing P0s). 5 deduped trades only. | Overlaps existing \"COT paper pilot over-emission\" + \"COMMODITY headline contaminated\" |\n| M-007 + 90d FOREX | FOREX | INC | P1 | Add FOREX_HARD_DISABLE env + enforce majors-only (EURUSD/GBPUSD/USDCHF/JPYUSD) for paper phase | 2026-06-08 | alpha_engine/config.py + non_crypto_policy + production_scanner | 93% USDJPY concentration + broad losers killing class. | Overlaps \"All FOREX losers except one concentrated\" P0 |\n| 90d BOND + Cycle17 | BOND | ENH | HIGH / S | Wire bond_scanner.py (yield_momentum, duration_rotation, mean_reversion) + promote ZN=F/ZF=F mean_rev_atr from hunt | 2026-06-10 | alpha_engine/bond_scanner.py + production_scanner.py | 0% class \u2192 Tier1 pilots (PF~2.0). FRED key still needed for full. | Overlaps \"kill BOND emission\" P0 + \"wire bond_scanner\" existing ENH |\n| 90d + hunt universal | OVERALL | ENH | HIGH / M | Add VIX/realised-vol regime tag at every pick submission (quality_gates + scanner) | 2026-06-07 | alpha_engine/quality_gates.py + production_scanner + score_booster | ~30% picks in wrong regime (persona survey). Cheapest single lift per 7 personas. | New (referenced in incidents as HIGH GATE but not yet seeded from 90d) |\n| May29 hunt + buried | OVERALL | INC | P1 | mega_mutation stale block in negative_knowledge_registry.py removed (was blocking PF2.97 winner) | 2026-05-29 (done) | alpha_engine/negative_knowledge_registry.py | Fixed in 2026-05-29 session; verify no other stale blocks remain. | New (post 90d) |\n| 90d CRYPTO + EAGLE | CRYPTO | INC | P1 | Enforce liquid-core ADV >$1M + source whitelist (dna_winner + mega_mutation + kimi + baby_forward only) in production path | 2026-06-12 | alpha_engine/asset_class.py + production_scanner + quality_gates | 179 symbols incl heavy memes/alts diluting edge. 90d plan core recommendation. | Partial overlap with existing quan drag + concentration incidents |\n| All classes post-hunt | OVERALL | ENH | MED / M | Refresh all 8 per-class 90-day plan pages + consolidated MD + incidents task section after Cycle 17 wiring + buried fixes | 2026-06-01 | reports/90day_plan_2026-05-15.html + this MD + audit_dashboard/incidents.html | Plans (May15) predate the strategy hunt breakthroughs and data quality fixes. incidents.html must stay the single source of truth for tasks. | New meta-task |\n\n**Full proposed CLI commands (run with DB_PASS_STOCKS in env from ~/dbpasses.txt):**\n\n```bash\n# Example for one (copy/adapt for all 8+ above)\npython tools/audit_pick_funnel/cli_track.py enhancement \\\n  --class EQUITY \\\n  --title \"Wire existing VIX<22 regime gate (feat/equity-vix-regime-gate-sidecar) to production_scanner + equity_strategies.py\" \\\n  --description \"From 90-day plan QW-1 + reports/equity_vix_regime_breakthrough_20260513.md. Backtest: VIX<22 PF 4.55 / MDD 16.8% vs baseline 2.82/24%. Wire one caller per Wire-Up Rule.\" \\\n  --category GATE --impact HIGH --effort S --status BACKLOG \\\n  --proposed-by \"grok-4.3-xai + 90day-plan-consolidation-2026-05-29\" \\\n  --success-metric \"EQUITY 14d/48d WR >=55% with VIX gate active;"
      },
      {
        "enhancement_id": 2,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Wire bond_scanner.py (3 strategies) to production cron",
        "description": "alpha_engine/bond_scanner.py exists with yield_momentum, duration_rotation, mean_reversion; not currently wired into production_scanner main loop. Universe of 14 symbols ready at config.py:721. Wiring should lift BOND n from 18 to 50+ within 2 weeks.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "S",
        "status": "BACKLOG",
        "proposed_by": "opencode/ring-2.6-1t",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BOND n>=50 within 2 weeks of wire-up; class no longer marked 'sample-size-thin' on /audit",
        "target_release": "2026-06-28",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:45:06",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "session-ses_1a2d.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit picks methodology and UI edge validation\n\n**Session ID:** ses_1a2d77a8dffe4tBYbdlLp6CGV2\n**Created:** 5/25/2026, 3:23:17 AM\n**Updated:** 5/25/2026, 3:44:25 AM\n\n---\n\n## User\n\nreview our methodology of picks per asset class under findtorontoevents.ca/audit on the user interface, look at stuff 'like \"smart picks\" (button vs tab), the active picks by various scores/tags such as \"strong\" etc.. and also check smart picks tab, US Equity picks tab.. and all other tabs.. and see if we have any \"edge\" in the user interface and if so where. and double-check if its legit.  double-check how realstitic the picks are.. for example if you put real money into the \"smart picks\"at their time of entry till now would we have been profitable ? also double-check the \"smart picks\" tab I am seeing signal time EST 1.4 h ago.. is that actually truE?  or is it stale datA? \n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 12.5s)\n\n_Thinking:_\n\nThe user is asking me to review the methodology of picks per asset class under findtorontoevents.ca/audit on the user interface. They want me to look at:\n\n1. \"Smart picks\" (button vs tab)\n2. Active picks by various scores/tags such as \"strong\"\n3. Smart picks tab, US Equity picks tab, and all other tabs\n4. Whether there's any \"edge\" in the user interface and if so where\n5. Whether the picks are realistic - would putting real money into \"smart picks\" at their time of entry till now be profitable?\n6. Whether the \"smart picks\" tab showing \"signal time EST 1.4 h ago\" is actually true or stale data\n\nLet me first check what's in the workspace related to this, and also try to fetch the website to understand the UI.\n\nLet me start by exploring the project structure and understanding what's available.\n\nI'll systematically review the audit UI, smart picks methodology, and data freshness. Let me start by exploring the project structure and fetching the live site.\n\n**Tool: task**\n\n**Input:**\n```json\n{\n  \"description\": \"Explore audit UI structure\",\n  \"prompt\": \"Explore the findtorontoevents.ca website, specifically the /audit section and related pages. I need to understand:\\n\\n1. Fetch https://findtorontoevents.ca/audit - look at the full page structure, tabs, buttons, data tables\\n2. Look for \\\"Smart Picks\\\" tab/button, \\\"US Equity\\\" tab, and any other asset class tabs\\n3. Look for any \\\"edge\\\" indicators, score tags like \\\"strong\\\", active pick counts\\n4. Check for signal timestamps, data freshness indicators\\n5. Look at the methodology section if any\\n\\nAlso explore:\\n- The project structure in /home/eaguiar2015/findtorontoevents_antigravity.ca - look at audit_dashboard/, alpha_engine/, and any related files\\n- Check audit_dashboard/template.html for the UI template\\n- Check any JSON data files that feed the dashboard\\n\\nReturn all findings in detail including file paths, line numbers, and relevant code snippets.\",\n  \"subagent_type\": \"explore\",\n  \"task_id\": \"audit-ui-review-1\"\n}\n```\n\n**Error:**\n```\nExpected a string starting with \"ses\", got \"audit-ui-review-1\"\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 6.3s)\n\n_Thinking:_\n\nLet me fix the task call and explore the project structure directly.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: invalid**\n\n**Input:**\n```json\n{\n  \"tool\": \"explore\",\n  \"error\": \"Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\"\n}\n```\n\n**Output:**\n```\nThe arguments provided to the tool are invalid: Model tried to call unavailable tool 'explore'. Available tools: bash, edit, glob, grep, invalid, question, read, skill, task, todowrite, webfetch, write.\n```\n\n---\n\n## Assistant (Build \u00b7 Ring-2.6-1T \u00b7 3.9s)\n\n_Thinking:_\n\nI need to explore the project structure and the live website myself. Let me start by:\n1. Fetching the live audit page from findtorontoevents.ca\n2. Exploring the project directory structure\n3. Looking at the audit dashboard template and data files\n\nLet me do these in parallel.\n\nLet me explore the project structure and live site simultaneously.\n\n**Tool: webfetch**\n\n**Input:**\n```json\n{\n  \"url\": \"https://findtorontoevents.ca/audit\",\n  \"format\": \"markdown\",\n  \"timeout\": 30\n}\n```\n\n**Output:**\n```\n  Unified Audit Dashboard - Antigravity  \n\n# Unified Audit Dashboard v99.0\n\nBirds-eye view of ALL picks, portfolios, and system performance - loading...\n\n[\u2728 Jump to Active Picks](#) [\ud83d\udcd6 Research](research_index.html \"Per-asset-class research runs (sourced + backtested + multi-AI consensus picks)\") [\ud83d\udcca Edge Stability](edge_stability.html \"Per-asset-class edge stability across 7d/30d/90d/all-time windows\") [\ud83c\udfc6 AI Leaderboard](ai_leaderboard.html \"Per-AI pick attribution: which AI engine picks best, per asset class and horizon\") [\ud83d\udc1d Swarm Paper Picks](#swarm-pick-tracking-section \"Swarm-generated paper-trade picks across theswarm / Leap / V4 / zerounderscore with per-tier and per-model leaderboard\")\n\n\u26a0 TRUTH LAYER Dashboard vs DB-reality gap \u00b7 Per-class tiles below show **post-resolver-v2 filtered** performance. RAW at\\_raw\\_picks across 55,510 closed picks (Kimi audit + 2026-05-12 user audit): **11.13% WR / \u22123.56% avg / Sharpe \u22122.34 / PF 0.46**.\n\n**No asset class** currently passes industry-standard real-money thresholds (DSR>0.95, PBO<0.05, WFE>60%, live-Sharpe>0.5, n\u2265100). The one DSR=1.0 candidate (`cot_positioning + CT=F`) is in 4-week paper-pilot SHADOW per [paper\\_pilot.html](/audit/paper_pilot.html); see also [real\\_money.html](/audit/real_money.html) for the 10-step Lopez de Prado readiness gate. **NFA** \u2014 no real-money sizing without explicit greenlight + all gates clear.\n\n**\u26a0 COMMODITY filter-survival gap (2026-05-17):** dashboard shows WR=85.5% (n=228) vs raw WR=60.2% (n=354). The \u2212126 difference is picks excluded by `_is_valid_resolved_pick()` (missing / corrupt pnl\\_pct \u2014 concentrated in losing cta\\_replicator and combined\\_confidence trades). The 85.5% reflects only picks with validated pnl data, not the full cohort. Raw 60.2% is the conservative estimate. FOREX: WR=57.8% but PF=0.85 \u2014 wins avg 0.62% vs losses avg 1.00% (tight-TP / wide-SL asymmetry); total PnL=\u221215.84% confirms it is net-negative despite majority wins.\n\n\ud83d\udccf ML CALIBRATION INVERTED High confidence != high win rate. CRYPTO conf\u22650.90 \u2192 **14.4% WR**; conf 0.50-0.60 \u2192 **60.3% WR**. \u00b7 EQUITY 0.85-0.90 \u2192 **20% WR (worst band)**; >0.90 recovers. \u00b7 FOREX peak **0.75-0.80**; 0.70-0.75 = danger.\n\nScore-booster now applies per-class penalty/reward at `alpha_engine/score_booster._calibrate_confidence()` (CRYPTO >0.85 = \u221212, <0.6 = +3; EQUITY 0.85-0.90 = \u221215; FOREX \u22650.85 = \u221210). Until upstream generators recalibrate, do not size off raw confidence \u2014 weight off post-booster `score`.\n\n\ud83c\udfaf MAJOR GOAL Phenomenal performance across **ALL** asset classes \u2014 sustainable, hedge-fund-grade.\n\nSports betting tracked at [/live-monitor/sports-betting.html](/live-monitor/sports-betting.html) (separate KPIs).\n\n**EQUITY** \u2014 T2 candidate (PF 1.55, WR 51.4%, n=426). Scale.\u24d8 **CRYPTO** \u2014 PF 1.30, WR 46.3%, n=8115. Sub-T2; `quan_engine`/`luxalgo_filters` drag; 12 crypto\\_soc baby\\_strats quarantined (4-6\u03c3 WR decay). **ETF** \u2014 PF 1.33, WR 57.4%, n=108. Charter floor met (n\u2265100); lift PF to 1.5 for T2. **COMMODITY** \u2014 **PF 2.48**, WR 61.2%, n=345 (post-resolver-v2). \u24d8 Headline inflated by CT=F COT dedup artifact \u2014 COT-dedup guard now active; awaiting 100 clean picks. **FOREX** \u2014 PF 0.86, WR 55.0%, n=309 (post-resolver-v2). Sub-floor (PF<1.0). Mutation protocol active; LONG-direction blocks pending 2026-05-22 re-eval. **BOND** \u2014 PF 0.66, WR 54.5%, n=11. Sub-floor (PF<1.0); n<100 charter floor. Scanner active; accumulating picks. Static data updated 2026-05-21 \u2014 source: asset\\_class\\_health (resolved\\_n, post-resolver-v2). JS banner auto-updates on page load.\n\n**Tier definitions:** T1 PF>2/WR>55/MDD<10 (Renaissance). T2 PF>1.5/WR>50/MDD<20 (Institutional). T3 PF>1.2/WR>48/MDD<30 (Retail-OK). Source: `asset_class_health` in `audit_dashboard/data/dashboard_data.json` (post-resolver-v2 noise filter, generated 2026-05-05T01:37Z). Resolver v2 shipped 2026-04-28; v2.1 bug bundle 2026-05-02. Historical re-resolve (`re_resolve_historical_v2.py`) pending \u2014 pre-fix labels still in closed\\_picks for picks closed before 2026-04-28.\n\n**\u26a0\ufe0f Two PF/WR figures may appear per class on this page.** The card above pulls `asset_class_health` (full-history closed-trade aggregate, post-resolver-v2 noise filter). The lower-down `hf_stats.by_asset_class` panel uses a recent-subset window (typically last 60-90d closed picks). Recent figures often diverge from headline \u2014 CRYPTO recent PF 0.89 vs headline 1.25 (n=1650 vs n=8067), COMMODITY recent 1.09 vs 1.78. **For deploy/sizing decisions, weigh the recent panel.** For long-horizon strategy validation, weigh the headline. Source: `dashboard_data.json::hf_stats.by_asset_class`.\n\n\ud83d\udcca Per-asset-class walk-forward (OOS) Out-of-sample metrics from `walk_forward_by_class()` \u2014 Sharpe colored: green > 0.5, yellow 0\u20130.5, red < 0.\n\nLoading\u2026\n\n\ud83c\udfc6 TIER-2 PROVEN Buried high-edge strategies promoted from the alphabetical systems grid. Tier badges per [CHARTER \u00a72](/docs/PERFORMANCE_CHARTER.md).\n\n\ud83d\udcca TA BASELINE TradingView 6-strategy benchmark (ema\\_cross/macd/rsi/bollinger/donchian/supertrend) vs buy-hold. Promotion gate: walk-forward robustness \u22650.60 AND trades \u22655.\n\nSource: `tradingview-mcp/src/tradingview_mcp/core/services/backtest_service.py`. Generator: `tools/run_tv_backtest_benchmark.py`.\n\n### Strategy detail\n\n\u00d7\n\n### Crypto + Non-Crypto Performance ? Guide\n\n### How to Find the Best Picks \u2014 Definitions & Edge\n\n\u00d7\n\n#### \ud83d\udcd6 Definitions (No Fancy Words Without Meaning)\n\n**PROVEN** \u2014 A pick qualifies as PROVEN when its *strategy* has: (1) \u22655 closed trades, (2) \u226555% win rate after Bayesian shrink, (3) Profit Factor \u22651.5, and (4) confidence \u22650.7. Manually vetted systems (e.g., alpha\\_engine, battleground+) can also earn PROVEN status.  \n**Smart Picks** \u2014 An AI-curated basket. Every active pick is scored on 6 dimensions: *R"
      },
      {
        "enhancement_id": 6,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Bond scanner expansion to full 14-symbol roster (stage 3-4 at a time) + ETF sector rotation + macro overlay",
        "description": "From daily_ideas_synthesis_2026-05-16.md + edge_sweep + this Daily Ideas subagent (P1 for BOND/ETF lifts from thin/INSUFF-N). Expand bond_scanner.py beyond TLT/HYG to full 14-symbol; add relative-strength + macro overlay (VIX/YC/DXY) to ETF sector rotation to push PF 1.33\u21921.5.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-DailyIdeas-Corpus-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BOND n>=50-100 clean + ETF PF>=1.5 on policy-clean; classes exit thin/INSUFF-N",
        "target_release": "2026-06-15",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:43:42",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 5,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Promote CYCLE_17 BOND Tier-1 breakthroughs (ZN=F/ZF=F mean_rev_atr PF~2.0) + wire with gates",
        "description": "From CYCLE_17_FOREX_BOND_BREAKTHROUGH_2026-05-29.md + this subagent. 8 Tier 1/2 BOND candidates discovered; mean-reversion now viable on bond futures (previously unviable). Register + wire with n>=10 / p<0.05 gates.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-05-27-synth-05-29-hunt-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BOND policy-clean n>=30 + at least one strategy PF>1.5 with OOS validation",
        "target_release": "2026-06-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:42:41",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/CYCLE_17_FOREX_BOND_BREAKTHROUGH_2026-05-29.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# Cycle 17: FOREX/BOND Deep Dive + New Indicator Discovery\n\n**Date:** 2026-05-29  \n**Session:** Autonomous Strategy Hunt Campaign  \n**Status:** COMPLETE \u2014 BOND + FOREX breakthroughs confirmed\n\n---\n\n## Executive Summary\n\nCycle 17 tested **370 strategy-symbol combinations** across 37 symbols, 11 strategies (5 new), and 6 asset classes. Results: **86.2% profitable (319/370)**, **26 Tier 1**, **50 Tier 2**.\n\n**Major breakthroughs:**\n1. **BOND strategies now viable** \u2014 ZN=F mean_rev_atr PF=2.11 (Tier 1), ZF=F mean_rev_atr PF=1.99\n2. **FOREX RSI MR dominance** \u2014 USDCHF PF=4.28, EURUSD PF=2.46, GBPUSD PF=2.40 (all Tier 1)\n3. **5 new indicator strategies discovered** \u2014 stoch_rsi, pivot_reversion, ichimoku, yield_curve_proxy, range_trading\n\n---\n\n## Test Results Summary\n\n| Metric | Value |\n|--------|-------|\n| Total tests | 370 |\n| Tier 1 (PF>=2, WR>=50%, n>=10, p<0.05) | 26 |\n| Tier 2 (PF>=1.5, WR>=45%, n>=5) | 50 |\n| Profitable (PF>1) | 319 (86.2%) |\n| Losing | 51 (13.8%) |\n| New strategies tested | 5 |\n\n---\n\n## Per-Strategy Averages (across all 37 symbols)\n\n| Strategy | Avg PF | Avg WR | Total n | Significant | Status |\n|----------|--------|--------|---------|-------------|--------|\n| macd_div | 2.04 | 42.7% | 1,521 | 19/37 (51%) | Existing |\n| rsi_mr | 1.97 | 41.3% | 4,054 | 28/37 (75%) | Existing |\n| mean_rev_atr | 1.81 | 40.4% | 6,809 | 32/37 (86%) | Existing |\n| **stoch_rsi** | 1.80 | 39.6% | 1,781 | 15/37 (40%) | **NEW** |\n| **pivot_reversion** | 1.73 | 39.3% | 6,826 | 29/37 (78%) | **NEW** |\n| dual_momentum | 1.69 | 38.9% | 11,202 | 26/37 (70%) | Existing |\n| vol_mr | 1.68 | 38.4% | 4,375 | 24/37 (64%) | Existing |\n| **ichimoku** | 1.61 | 35.1% | 611 | 6/37 (16%) | **NEW** |\n| **yield_curve_proxy** | 1.57 | 36.3% | 726 | 8/37 (21%) | **NEW** |\n| **range_trading** | 1.54 | 36.4% | 2,006 | 13/37 (35%) | **NEW** |\n\n---\n\n## Top 20 Strategies (by Profit Factor)\n\n| # | Symbol | Strategy | n | WR | PF | p-value | Tier |\n|---|--------|----------|---|-----|-----|---------|------|\n| 1 | AVAX-USD | macd_div | 45 | 60.0% | **4.50** | 0.001 | TIER1 |\n| 2 | AVAX-USD | ichimoku | 22 | 59.1% | **4.33** | 0.005 | TIER1 |\n| 3 | SOL-USD | macd_div | 51 | 58.8% | **4.29** | 0.000 | TIER1 |\n| 4 | USDCHF=X | rsi_mr | 34 | 61.8% | **4.28** | 0.002 | TIER1 |\n| 5 | BTC-USD | ichimoku | 21 | 57.1% | **4.00** | 0.006 | TIER1 |\n| 6 | NG=F | ichimoku | 14 | 57.1% | **4.00** | 0.021 | TIER1 |\n| 7 | AVAX-USD | stoch_rsi | 67 | 56.7% | **3.93** | 0.000 | TIER1 |\n| 8 | ETH-USD | ichimoku | 23 | 56.5% | **3.90** | 0.004 | TIER1 |\n| 9 | NVDA | stoch_rsi | 37 | 54.1% | **3.53** | 0.002 | TIER1 |\n| 10 | GC=F | stoch_rsi | 41 | 53.7% | **3.47** | 0.000 | TIER1 |\n| 11 | IWM | ichimoku | 17 | 52.9% | **3.38** | 0.021 | TIER1 |\n| 12 | META | macd_div | 36 | 52.8% | **3.35** | 0.002 | TIER1 |\n| 13 | NG=F | rsi_mr | 97 | 52.6% | **3.33** | 0.000 | TIER1 |\n| 14 | HG=F | yield_curve_proxy | 27 | 51.9% | **3.23** | 0.007 | TIER1 |\n| 15 | NG=F | macd_div | 39 | 51.3% | **3.16** | 0.001 | TIER1 |\n| 16 | META | range_trading | 45 | 51.1% | **3.14** | 0.002 | TIER1 |\n| 17 | GLD | stoch_rsi | 45 | 51.1% | **3.14** | 0.001 | TIER1 |\n| 18 | MSFT | yield_curve_proxy | 24 | 50.0% | **3.00** | 0.015 | TIER1 |\n| 19 | JPM | yield_curve_proxy | 19 | 52.6% | **3.00** | 0.036 | TIER1 |\n| 20 | EEM | yield_curve_proxy | 18 | 50.0% | **3.00** | 0.028 | TIER1 |\n\n---\n\n## Per-Asset-Class Best Strategies\n\n### BOND (8 Tier 1/2 candidates \u2014 BREAKTHROUGH)\n\n| Symbol | Strategy | PF | WR | n | p-value | Tier |\n|--------|----------|-----|-----|---|---------|------|\n| **ZN=F** | **mean_rev_atr** | **2.11** | 54.1% | 109 | 0.001 | **TIER1** |\n| ZF=F | mean_rev_atr | 1.99 | 55.9% | 68 | 0.014 | TIER2 |\n| ZF=F | rsi_mr | 1.90 | 57.8% | 109 | 0.004 | TIER2 |\n| ZN=F | macd_div | 1.88 | 53.7% | 41 | 0.056 | TIER2 |\n| ZN=F | pivot_reversion | 1.83 | 51.5% | 200 | 0.001 | TIER2 |\n\n**Key insight:** BOND futures (ZN=F, ZF=F) respond well to mean-reversion strategies. This was previously untested territory.\n\n### FOREX (12 Tier 1/2 candidates \u2014 BREAKTHROUGH)\n\n| Symbol | Strategy | PF | WR | n | p-value | Tier |\n|--------|----------|-----|-----|---|---------|------|\n| **USDCHF=X** | **rsi_mr** | **4.28** | 61.8% | 34 | 0.002 | **TIER1** |\n| EURUSD=X | rsi_mr | 2.46 | 50.9% | 57 | 0.003 | TIER1 |\n| GBPUSD=X | rsi_mr | 2.40 | 51.1% | 47 | 0.004 | TIER1 |\n| AUDUSD=X | range_trading | 2.18 | 47.5% | 61 | 0.006 | TIER2 |\n| USDCHF=X | mean_rev_atr | 2.10 | 46.7% | 120 | 0.000 | TIER2 |\n\n**Key insight:** RSI mean-reversion with standard 30/70 thresholds works well on CHF, EUR, GBP pairs. USDJPY remains weak (PF 1.48).\n\n### CRYPTO (12 Tier 1/2 candidates)\n\n| Symbol | Strategy | PF | WR | n | p-value | Tier |\n|--------|----------|-----|-----|---|---------|------|\n| AVAX-USD | macd_div | 4.50 | 60.0% | 45 | 0.001 | TIER1 |\n| AVAX-USD | ichimoku | 4.33 | 59.1% | 22 | 0.005 | TIER1 |\n| SOL-USD | macd_div | 4.29 | 58.8% | 51 | 0.000 | TIER1 |\n| BTC-USD | ichimoku | 4.00 | 57.1% | 21 | 0.006 | TIER1 |\n| AVAX-USD | stoch_rsi | 3.93 | 56.7% | 67 | 0.000 | TIER1 |\n\n### EQUITY (16 Tier 1/2 candidates)\n\n| Symbol | Strategy | PF | WR | n | p-value | Tier |\n|--------|----------|-----|-----|---|---------|------|\n| NVDA | stoch_rsi | 3.53 | 54.1% | 37 | 0.002 | TIER1 |\n| META | macd_div | 3.35 | 52.8% | 36 | 0.002 | TIER1 |\n| META | range_trading | 3.14 | 51.1% | 45 | 0.002 | TIER1 |\n| MSFT | yield_curve_proxy | 3.00 | 50.0% | 24 | 0.015 | TIER1 |\n| JPM | yield_curve_proxy | 3.00 | 52.6% | 19 | 0.036 | TIER1 |\n\n### COMMODITY (16 Tier 1/2 candidates)\n\n| Symbol | Strategy | PF | WR | n | p-value | Tier |\n|--------|----------|-----|-----|---|---------|------|\n| NG=F | ichimoku | 4.00 | 57.1% | 14 | 0.021 | TIER1 |\n| GC=F | stoch_rsi | 3.47 | 53.7% | 41 | 0.000 | TIER1 |\n| NG=F | rsi_mr | 3.33 | 52.6% | 97 | 0.000 | TIER1 |\n| HG=F | yield_curve_proxy | 3.23 | 51.9% | 27 | 0.007 | TIER1 |\n| NG=F | macd_div | 3.16 | 51.3% | 39 | 0.001 | TIER1 |\n\n---\n\n## New Strategy Discoveries\n\n### 1. Stochastic RSI (stoch_rsi) \u2014 40% significant\n\n- Combines Stochastic oscillator with RSI for overbought/oversold signals\n- Best on: AVAX (PF 3.93), NVDA (PF 3.53), GC=F (PF 3.47), GLD (PF 3.14)\n- Avg PF: 1.80, Total signals: 1,781\n\n### 2. Pivot Reversion (pivot_reversion) \u2014 78% significant\n\n- Mean-reversion around daily pivot points (S1/S2/R1/R2)\n- Best on: ETH (PF 2.59), AVAX (PF 2.59), SOL (PF 2.37)\n- Avg PF: 1.73, Total signals: 6,826 (high frequency)\n\n### 3. Ichimoku Cloud (ichimoku) \u2014 16% significant but EXTREME when it works\n\n- Cloud breakout/rejection signals with Tenkan/Kijun confirmation\n- Best on: AVAX (PF 4.33), BTC (PF 4.00), NG=F (PF 4.00), ETH (PF 3.90)\n- Low hit rate but massive payoff when it fires\n- Only 611 total signals \u2014 rare but high-quality\n\n### 4. Yield Curve Proxy (yield_curve_proxy) \u2014 21% significant\n\n- Uses 10Y-2Y Treasury spread as macro regime filter\n- Best on: HG=F (PF 3.23), MSFT (PF 3.00), JPM (PF 3.00), EEM (PF 3.00)\n- Works well on rate-sensitive assets (metals, financials, EM)\n\n### 5. Range Trading (range_trading) \u2014 35% significant\n\n- Identifies consolidation ranges and trades bounces\n- Best on: META (PF 3.14), AUDUSD (PF 2.18), XLF (PF 2.15)\n- Works on mean-reverting names in low-vol environments\n\n---\n\n## Campaign Grand Summary (Cycles 2-17)\n\n| Metric | Value |\n|--------|-------|\n| Total strategy-symbol combos tested | 1,064+ |\n| Cycles completed | 17 |\n| Strategies tested | 20+ |\n| Asset classes with proven edge | **6/6** (CRYPTO, EQUITY, COMMODITY, ETF, FOREX, BOND) |\n| Optimal geometry | TP 1.5%, SL 0.5%, hold 10 bars |\n\n### Per-Asset-Class Best Strategy Mix\n\n| Asset Class | Best Strategy | Best PF | Key Symbols |\n|-------------|---------------|---------|-------------|\n| **CRYPTO** | macd_div + ichimoku | 4.50 | AVAX, SOL, BTC |\n| **EQUITY** | stoch_rsi + macd_div | 3.53 | NVDA, META, MSFT |\n| **COMMODITY** | ichimoku + rsi_mr | 4.00 | NG=F, GC=F, HG=F |\n| **ETF** | ichimoku + stoch_rsi | 3.38 | IWM, GLD, EEM |\n| **FOREX** | rsi_mr + range_trading | 4.28 | USDCHF, EURUSD, GBPUSD |\n| **BOND** | mean_rev_atr + rsi_mr | 2.11 | ZN=F, ZF=F |\n\n---\n\n## Next Steps (Cycle 18+)\n\n1. **Wire Cycle 17 top strategies to production** \u2014 especially BOND + FOREX strategies\n2. **Paper trade on TradingView** \u2014 USDCHF rsi_mr, ZN=F mean_rev_atr, AVAX ichimoku\n3. **Ichimoku deep-dive** \u2014 16% significance but extreme payoffs; test with relaxed parameters\n4. **Yield curve integration** \u2014 add 10Y-2Y spread as macro filter to production scanner\n5. **Per-symbol adaptive thresholds** \u2014 RSI 20/80 for commodities, 30/70 for forex/equity\n\n---\n\n## References\n\n- Cycle 17 backtest output: `/tmp/cycle17_full_output.txt`\n- Cycle 17 results JSON: `/tmp/cycle17_results.json`\n- Previous cycles: `reports/CYCLE_15_MONTE_CARLO_VALIDATION_2026-05-29.md`, `reports/CYCLE_16_DEEP_MC_VALIDATION_2026-05-29.md`"
      },
      {
        "enhancement_id": 4,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Bond scanner expansion to full 14-symbol roster (beyond TLT/HYG) + promote yield-curve / duration strategies from daily ideas corpus",
        "description": "From daily_ideas_synthesis_2026-05-16.md + daily_ideas_edge_sweep_2026_05_17.md (multiple agents consensus). BOND class thin (n=11). Wire the existing bond_scanner.py fully and expand universe per 90-day + daily ideas recommendations. Goal #1 blocker.",
        "category": "METHODOLOGY",
        "expected_impact": "HIGH",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "grok-4.3-autosweep-daily-ideas-2026-05-29",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "BOND n>=50 + at least one strategy with n>=20 forward trades and PF>1.3 within 30 days",
        "target_release": "2026-06-15",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-29 05:39:50",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "reports/daily_ideas_synthesis_2026-05-16.md",
        "link_url": "https://findtorontoevents.ca/audit/incidents.html",
        "link_github_ref": null,
        "enhancement_plan": "# DAILY_IDEAS Cross-Agent Synthesis \u2014 2026-05-16\n\n**Sources:** 15 files across 6 agents (Antigravity, Cursor, Claude, Grok, Kilocode, Kimi CLI/Code)\n**Synthesized by:** kimi-eltonslaptop\n**Date:** 2026-05-16\n\n---\n\n## 1. ALREADY SHIPPED (This Session)\n\n| # | Action | Status | Commit |\n|---|---|---|---|\n| 1 | EQUITY: `kimi_riseoftheclaw` class-scoped re-exempt (not global) | \u2705 Done | `feat(equity)` |\n| 2 | EQUITY: `stocksunify2` forward_validated cold-start bypass | \u2705 Done | `feat(equity)` |\n| 3 | EQUITY: `transaction_cost_gate` fix (OPEN pnl_pct treated as realized) | \u2705 Done | implied |\n| 4 | EQUITY: AAPL un-banned from `EQUITY_BANNED_SYMBOLS` | \u2705 Done | implied |\n| 5 | COMMODITY: 4 COT gate defects fixed (entry_price, fv_exempt, edge_trades, conf scale) | \u2705 Done | `feat(commodity-cot)` |\n| 6 | COMMODITY: CT=F moved to PROBATION (WR=75% post-block, review 2026-07-01) | \u2705 Done | implied |\n| 7 | ETF: charter floor 40\u219235, bonus 0\u2192+3, FV exemption for cold-start sources | \u2705 Done | `feat(etf)` |\n| 8 | FOREX: AA-7 JPY-cross blocks in place | \u2705 Done | implied |\n| 9 | Secret Scan: removed push trigger, daily 04:00 UTC cron, 30m timeout | \u2705 Done | `.github/workflows/secret-scan.yml` |\n| 10 | Cross-PC: `inbox_drain.py` + broadcast drain log + CHATBIBLE.MD \u00a717 | \u2705 Done | implied |\n| 11 | CVX moved to PROBATION (post-block WR=75%, PF=3.48, n=12) | \u2705 Done | implied |\n\n---\n\n## 2. TOP ACTION ITEMS \u2014 STATUS UPDATE (2026-05-16 Session)\n\n### P0 \u2014 Asset-Class Edge & Gates\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 2.1 | **BTC UTC-hour death-zone filter:** Reject CRYPTO picks at 06,08,09 UTC; boost 22 UTC (+8 score) | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 6645-6682 (`CRYPTO_UTC_HOUR_FILTER`). Tests: `TestNSCCryptoUTCHourFilter` 5/5 pass. |\n| 2.2 | **`multi_asset_cot` verification:** PF=21.33/WR=88.2% | \ud83d\udd04 **AB ANALYSIS RUNS DAILY** | `.github/workflows/ab_analysis.yml` cron at 05:30 UTC. No code change needed. |\n| 2.3 | **HIGH_CONVICTION trust_score swap:** Dashboard uses Trust filter (M-006) | \u2705 **SHIPPED** | `audit_dashboard/template.html` lines 1269-1270: Trust filter replaces confidence. `SMART_PICKS_MIN_TRUST_SCORE=3`. |\n| 2.4 | **FOREX hard-disable env switch:** `FOREX_HARD_DISABLE=1` | \u2705 **SHIPPED** | `alpha_engine/config.py` line 270. Default ON. Kill-switch: `FOREX_HARD_DISABLE=0`. |\n| 2.5 | **CRYPTO drag auto-quarantine:** Source-system quarantine + dynamic strategy quarantine | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5643-5690 (`CRYPTO_QUARANTINE` + `SOURCE_QUARANTINE_WARN`). |\n| 2.6 | **VIX+YC regime overlay as +15 score bonus:** | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` line 3834: default `15` (was 12). Combined gate in `passes_smart_gate` lines 7114-7124. |\n| 2.7 | **EQUITY PEAD strategy:** Post-earnings announcement drift | \u2705 **SHIPPED** | `alpha_engine/strategies/pead_equity.py` + `alpha_engine/equity_earnings_drift_pead.py`. |\n| 2.8 | **CRYPTO confidence recalibration:** M-034 inversion gate blocks high-conf CRYPTO from inverted sources | \u2705 **SHIPPED** | `audit_trail/quality_gates.py` lines 5745-5768. Default OFF (shadow). Env: `CRYPTO_CONF_INVERSION_GATE=1`. |\n\n### P0 \u2014 Infrastructure & Data Integrity\n\n| # | Action | Status | Evidence |\n|---|---|---|---|\n| 3.1 | **DB Freshness Guardian GHA:** Scheduled workflow checking `live_picks`, `resolver_outputs`, `bt_backtest_trades` staleness | \u2705 **SHIPPED** | `.github/workflows/db-freshness-guardian.yml` (hourly cron) + `db-freshness-check.yml`. |\n| 3.2 | **Cross-DB strategy key consistency audit:** Nightly workflow comparing `ejaguiar1_backtests` vs `ejaguiar1_stocks` keys | \u2705 **SHIPPED** | `.github/workflows/cross-db-audit.yml` (daily cron). |\n| 3.3 | **Backtest DB split:** Provision `ejaguiar1_backtests`; migrate `bt_backtest_trades` | \ud83d\udd04 **BLOCKED** | `DB_PASS_BACKTESTS` not confirmed in GH secrets. |\n| 3.4 | **Outcome resolution table:** Create `at_pick_outcomes` table; wire `outcome_resolver_v2.py` | \ud83d\udd04 **BLOCKED** | Same DB secret blocker. |\n| 3.5 | **Schema drift watchdog:** Nightly schema snapshot to JSON, drift diff against baseline | \ud83d\udd04 **OPEN** | No workflow found yet. |\n| 3.6 | **Index audit on `trading_picks`:** Add composite indexes | \ud83d\udd04 **OPEN** | Needs MySQL access (blocked from current IP). |\n| 3.7 | **`DB_PASS_BACKTESTS` in GitHub secrets** | \ud83d\udd04 **BLOCKED** | Requires user action (add secret to GH). |\n\n### P1 \u2014 Portfolio & Risk\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 4.1 | **PCG-5 portfolio gate stack (shadow-mode):** 5-gate exec-time reject layer | antigravity, synthesis | OPEN | TV paper-trade skill hook + `correlation_regime.json` freshness |\n| 4.2 | **Confidence calibration table:** Create `at_confidence_calibration` with bucket-level drift tracking | KimiCode | OPEN | None |\n| 4.3 | **Predictor scorecard table:** Create `at_predictor_scorecard` for live SQL dashboard queries (<2s) | KimiCode | OPEN | None |\n| 4.4 | **Anomaly detector (MySQL edition):** `tools/mysql_prediction_anomaly_scanner.py` for inverted confidence, direction conflicts, silent-dead strategies | KimiCode | OPEN | None |\n\n### P1 \u2014 Strategy & Research\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 5.1 | **Single-persona swarm-pick backfill + tier-gate:** 22/38 swarm picks are `tier=single` (1/1 vote). Backfill 60 days; promote to TV-eligible only if PF\u22651.30 & WR\u226550% at n\u2265100 | synthesis | OPEN | None |\n| 5.2 | **Bond scanner expansion:** Beyond TLT/HYG to full 14-symbol roster | DAILY_IDEAS | OPEN | Stage 3\u20134 symbols at a time |\n| 5.3 | **ETF sector rotation:** Relative strength + macro overlay to push PF 1.33\u21921.5 | PROMPTS, synthesis | OPEN | None |\n| 5.4 | **COMMODITY COT cleanup:** Remove CT=F dedup contamination, add seasonality | PROMPTS | OPEN | None |\n| 5.5 | **FOREX carry-factor scaffold:** `tools/research/forex_carry.py` for G10 carry factor | edge_per_class | OPEN | Data source unverified |\n| 5.6 | **CTA commodity-momentum replication:** `tools/research/dbmf_replication.py` | edge_per_class | OPEN | None |\n\n### P2 \u2014 Orphans & Hygiene\n\n| # | Action | Source Files | Owner | Blocker |\n|---|---|---|---|---|\n| 6.1 | **Wire `phase5_dashboard_integration.load_hourly_picks()` into `dashboard_generator.py`** \u2014 true orphan, 0 production callers | sidecar audit | OPEN | None |\n| 6.2 | **Wire `CopytraderManager` in `copytrader_integration.py`** \u2014 true orphan, 0 callers | sidecar audit | OPEN | None |\n| 6.3 | **Verify `UEPS_ENABLE_PEAD=1` is set in production `.env`** \u2014 silently disabled if missing | sidecar audit | OPEN | Check `.env` on prod server |\n| 6.4 | **MySQL ghost-row purge:** 655k stale rows in `ejaguiar1_stocks` | DAILY_IDEAS | OPEN | Hygiene, not blocking |\n\n---\n\n## 3. CONTRADICTIONS & RESOLUTIONS\n\n| Topic | Contradiction | Resolution |\n|---|---|---|\n| **CT=F status** | Edge_per_class says PF=21.33/WR=88.2% (implausibly high, needs verification). DAILY_IDEAS says CT=F was correctly killed (WR=8.3% rolling). This session moved CT=F to PROBATION (WR=75% post-block, n=43). | **VERDICT:** CT=F is now on PROBATION (2026-05-16 \u2192 2026-05-30). Next review 2026-06-06. The 88.2% was pre-kill historical; 8.3% was rolling-50 post-kill; 75% is post-block OOS. All three numbers refer to different windows. |\n| **COMMODITY Tier** | Grok says COMMODITY is Tier 1 (PF=2.57/WR=62.6%). KimiCLI says COMMODITY is RESEARCH_ONLY (concentration around CT=F). Synthesis says block sizing behind MATCH + DSR\u22650.85. | **VERDICT:** COMMODITY has elite strategies (`multi_asset_cot` PF=4.72, `multi_asset_copytrader` PF=3.14) but class-wide stats are contaminated by CT=F concentration. Post-dedup COMMODITY is Tier 1 ONLY if `ab_analysis.yml` clears `multi_asset_cot` AND friction-adjusted DSR \u2265 0.85. Until then: **PAPER-TRADE ONLY**. |\n| **CRYPTO scoring** | KimiCLI says higher scores are inversely correlated with performance. Edge_per_class says confidence metric is anti-correlated. | **VERDICT:** Confirmed by multiple agents. Action: Replace aggregate score filtering with strategy-family + LONG direction filtering. Do NOT trust `confidence >= 0.85` as a buy signal for CRYPTO/ETF. |\n| **FOREX** | Edge_per_class says PF=0.29/-1026% PnL (catastrophic). Kilocode says `forex-rsi-ema-scout` PF=1.68 (promising single strategy). | **VERDICT:** Class-wide FOREX is toxic. Single strategy `forex-rsi-ema-scout` is promising but n=22 (below credibility threshold of n\u226530). Action: `FOREX_HARD_DISABLE=1` class-wide until carry-factor ships AND n\u226530 clean rolling achieved. |\n| **EQUITY** | All agents agree: EQUITY is the ONLY class clearing strict filters (WR=51.5%, PF=1.56, n=425). | **VERDICT:** EQUITY is `FILTER_READY_SMALL_SIZE`. $100 per $10k account (swing cap). This is the only real-money-ready class as of 2026-05-16. |\n\n---\n\n## 4. OPEN QUESTIONS\n\n1. **`multi_asset_cot` PF=21.33 \u2014 MATCH or INFLATED?** Awaiting `ab_analysis.yml` dispatch.\n2. **CRYPTO score inversion root cause:** Miscalibrated scoring module or just noise?\n3. **DB_PASS_BACKTESTS in GitHub secrets?** Blocks backtest DB split + outcome resolution table.\n4. **VIX+YC overlay wiring:** When will `passes_smart_score()` be updated with the +15 bonus?\n5. **CT=F PROBATION review:** Will 2026-06-06 review clear CT=F for live sizing or re-block?\n6. **Bond scanner timeline:** When will `bond_scanner.py` expand beyond TLT/HYG?\n7. **PEAD earnings feed:** Is `incubator_picks.json` sufficient or do we need a real earnings calendar API?\n8. **Cross-PC gateway persistence:** Gateway was down earlier today. Needs auto-restart on desktop boot.\n\n---\n\n## 5. NEXT SESSION PRIORITIES (Suggested)\n\n1. **PR-A (Mon-Wed sprint):** BTC hour filter, trust_score swap, FOREX disable, COT verification, CRYPTO quarantine\n2. **PR-B (Thu-Sun sprint):** DB freshness guardian, cross-DB consistency, PCG-5 shadow\n3. **Verify `DB_PASS_BACKTESTS` in GH secrets** \u2014 unblock P0 infra work\n4. **Wire VIX+YC +15 bonus** into `passes_smart_score()`\n5. **Run `ab_analysis.yml`** for `multi_asset_cot`"
      },
      {
        "enhancement_id": 9,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "bond_strategy_harness: deliberate wiring deferral now unblocked by PR2 \u2014 wire as forward_test_only",
        "description": "bond_strategy_harness.py is the one genuine orphan of the June-6 academic sleeves (residual_momentum + basis_carry have callers). The deferral was deliberate ('wire only AFTER the resolver is trustworthy') \u2014 that precondition is NOW MET (entry-anchored resolver default-on since 2026-06-10). BOND honest n=6 \u2014 supply is the binding constraint; this grows it. Workflow-verified (wf_3c3cdc16).",
        "category": "SCORING",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "claude-fable-ultracode",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "bond harness emits forward_test_only picks; BOND intrabar n grows toward 100",
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-10 18:39:26",
        "updated_at": "2026-06-10 18:39:26",
        "implemented_at": null,
        "link_md_path": "reports/2026-06-06-per-asset-class-edge-reality-and-academic-roadmap.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 7,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Stand up BOND data feed (currently n=0)",
        "description": "BOND class has zero live samples. Stand up yield-curve/duration-timing pilot data feed before any backtest.",
        "category": "DATA_FEED",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "IMPLEMENTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": "477",
        "created_at": "2026-06-02 14:17:14",
        "updated_at": "2026-06-02 21:50:34",
        "implemented_at": "2026-06-02 21:50:34",
        "link_md_path": "reports/EAGLE2_SYNTHESIS_GROUNDED_2026-06-02_claude-opus-4-8.md",
        "link_url": null,
        "link_github_ref": "477",
        "enhancement_plan": "Shipped in PR #477 (opt-in sidecar): verified_strategies/bond_data_feed.py \u2014 bond ETFs via data_fetcher failover + Treasury yield curve via FRED + curve_is_inverted + snapshot. 5 network-free tests. Wiring: future bond_duration_timing_pilot + canonical_promotion harness once a sleeve is pre-registered."
      },
      {
        "enhancement_id": 1,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "Add yield-curve-momentum (TLT/IEF steepener-flattener)",
        "description": "Use new_strategies/tsmom.py framework to trade the 10Y-2Y curve via TLT vs IEF. BOND class currently has only bond_connors_rsi2 (new, no track record).",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "ring-2.6-1t",
        "related_persona_id": "voss_global_macro",
        "proposed_features": null,
        "success_metric": "New strategy emits picks; BOND class n grows from 18 (sub-floor) toward charter n>=100",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:04:26",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      },
      {
        "enhancement_id": 8,
        "asset_class": "BONDS",
        "source_ref": null,
        "title": "BOND duration-timing (clean-bar) \u2014 REJECTED: negative alpha vs AGG",
        "description": "48mo clean-bar duration-timing: PF1.08 Sharpe0.10, #111 attribution vs AGG NEGATIVE alpha (t=-0.63 beta0.50) + bootstrap[0.53,2.41]. 2022-25 rate regime. Closes BONDS#7 data-gap. Only ETF dual-momentum clears the gate-stack of 5 archetypes.",
        "category": "METHODOLOGY",
        "expected_impact": "LOW",
        "effort": "M",
        "status": "REJECTED",
        "proposed_by": "claude-opus-4-8",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": null,
        "target_release": null,
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-06-04 03:52:42",
        "updated_at": "2026-06-04 03:52:42",
        "implemented_at": null,
        "link_md_path": "reports/bond_duration_timing_backtest_2026-06-03.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "FUTURES": [
      {
        "enhancement_id": 2,
        "asset_class": "FUTURES",
        "source_ref": null,
        "title": "Replace empty FUTURES tile with unified futures taxonomy",
        "description": "A unified futures taxonomy would stop the page from showing a nearly empty standalone FUTURES class while real futures exposure is discussed elsewhere. This is primarily a reporting/trust fix before it is a strategy expansion.",
        "category": "UI",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "gpt-5.4/openai",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "The dashboard no longer presents FUTURES as a zombie class; futures exposure is represented under one honest taxonomy with clear sub-sleeves.",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-27 06:34:33",
        "updated_at": "2026-05-29 06:30:08",
        "implemented_at": null,
        "link_md_path": "updates/QUICK_WINS_EAGLE_2026-05-27_0217_EST_GPT-5.4_OpenAI.md",
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": "# Audit quick wins \u2014 EAGLE review\n\n**Timestamp:** 2026-05-27 02:17 EST (Toronto local review window)  \n**Model / provider:** GPT-5.4 / OpenAI\n\n## What was reviewed\n\n- Deduplicated canonical report set:\n  - `reports/90day_gap_analysis_2026-05-15.md`\n  - `reports/asset_class_90day_plan_{BOND,COMMODITY,CRYPTO,EQUITY,ETF,FOREX,FUTURES,PENNY_MEME}_2026-05-15.md`\n- Pipeline / gate path:\n  - `audit_trail/quality_gates.py`\n  - `tools/dashboard_hc_rules.py`\n  - `audit_dashboard/hc_filter.js`\n  - `alpha_engine/money_ready_verdict.py`\n  - `audit_dashboard/data/pf_registry.json`\n  - `audit_dashboard/data/quarantine_manifest.json`\n- Roadmap / incidents surfaces:\n  - `DAILY_IDEAS.MD`\n  - `audit_dashboard/incidents.html`\n  - `updates/index.html`\n\n## Lead verdict\n\n1. **Best near-term classes:** EQUITY and ETF.\n2. **Potential but not trustworthy yet:** COMMODITY until COT history is re-aggregated post dedup.\n3. **Needs hard containment or isolation:** FOREX, PENNY_STOCK, MEMECOIN.\n4. **Research-only for now:** BOND.\n5. **Should stop being its own empty tile:** FUTURES; merge conceptually into a unified futures / commodity-futures sleeve.\n\n## Per-asset-class strategy call\n\n| Class | Current call | Best next strategy |\n| --- | --- | --- |\n| CRYPTO | Too noisy; broad dynamic universe dilutes edge | Liquid-core sleeve only: BTC/ETH/SOL + top liquid L1s, on-chain/funding, strict liquidity/source whitelist |\n| EQUITY | Strongest non-crypto path | Large-cap momentum + quality + PEAD + hard VIX/SPY regime gates; split out penny/meme contamination |\n| ETF | Most underused clean edge | SPDR sector rotation + VIX<25 gate + dual-momentum fallback |\n| COMMODITY | Metrics currently overstated by COT history bug risk | Re-aggregate first, then diversified COT + carry/momo across 5-7 contracts |\n| FOREX | Realized book still weak | 4-major paper-only sleeve with SHORT/DXY/session gating; isolate winners, suppress class drag |\n| BOND | Thin sample, no real edge yet | Research-only: TIPS MR, curve carry, HYG-LQD credit MR |\n| FUTURES | Empty tile, duplicate taxonomy | Merge into futures/commodity-futures reporting model; add financial futures only as research sidecars |\n| PENNY / MEME | Structural drag | Full quarantine, no production sleeve |\n\n## Safety-gate conclusions\n\n- **Profitable-but-filtered risk exists.** Likely false negatives are concentrated in:\n  - HC JS/Python drift,\n  - strict small-sample FOREX / non-core class forward-trade floors,\n  - concentration gates masking concentrated but real sleeves,\n  - quarantine logic that hides winners instead of surfacing them for audit.\n- **Hot-streak support is incomplete today.** The repo has streak scoring in `audit_trail/quality_gates.py`, but **not** a clean auditable hot-streak exemption path in the live admission stack.\n- **No class currently deserves a blind \u201csure thing\u201d exemption.** There are repeatable mean-reversion / range behaviors in ETF, BOND, and some major FX setups, but nothing in the current evidence base justifies calling any trade a guaranteed two-price oscillation.\n\n## Quick wins executed in this pass\n\n### 1. Canonical markdown path output for dedup reviews\n\n**Problem:** `tools/dedup_md_files.py` already deduplicated markdown content correctly, but there was no direct CLI mode for \u201cjust print the exact canonical paths\u201d without piping JSON through `jq`.\n\n**Change made:**\n\n- Added `--paths-only` to `tools/dedup_md_files.py`\n- Updated `.claude/skills/dedup-md-files/SKILL.md` with the direct canonical-path invocation\n\n**Why it matters:** this makes large audit/report review batches faster and safer by giving one canonical path per duplicate group immediately, which is exactly the workflow requested for the asset-class report sweep.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/dedup_md_files.py\npython3 tools/dedup_md_files.py --from-file /tmp/user_md_paths.txt --paths-only\n```\n\n### 2. Dashboard seed path now accepts singular/plural asset-class aliases\n\n**Problem:** `tools/audit_pick_funnel/seed_incidents_enhancements.py` mixed data rows like `ETF` with migrated MySQL table names like `ENHANCEMENT_ETFS`, which breaks seeding before the reviewed findings can reach the incidents/enhancements dashboard.\n\n**Change made:**\n\n- Added a table-suffix alias normalizer in `tools/audit_pick_funnel/seed_incidents_enhancements.py`\n- Added the EAGLE-reviewed incidents and enhancements to the seed list used by the nightly dashboard pipeline\n\n**Why it matters:** this turns the review backlog into the repo\u2019s actual import path instead of leaving it stranded in markdown. It also fixes a real seeding bug already present in the tool.\n\n**Verification used:**\n\n```bash\npython3 -m py_compile tools/audit_pick_funnel/seed_incidents_enhancements.py\npython3 tools/audit_pick_funnel/seed_incidents_enhancements.py\n```\n\n## Proposed PR list (highest ROI first)\n\n1. **dedup-md-files: add `--paths-only` direct canonical output**  \n   Files: `tools/dedup_md_files.py`, `.claude/skills/dedup-md-files/SKILL.md`\n2. **audit-review docs: cross-asset quick wins + remaining backlog**  \n   Files: `updates/*EAGLE*.md`\n3. **profitable-but-filtered audit lane**  \n   Files: `audit_trail/quality_gates.py`, `audit_trail/dashboard_generator.py`, optional DB sidecar table\n4. **HC parity: JS/Python rule drift removal**  \n   Files: `audit_dashboard/hc_filter.js`, `tools/dashboard_hc_rules.py`, `config/hc_gate_params.json`\n5. **EQUITY clean-universe split**  \n   Files: `alpha_engine/config.py`, `alpha_engine/scanner.py`, `alpha_engine/equity_strategies.py`\n6. **ETF VIX-gated sector rotation activation**  \n   Files: `alpha_engine/etf_strategies.py`, emitter wiring, gate/config path\n7. **COMMODITY post-dedup re-aggregation + honest tile reset**  \n   Files: dashboard generator / reporting path, COT audit helpers\n8. **FOREX isolation / hard-disable guard**  \n   Files: `audit_trail/quality_gates.py`, config/env gates\n\n## Seed rows for Incidents / Enhancements dashboard\n\n### Proposed INCIDENT rows\n\n| Type | Class | Priority | Title | Why it belongs on the board |\n| --- | --- | --- | --- | --- |\n| INCIDENT | OVERALL | P0 | Profitable-but-filtered picks are not surfaced anywhere | Hides false negatives and blocks gate-quality learning |\n| INCIDENT | OVERALL | P0 | HC JS/Python parity drift changes eligibility by surface | Same pick can qualify differently across code paths |\n| INCIDENT | COMMODITY | P0 | COMMODITY headline PF/WR still contaminated by pre-clean COT aggregation | Current class story is not trust-safe |\n| INCIDENT | FOREX | P1 | FOREX class still aggregates losers around a small winner subset | Needs isolation instead of blanket class treatment |\n| INCIDENT | EQUITY | P1 | Penny/meme names still pollute main EQUITY sleeve | Backtests use clean large-cap set; live path does not |\n| INCIDENT | FUTURES | P1 | FUTURES is a zombie tile with real futures hidden under COMMODITY | Taxonomy obscures edge and misleads the page |\n\n### Proposed ENHANCEMENT rows\n\n| Type | Class | Impact | Title | Why it matters |\n| --- | --- | --- | --- | --- |\n| ENHANCEMENT | OVERALL | HIGH | Add profitable-but-quarantined / profitable-but-filtered audit lane | Makes false negatives visible without changing live picks |\n| ENHANCEMENT | OVERALL | HIGH | Add bounded hot-streak exemption with explicit audit trail | Lets proven sleeves earn temporary exemptions safely |\n| ENHANCEMENT | ETF | HIGH | Make VIX-gated sector rotation the primary ETF sleeve | Strongest low-cost clean edge in the current stack |\n| ENHANCEMENT | EQUITY | HIGH | Split LARGE_CAP_EQUITY from PENNY_MEME research-only names | Removes a major hidden drag |\n| ENHANCEMENT | COMMODITY | HIGH | Recompute class health from deduped independent COT cycles only | Restores trust in commodity metrics |\n| ENHANCEMENT | FUTURES | MED | Replace empty FUTURES tile with unified futures taxonomy | Makes `/audit` reporting honest |\n\n## Recommended unified database model\n\n### `finding`\n\n- `id`\n- `finding_type` (`incident`, `enhancement`, `roadmap`)\n- `asset_class`\n- `severity`\n- `impact`\n- `status`\n- `title`\n- `summary`\n- `component`\n- `recommended_fix`\n- `owner`\n- `reporter`\n- `source_doc_path`\n- `source_doc_url`\n- `parent_id`\n- `canonical_hash`\n- `evidence_json`\n- `created_at`\n- `updated_at`\n- `closed_at`\n\n### `finding_event`\n\n- `id`\n- `finding_id`\n- `event_type`\n- `old_value`\n- `new_value`\n- `actor`\n- `event_at`\n- `payload_json`\n\n### Optional `finding_link`\n\nCross-links between findings, PRs, reports, incidents, enhancements, and roadmap epics.\n\n## Sources used\n\n- `reports/90day_gap_analysis_2026-05-15.md`\n- `reports/asset_class_90day_plan_CRYPTO_2026-05-15.md`\n- `reports/asset_class_90day_plan_EQUITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_FOREX_2026-05-15.md`\n- `reports/asset_class_90day_plan_COMMODITY_2026-05-15.md`\n- `reports/asset_class_90day_plan_ETF_2026-05-15.md`\n- `reports/asset_class_90day_plan_BOND_2026-05-15.md`\n- `reports/asset_class_90day_plan_FUTURES_2026-05-15.md`\n- `reports/asset_class_90day_plan_PENNY_MEME_2026-05-15.md`\n- `DAILY_IDEAS.MD`\n- `audit_dashboard/incidents.html`\n- `updates/index.html`"
      },
      {
        "enhancement_id": 1,
        "asset_class": "FUTURES",
        "source_ref": null,
        "title": "Add commodity term-structure roll-yield strategy",
        "description": "Use cta_commodity_momentum_term framework. Captures contango/backwardation premium \u2014 proven hedge-fund recipe.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "M",
        "status": "BACKLOG",
        "proposed_by": "ring-2.6-1t",
        "related_persona_id": "lang_value_contrarian",
        "proposed_features": null,
        "success_metric": "Roll-yield strategy emits picks; FUTURES class WR rises above 30% (current 11.1%)",
        "target_release": "2026-08-12",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:04:26",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ],
    "PENNY": [
      {
        "enhancement_id": 1,
        "asset_class": "PENNY",
        "source_ref": null,
        "title": "Implement float-squeeze detector from skyrocket_detector framework",
        "description": "Penny stocks have only one (unwired) strategy. Build float-squeeze + volume-breakout signal using existing SIDU pattern code.",
        "category": "METHODOLOGY",
        "expected_impact": "MEDIUM",
        "effort": "L",
        "status": "BACKLOG",
        "proposed_by": "ring-2.6-1t",
        "related_persona_id": null,
        "proposed_features": null,
        "success_metric": "New strategy wired into production_scanner; emits >=20 picks/month; first 50 picks show WR>=50%",
        "target_release": "2026-09-26",
        "review_notes": null,
        "implementation_pr": null,
        "created_at": "2026-05-25 03:41:15",
        "updated_at": "2026-05-29 06:04:26",
        "implemented_at": null,
        "link_md_path": null,
        "link_url": null,
        "link_github_ref": null,
        "enhancement_plan": null
      }
    ]
  },
  "findings": {
    "OVERALL": [
      {
        "id": 16,
        "title": "2026-06-09 non-crypto performance autopsy from ai_leaderboard + money_ready_verdict",
        "description": "Confirmed FOREX 25% WR n=24 PF=0.078 (policy_frozen, neg exp, USDJPY + multi_asset_scanner conc); COMMODITIES ~22% n=18 PF=0.16; ETFS 21% n=14 recency fail; FUTURES 33% n=18. All sub-coinflip, low n<30, INSUFFICIENT_DATA or frozen. Primary emitters: multi_asset_scanner, etf_all_strategies etc. Ties to prior resolver/backfill artifacts, concentration, mismatched strategies for low-vol classes.",
        "severity": "P0",
        "status": "OPEN",
        "agent": "grok-4.3",
        "evidence": "money_ready_verdict.json (2026-06-09); ai_tournament_leaderboard.json + /audit/ai_leaderboard.html; strategy_tier_tracker; config.py PERMANENTLY_KILLED + MIN_ELITE; quality_gates non_crypto_edge_guard; previous deep_dive_commodity etc.",
        "linked_incident_id": 127,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-06-09 18:05:15",
        "updated_at_utc": "2026-06-09 18:05:15"
      },
      {
        "id": 1,
        "title": "Client-side AI-tournament leaderboard score uses fake CI (wr_ci_hi=1, score=wr*pf) \u2014 contradicts page's own methodology",
        "description": "audit_dashboard/ai-tournament.html calcModelStats() L517-521 computes m.score = m.wr * m.pf with m.wr_ci_lo = m.wr and m.wr_ci_hi = 1 \u2014 i.e. the displayed score is raw WR*PF (not CI-shrunk) and the 'CI' column shows [WR, 100%] (a fake range). Meanwhile the page header (L190), explainer (L201, L207), and ELI5 (L857) all state 'Score = lower-95%(WR) x lower-95%(PF), CI-adjusted; small samples penalized'. The live leaderboard ALWAYS uses this client score (calcModelStats(allPicks) at L723); the real server CI score in ai_tournament_leaderboard.json (data.models) is only used as a no-picks fallback. Re-ranks optimistically vs the documented methodology.",
        "severity": "P0",
        "status": "RESOLVED",
        "agent": "claude-gx10-c9b9",
        "evidence": "Resolved via commit df65641d8 (fix/leaderboard-real-ci \u2192 main): added closed-form Wilson WR_lo/hi + bootstrap PF_lo (B=500, seeded LCG) per deepseek swarm consult Option B; score now uses real CI values. Deployed live 2026-05-29 ~22:18 UTC; verified wilsonLow present on live page + node --check passes.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-29 21:25:14",
        "updated_at_utc": "2026-05-29 22:19:02"
      },
      {
        "id": 12,
        "title": "at_raw_picks.pnl_pct populated asymmetrically by status \u2014 raw R:R math invalid",
        "description": "PEER-VERIFIED FINDING (2026-05-31 / claude-opus-4-7-desktop)\n\nSYMPTOM\n-------\nFiltering at_raw_picks by `pnl_pct IS NOT NULL` returns one-sided WR for many strategies that pf_registry (policy-clean) reports as balanced.\n- crypto_liquidity_wick_reversal_v1: at_raw_picks shows 59 WON / 0 LOST, but pf_registry policy-clean = 60% WR n=30 (balanced).\n- atr_percentile_gate: at_raw_picks shows 66 LOST / 0 WON.\n\nROOT CAUSE\n----------\nThe asymmetry is STRUCTURAL, not just a NULL-fill problem:\n\n1. NULL distribution is roughly balanced across closed rows (WON: 16609 closed, 18 NULL = 0.11%; LOST: 11434 closed, 22 NULL = 0.19%). So `pnl_pct IS NOT NULL` filter is NOT the primary asymmetry source.\n\n2. The REAL asymmetry: 41 strategies (n>=10 closed) have ONE-SIDED resolution \u2014 only WON rows OR only LOST rows, with the other side stuck in OPEN forever. Examples (won/lost/open):\n   - drawdown_recovery_rsi_sol: 0/75/878\n   - drawdown_recovery_rsi_xrp: 0/82/881\n   - ml_enhanced_FETUSDT_1d_B_lightgbm: 107/0/334\n   - atr_percentile_gate: 0/66/371\n   - crypto_liquidity_wick_reversal_v1: 59/0/307\n   - reddit/reddit:u/* (many): all one-sided\n   - ml_enhanced_*_lightgbm: all WON-only\n\n3. WRITER PIPELINE:\n   - INSERT: sync_all_picks_to_mysql.py:531 inserts rows with status='OPEN' and pnl_pct=NULL.\n   - UPDATE: alpha_engine/active_picks_sync.py:336-345 UPDATEs status/pnl_pct only when (status IN ('OPEN','ACTIVE') OR status IS NULL). Logic at lines 187-209 uses per-class `win_threshold` from PNL_WIN_THRESHOLD_BY_CLASS. The resolver computes pnl_pct from (entry, live_price, side) \u2014 but for some strategies live_price never moves past the threshold in one direction, OR the resolver job is run with a side-specific condition that only closes profitable / only closes losing trades (depending on strategy config / TP-SL asymmetry).\n   - The UPSERT in sync_all_picks_to_mysql.py:553-555 only updates pnl_pct when VALUES(status) <> 'OPEN' AND VALUES(pnl_pct) IS NOT NULL \u2014 so OPEN rows stay pnl_pct=NULL by design.\n\nCONSEQUENCE\n-----------\nAny raw-DB R:R / WR math that filters `pnl_pct IS NOT NULL` or `status IN ('WON','LOST')` on at_raw_picks will be SYSTEMATICALLY BIASED toward whichever side the resolver actually closes for that strategy. The 78.9% CRYPTO Smart-Picks figure already disputed in CLAUDE.md is consistent with this bias (only winners close, losers linger in OPEN). pf_registry policy-clean appears to use a different (closed_picks.json + flicker-dedup) path and reports balanced numbers \u2014 that is the trustworthy source.\n\nRECOMMENDED FIX\n---------------\nA) Audit active_picks_sync resolver for one-sided closure: for each strategy with one-sided resolved rows, dump OPEN rows' live_price vs entry vs TP/SL and confirm whether the un-resolved side is genuinely unhit or the resolver is skipping the comparison.\nB) Add an EXPIRED-by-age sweep: any at_raw_picks OPEN row older than {asset_class_max_holding_period} should be force-closed at last-known price \u2192 pnl_pct populated, status='EXPIRED' with pnl_pct preserved (not NULL). This restores symmetry.\nC) Update all downstream R:R math to source from pf_registry policy-clean (or closed_picks.json) \u2014 NOT from raw at_raw_picks filtered by pnl_pct IS NOT NULL. Document in docs/AGENT_QUICKSTART_AUDIT_AND_STRATEGIES.md.\nD) Add a CI assertion: `SELECT strategy FROM at_raw_picks WHERE status IN ('WON','LOST') GROUP BY strategy HAVING SUM(status='WON')>=10 AND SUM(status='LOST')=0 OR (SUM(status='LOST')>=10 AND SUM(status='WON')=0)` should be empty after fix B lands.\n\nEVIDENCE\n--------\nPer-class WR/PF in pf_registry uses post-M-067 policy-clean path. Raw at_raw_picks queries (with status filter) overstate WR on strategies with WON-only one-sided resolution and understate on LOST-only ones. The reddit/* signal-fingerprints especially are 100% one-sided (28 LOST / 0 WON or 28 WON / 0 LOST patterns repeat) \u2014 looks like signal-replay rather than independent trades, also worth investigating separately.\n",
        "severity": "P1",
        "status": "OPEN",
        "agent": "claude-opus-4-7-desktop",
        "evidence": "Query: SELECT strategy, SUM(status='WON'), SUM(status='LOST'), SUM(status='OPEN'), COUNT(*) FROM at_raw_picks GROUP BY strategy HAVING (won>=10 AND lost=0) OR (lost>=10 AND won=0) \u2192 41 rows. NULL-by-status: WON 18/16609 (0.11%), LOST 22/11434 (0.19%). Writers: sync_all_picks_to_mysql.py:531 (INSERT, OPEN/NULL), alpha_engine/active_picks_sync.py:336 (UPDATE on close).",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-31 02:15:09",
        "updated_at_utc": "2026-05-31 02:15:09"
      },
      {
        "id": 10,
        "title": "PR #75/76/78 superset chain \u2014 #78 is mergeable after stripping stale data JSONs",
        "description": "Three open PRs are related: #75 (per-class FINDING tables) is subsumed by #76 (_UNSET sentinel + CLI), which is subsumed by #78 (CLI + renderer + test_cli_finding.py). #78 is the superset. However #78 includes 2 stale data JSONs (ai_tournament_leaderboard.json + ai_tournament_model_summary.json from 2026-05-29T01:54Z) that would roll back live tournament data by 21h. Recommendation: strip those 2 JSON files from #78 diff, then merge. Close #75 and #76 as superseded.",
        "severity": "P1",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "Chain settled: PR #75 CLOSED, #76 MERGED, #78 CLOSED. Verified 2026-06-11.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-31 02:07:35",
        "updated_at_utc": "2026-06-11 22:07:19"
      },
      {
        "id": 3,
        "title": "OpenRouter API key (10c5b7de...) total-limit exhausted \u2014 blocks 6 revived models",
        "description": "Pipeline run 26641993453 logs show repeated auth_error (403) Key limit exceeded across every OpenRouter-routed model: claude_haiku_4_5, command_a, minimax_m2_5, kimi_k2_6, qwen3_5_plus, qwen3_6_max. Operational fix: top up OpenRouter credits OR rotate to fresh OR API key in GH secret OPENROUTER_API_KEY.",
        "severity": "P1",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "GH Actions run 26641993453 job 78522642787 log; lines like '[API] anthropic/claude-haiku-4.5 auth_error (403): Key limit exceeded (total limit)'",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 02:30:32",
        "updated_at_utc": "2026-05-30 02:30:32"
      },
      {
        "id": 14,
        "title": "picks-now-refresh Push step: conflicted rebase not aborted -> exit 1 -> FTP deploy skipped",
        "description": "Run 27185397447 (2026-06-09) FAILED at \"Push data commit\". Two crons regenerated audit_dashboard/data/picks_now.json simultaneously -> git pull --rebase hit a CONFLICT. The retry loop does \"git pull --rebase origin main || true\" which SWALLOWS the error but leaves the repo MID-REBASE (conflicted); all 5 retries then stay stuck in that state and the step exits 1. Because Push hard-fails (no continue-on-error), the subsequent FTP-deploy step is SKIPPED \u2014 so on conflict-race runs picks-now neither pushes NOR deploys (the in-line \"FTP deploy still ran\" comment does NOT hold). Self-heals on the next non-conflicting cron. Minimal fix: on conflict, auto-resolve the regenerated data file to local (git checkout --theirs audit_dashboard/data/picks_now.json; git add; GIT_EDITOR=true git rebase --continue) OR git rebase --abort before retry; AND move FTP deploy before push (or continue-on-error the push) so a push race never blocks the live data ship. NOTE: peer-owned in-flight file (edited 2026-06-09) \u2014 not auto-editing to avoid collision.",
        "severity": "P2",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "picks-now-refresh.yml Push step now continue-on-error + rebase --abort handling (comment cites FINDING #14). Verified 2026-06-11.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-06-09 07:02:45",
        "updated_at_utc": "2026-06-11 22:07:19"
      },
      {
        "id": 11,
        "title": "PR #83 meta-effectiveness analyzer \u2014 Wire-Up Rule compliance needed before merge",
        "description": "tools/portfolios/meta_effectiveness.py (625 lines) has zero production callers and no GHA workflow integration. 11 tests all pass. Math is solid (Sharpe, Sortino, MaxDD, CAGR, Calmar, attribution decomposition). Concern: violates repo Wire-Up Rule \u2014 new analysis modules need production caller or explicit opt-in wiring plan. Recommendation: merge after adding to SKILL.md as side-car tool.",
        "severity": "P2",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "PR #83 MERGED with wiring. Verified 2026-06-11.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-31 02:07:35",
        "updated_at_utc": "2026-06-11 22:07:19"
      },
      {
        "id": 9,
        "title": "at_raw_picks: source_system casing duplication (battleground vs Battleground_Main)",
        "description": "crypto_liquidity_wick_reversal_v1 has 366 rows split across 'battleground' (190) and 'Battleground_Main' (176) \u2014 same engine, two spellings. Any source-system aggregation downstream (BLOCKED_SOURCE_SYSTEMS, edge_filters.py, pf_registry source_share) will mis-count concentration. Fix: normalize at insert time, or backfill UPDATE all *_Main / *Main / case-variants to the canonical lowercase form. Also audit other source_system values for the same problem.",
        "severity": "P2",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "SELECT source_system, COUNT(*) FROM at_raw_picks WHERE strategy='crypto_liquidity_wick_reversal_v1' GROUP BY source_system \u2192 battleground 190, Battleground_Main 176. Surfaced in FINDING_CRYPTO#1 investigation.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 21:29:06",
        "updated_at_utc": "2026-05-30 21:29:06"
      },
      {
        "id": 8,
        "title": "pf_registry aggregates per-engine closed_picks.json without per-class single-source flag",
        "description": "pf_registry.by_asset_class_strategy_policy_clean_net surfaced crypto_liquidity_wick_reversal_v1 as the only PF>=1.5 & n>=30 & WR>=50 strategy across all classes \u2014 looked like an edge. But all 30 'policy-clean' picks came from a single engine's closed_picks.json (battleground), with no cross-engine corroboration. The registry doesn't carry a per-row source_share field or set a 'single_source_artifact' flag, so consumers (audit pages, this audit skill) have to re-derive source concentration from raw DB themselves to avoid being fooled. Enhancement: add a single_source_pct field to each registry row that compares the pick set's top-source share to a 60% threshold; flag rows above as 'single_source_artifact = true' so the dashboards can grey-out the headline number.",
        "severity": "P2",
        "status": "RESOLVED",
        "agent": "claude-gx10-c9b9",
        "evidence": "Resolved via PR #86 (commit on branch feat/pf-registry-source-concentration). build_pf_registry.py now emits single_source_pct + top_source + is_single_source_artifact on every row in by_asset_class_*, by_asset_class_strategy_*, \u2026_strategy_symbol, \u2026_strategy_date. Threshold 0.60 (env override PF_REGISTRY_SOURCE_CONCENTRATION_THRESHOLD), n>=5 min. 10/10 new tests pass.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 20:15:25",
        "updated_at_utc": "2026-05-30 21:29:07"
      },
      {
        "id": 5,
        "title": "OpenAI 429 rate-limited across gpt4_1, gpt5_chat, gpt5_mini",
        "description": "Pipeline run 26641993453 hit OpenAI 429 across 3 retries on all personas for gpt4_1/gpt5_chat/gpt5_mini. Fix: raise OpenAI tier OR stagger model calls OR bump retry/backoff in populate_picks.",
        "severity": "P2",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "run 26641993453 log",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 02:30:33",
        "updated_at_utc": "2026-05-30 02:30:33"
      },
      {
        "id": 6,
        "title": "llama4_scout: 'llama-4-scout-17b-16e-instruct' not on Cerebras catalog (404)",
        "description": "config/model_persona_mapping.json sets api_type=cerebras / model_name='llama-4-scout-17b-16e-instruct' for llama4_scout. Cerebras returns 404 'Model does not exist or you do not have access'. Either pick a valid Cerebras model (llama-3.3-70b, llama3.1-8b) or route llama4_scout via OpenRouter (meta-llama/llama-4-scout).",
        "severity": "P2",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "run 26641993453 Cerebras 404 response",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 02:30:33",
        "updated_at_utc": "2026-05-30 02:30:33"
      },
      {
        "id": 4,
        "title": "ANTHROPIC_API_KEY GH secret unset \u2014 blocks cursor_agent revival",
        "description": "Workflow env block wires ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY || '' }} but the secret is unset in repo, so the env var renders empty and populate_picks.py returns [] for cursor_agent silently. Fix: set ANTHROPIC_API_KEY in repo secrets.",
        "severity": "P2",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "run 26641993453 log shows ANTHROPIC_API_KEY: (empty) while OPENROUTER_API_KEY/OPENAI_API_KEY render as ***",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 02:30:32",
        "updated_at_utc": "2026-05-30 02:30:32"
      },
      {
        "id": 2,
        "title": "FINDING CLI: upsert overwrites existing severity with INFO default when --severity not passed on update",
        "description": "tools/audit_pick_funnel/cli_track.py cmd_finding: when called to update an existing row by title (e.g. to mark RESOLVED), if --severity is omitted, argparse provides the INFO default and the SQL UPDATE writes it over the existing severity. Same issue likely affects --status. Fix: only include --severity/--status in the UPDATE clause when the user actually passed them (use a sentinel or detect from sys.argv) \u2014 alternatively, drop the argparse default and treat omitted as None, only updating non-None fields. Hit live during the FINDING_OVERALL#1 RESOLVED update (severity briefly flipped P0->INFO; restored manually).",
        "severity": "P2",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "Fixed by _UNSET sentinel, cli_track.py:43-57, PR #76 MERGED. Verified 2026-06-11 (workflow wf_cf7c13d9).",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-29 22:19:02",
        "updated_at_utc": "2026-06-11 22:07:19"
      },
      {
        "id": 15,
        "title": "Backup Restore Verification workflow is scheduled but has NEVER run",
        "description": "backup-verify.yml has on: schedule + workflow_dispatch but its run history is empty (never fired). A scheduled backup-restore-verification that never runs = unverified backups. Check the cron syntax / whether the schedule trigger is valid / whether it was ever enabled.",
        "severity": "P3",
        "status": "OPEN",
        "agent": "claude-opus-4-8",
        "evidence": ".github/workflows/backup-verify.yml on:schedule; gh run list shows 0 runs",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-06-09 17:53:09",
        "updated_at_utc": "2026-06-09 17:53:09"
      },
      {
        "id": 7,
        "title": "glm4_7_flash: OpenRouter 'No endpoints found for z-ai/glm-4.7-flash:free'",
        "description": "model_name 'z-ai/glm-4.7-flash:free' invalid on OpenRouter. Switch to a supported variant (e.g. z-ai/glm-4.6 or remove :free suffix).",
        "severity": "P3",
        "status": "OPEN",
        "agent": "claude-gx10-c9b9",
        "evidence": "run 26641993453 OpenRouter response",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 02:30:33",
        "updated_at_utc": "2026-05-30 02:30:33"
      },
      {
        "id": 13,
        "title": "EAGLE-6 v1 deployed to main (commit 2b4d7ce36) + documented in PR #456",
        "description": "On 2026-06-02 the EAGLE-6 statistical admissibility gate was deployed to main via commit 2b4d7ce36 (code: alpha_engine/eagle_gates.py + 6f2.7 wire in alpha_engine/production_scanner.py) and the standalone doc was delivered in PR #456 (commit 036599997, file EAGLE6_2026-06-02_minimax-m3-free.MD). v1 fires three fail-open gates: DSR noise filter (27 dead strategies from tools/deflated_sharpe_results.json, sr_haircut=2.5034), insufficient-n (<30 trades), source HHI concentration (<=0.20). Smoke test on 10 synthetic picks: in=10 -> EAGLE-4 keeps 6 (killed 2 personas, 2 directional, flipped 1 CRYPTO) -> EAGLE-5 keeps 6 (boosted 4) -> EAGLE-6 keeps 6 (all ADMISSIBLE). Standalone-module design (eagle_gates.py) survived concurrent agent reverts during the session. v2 backlog tracked in ENHANCEMENT_OVERALL#85 (PBO gate, walk-forward OOS gate, bootstrap CI, windowed-HHI).",
        "severity": "NOTEWORTHY",
        "status": "CONFIRMED",
        "agent": "minimax-m3-free",
        "evidence": "alpha_engine/eagle_gates.py:165-356 (EAGLE-6 block); alpha_engine/production_scanner.py:5587-5599 (6f2.7 wire); commit 2b4d7ce36 (code); commit 036599997 (doc); PR #456; tools/deflated_sharpe_results.json (DSR source); EAGLE6_2026-06-02_minimax-m3-free.MD",
        "linked_incident_id": null,
        "linked_enhancement_id": 63,
        "created_at_utc": "2026-06-02 14:18:52",
        "updated_at_utc": "2026-06-02 14:18:52"
      },
      {
        "id": 17,
        "title": "36 M-107 pre-registrations (H-105..H-110 + peers) sat LOCAL-ONLY uncommitted \u2014 rescued to main",
        "description": "2026-06-12: origin/main hypothesis_registry.json had 33 hypotheses while the shared working tree held 69 \u2014 the peer subagent's full M-107 pre-registration entries were one branch-switch/stash away from loss (known silent-revert pattern). Verified local superset, committed 41fbfa4d45 (+H-111 COMMODITY symbol-tier mutation family). Lesson: an uncommitted pre-registration is not a pre-registration.",
        "severity": "INFO",
        "status": "OPEN",
        "agent": "claude-fable-mdreview",
        "evidence": "git: main 33 vs worktree 69 hyps; commit 41fbfa4d45",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-06-12 18:23:43",
        "updated_at_utc": "2026-06-12 18:23:43"
      },
      {
        "id": 18,
        "title": "One-sided resolution sources flagged by check_one_sided_resolution (H5 coverage pathology)",
        "description": "2026-06-12 weekly loop MEASURE: WON-only sources incl. ml_enhanced_ADAUSDT_15m_B_lightgbm (42/43 WON), reddit u/AutoModerator (29/31), youtube coinbureau (21/21), cta_fx_multifactor (20/20); LOST-only incl. copy_pm_pm_6e1d5040 (54/55), gnews Manila Times (42/43), copy_hl_lb_None (37/378). >95% one-sided WON smells like resolution asymmetry, not edge; one-sided LOST sources are per-source-scorecard kill candidates (H4). Audit the resolution path per source before trusting their stats.",
        "severity": "INFO",
        "status": "OPEN",
        "agent": "claude-fable-mdreview",
        "evidence": "tools/check_one_sided_resolution.py output 2026-06-12",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-06-12 18:23:43",
        "updated_at_utc": "2026-06-12 18:23:43"
      }
    ],
    "STOCKS": [],
    "ETFS": [],
    "CRYPTO": [
      {
        "id": 2,
        "title": "Resolver starvation: only 42 OPEN CRYPTO resolved since Apr 29 vs 2,403 legacy",
        "description": "active_picks_sync's LIMIT 5000 ORDER BY signal_timestamp ASC means with 39,706 OPEN CRYPTO rows the oldest-5000 window cuts off at ~Apr 7. The wick strategy is the canary, not the only victim \u2014 every newer CRYPTO strategy is similarly starved. PR #87 (max-rows 20000) is a partial fix; real fix is ORDER BY DESC (or batched pagination) at alpha_engine/active_picks_sync.py:114. Until then, money_ready_verdict + pf_registry numbers for CRYPTO reflect mostly legacy resolutions, not current cohort behavior.",
        "severity": "P1",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "active_picks_sync.py:106 ORDER BY flipped ASC->DESC per PR #87 (2026-05-31); starvation backlog drained, table-wide OPEN=0. Verified 2026-06-11.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 21:29:07",
        "updated_at_utc": "2026-06-11 22:07:20"
      },
      {
        "id": 1,
        "title": "crypto_liquidity_wick_reversal_v1: 366 raw-DB picks all status=OPEN \u2014 never resolved",
        "description": "at_raw_picks shows 366 picks for this strategy (190 from battleground + 176 from Battleground_Main), ALL status=OPEN. Meanwhile battleground/data/closed_picks.json has 43 resolved snapshots (25W/18L = 58.1% WR) \u2014 this is what pf_registry surfaces as the strategy's 'edge'. Either (a) TP/SL targets are too far from entry so live monitor never triggers, (b) the resolver isn't checking this strategy's signals against live prices, or (c) the closed_picks.json is a one-off backtest snapshot disconnected from production. Worth diagnosing before any 'crypto edge' claim cites this strategy.",
        "severity": "P1",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "0 OPEN rows remain (205 WON / 1 ABANDONED). Residual one-sidedness superseded into FINDING_OVERALL#12 (CI assertion shipping). Verified 2026-06-11.",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-30 20:15:25",
        "updated_at_utc": "2026-06-11 22:07:19"
      },
      {
        "id": 3,
        "title": "CRYPTO Bonferroni-proven edge: trust=UNK & rr=RR1.0-1.5 & dir=LONG (n=327, WR 60.86%, PF 3.89)",
        "description": "Per top_edges_per_class.json (generated_at 2026-05-29T06:38Z \u2014 file is itself stale, see OVERALL #30): one CRYPTO segment passes BOTH Bonferroni adjustment AND walk-forward holdout:\n- Cell: trust=UNK & rr=RR1.0-1.5 & dir=LONG\n- n=327, wins=199, WR=60.86% (shrunk 60.23%), PF=3.885, avg_pnl=+1.09%\n- train_pf=3.903 n=203, holdout_pf=3.065 n=124 (holdout_pass=TRUE)\n- wr_z=3.928, bonferroni_pass=TRUE\nPlus 20 holdout-only-passing edges + 5 Bonferroni-only-passing. This is the strongest forward-validated CRYPTO signal in the audit corpus. Acceptance review: the trust=UNK qualifier means the segment is mostly UNPROVEN-tier strategies (per session backfill: tier=2 = 272 strats); the rr=RR1.0-1.5 + dir=LONG combo is generic. Likely captures a market regime rather than a strategy. Operator should run a single-strategy decomposition to identify whether one strategy dominates, or it's a genuine cross-strategy regime.",
        "severity": "NOTEWORTHY",
        "status": "RESOLVED",
        "agent": "claude-fable-sweep",
        "evidence": "REFUTED by the 2026-06-10 definitive edge audit (1,278 slices, Bonferroni): no repeatable edge; every narrowed slice fails the time-split. Source top_edges_per_class.json stale (2026-05-31).",
        "linked_incident_id": null,
        "linked_enhancement_id": null,
        "created_at_utc": "2026-05-31 02:11:26",
        "updated_at_utc": "2026-06-11 22:07:20"
      }
    ],
    "FOREX": [],
    "COMMODITIES": [],
    "BONDS": [],
    "FUTURES": [],
    "PENNY": []
  },
  "totals": {
    "incidents": 195,
    "enhancements": 208,
    "findings": 21
  }
}