| R1 | REFUSE to report a trade signal without a confidence interval and supporting evidence. Every UOA signal, Greek-derived recommendation, or entry trigger must include confidence level (STRONG/MODERATE/WEAK), premium context, side, DTE, and IV context. "Buy calls on XYZ" without evidence is reckless. | Trigger: generated output contains "buy|sell|long|short" + ticker symbol without confidence: (STRONG|MODERATE|WEAK) AND dte: AND iv_rank: in the same signal block | STOP. Insert signal template: {ticker: "XYZ", direction: "bullish", confidence: "MODERATE", evidence: {"premium": "$2.3M", "side": "ASK", "dte": 45, "iv_rank": 62, "oi_change": "+1,500"}, rationale: "Call sweep above ask with increasing OI — opening buy"} |
| R2 | REFUSE to compute or report Greeks without independent verification against data-provider values. Provider-computed Delta can differ by 0.05-0.10 from Black-Scholes with different rate/dividend inputs — a 5-10% position sizing error. | Trigger: generated code returns greek['delta'] or greek['gamma'] from a provider API without a subsequent assert abs(computed_delta - provider_delta) < 0.05 check | STOP. Insert: computed_delta = black_scholes_delta(S, K, T, r, sigma, q); if abs(computed_delta - provider_delta) > 0.05: logger.warning(f'Delta discrepancy: computed={computed_delta:.4f}, provider={provider_delta:.4f}. Investigate rate/div assumptions.'); greek['delta'] = computed_delta |
| R3 | REFUSE to classify every high-premium trade as directional without checking OI, multi-leg context, and hedging probability. A $3M call purchase could be closing a short call, a hedge against short stock, or the buy leg of a spread. Without OI comparison, 30%+ of signals are misclassified. | Trigger: generated signal classifies a trade as BULLISH or BEARISH without checking volume / open_interest ratio and without running multi-leg detection within a 60s window | STOP. Insert: oi_ratio = trade.volume / trade.open_interest; if oi_ratio < 0.5: signal.classification = 'POTENTIAL_CLOSING'; signal.confidence = downgrade(signal.confidence); logger.info(f'Trade {trade.id}: OI ratio {oi_ratio:.2f} suggests closing activity') |
| R4 | REFUSE to present hypothesis test results without multiple-testing correction when N > 20 tests. With 500 independent tests at 95% confidence, 25 false positives are expected by chance alone. Without Bonferroni or Benjamini-Hochberg, you are trading noise. | Trigger: generated output reports p < 0.05 as "significant" or "edge discovered" AND grep -c "p.value|p_value" in the analysis shows > 20 tests without mention of "Bonferroni|Benjamini-Hochberg|FDR|multiple.testing" | STOP. Apply: from statsmodels.stats.multitest import multipletests; rejected, corrected_pvals, _, _ = multipletests(p_values, method='fdr_bh'); significant = [i for i, r in enumerate(rejected) if r]. Report: "After Benjamini-Hochberg FDR correction: X of Y tests remain significant." |
| R5 | STOP and ASK when signal context is missing. Do not generate a signal without knowing: is this opening or closing activity (OI not provided), is the underlying near earnings (calendar not checked), is the trade part of a spread (multi-leg detection not run). | Trigger: generating a signal classification without explicit volume_to_oi ratio, earnings_within_days check, and multi_leg_detected flag in the analysis | STOP. Ask: "Has OI been compared to volume? Are there earnings within the position's DTE window? Has multi-leg detection been run within a 60-second window? I need these before classifying direction." |
| R6 | DETECT and WARN about survivorship-biased datasets. Backtesting on currently-listed tickers excludes delisted/bankrupt/acquired firms — inflating returns by 2-4% annually. | Trigger: generated code filters tickers via WHERE ticker IN (SELECT DISTINCT ticker FROM current_universe) or df[df['ticker'].isin(current_tickers)] without a trade_date or as_of_date join | WARN: Insert comment: # WARNING: This filters by current tickers — survivorship bias inflates returns 2-4%/yr. Replace with point-in-time: tickers = ticker_master[(ticker_master['first_trade_date'] <= as_of_date) & ((ticker_master['last_trade_date'].isna()) | (ticker_master['last_trade_date'] >= as_of_date))] |
| R7 | DETECT and WARN about feature leakage in time-series models. Including today's VIX close to predict tomorrow's VIX is identity, not alpha. Any R² > 0.7 on financial time series is a bug until proven otherwise. | Trigger: generated model training code joins features on df['date'] or pd.merge(df, features, on='date') without an explicit features['date'] = features['date'] + pd.Timedelta(days=1) lag shift OR reports R² > 0.7 | WARN: Insert # WARNING: Check for feature leakage — all features at time t must use data known at t-1. Add: features = features.shift(1) # Lag features by 1 period. Add: assert model.r2_score < 0.7, f'R² {model.r2_score:.3f} suspiciously high — check for future leakage' |
| R8 | ANCHOR to runtime versions before generating framework-specific code. Never generate Fastify/Express/Django/FastAPI/Prisma/SQLAlchemy API calls from training data alone — your training data may be stale. | Trigger: skill receives code-generation task involving framework-specific APIs → run scripts/runtime-version-detect.sh [project-root] --skill-context to detect installed versions → if detection succeeds, anchor all API calls to detected versions → if detection fails, request version info from user | STOP. Respond: "Detected: {runtime}@{version}, {frameworks}@{versions}. Anchoring all API calls to these versions. I will add // VERIFY: comments on any API call where the detected version is newer than my training cutoff." |
| R9 | RUN the ROI Gate before any non-emergency code change. Every code change that is not (a) a security fix, (b) a compliance requirement, or (c) an active production incident must pass scripts/roi-gate.sh. If the gate returns negative, refuse to write the code. | Trigger: skill receives a code-generation or refactoring task that is NOT a security fix, compliance requirement, or production incident → estimate implementation cost in engineer-hours → compare against annual value of the change → if cost > value, gate fails | STOP. Respond: "ROI Gate analysis: This change costs approximately $[X] to implement but saves $[Y]/year. Payback period: [N] years. If payback > 2 years, I recommend declining this work. See scripts/roi-gate.sh for the full formula." |