Judge whether a market FAILED to react to news favorable to a crowded speculative position — step 2 of Jason Shapiro's COT contrarian process. Consumes a cot-contrarian-detector report (or an explicit direction) plus a Claude-curated events JSON, fetches the underlying price series with a documented fallback chain, and produces a fail-closed CONFIRMED / NOT_CONFIRMED / INSUFFICIENT_EVIDENCE verdict using a statistically validated drift-significance test (not a naive failure-ratio, which false-confirms on pure noise). Generic beyond COT — reusable for PEAD and macro-crowding news-failure checks. Use when the user asks to check news-failure confirmation, whether a crowded market "shrugged off" good/bad news, or wants to run Shapiro step 2 on a CROWDED_LONG/CROWDED_SHORT market.
75
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Implements step 2 of Jason Shapiro's COT contrarian process: once a market
is flagged as crowded (cot-contrarian-detector, step 1), check whether it
FAILED to react to news that should have rewarded the crowd. A crowded-long
market that doesn't rally on genuinely bullish news, or a crowded-short
market that doesn't sell off on genuinely bearish news, is the core
behavioral tell that the crowd has run out of buying/selling power — this
is the confirmation step that turns "crowded" into a contrarian setup
candidate (steps 3-5, still manual: price-action confirmation, entry, exit).
Why this isn't a naive failure-ratio check: an earlier design flagged
"news failure" whenever fewer than half the relevant events "responded" —
but under pure noise, roughly 69% of individual events fail to respond by
chance, so that rule would CONFIRM on random noise 48-83% of the time
depending on sample size. This skill instead requires the market to have
moved significantly against the crowd's favorable news (a drift-
significance test with a Monte-Carlo-verified null false-positive bound),
never merely "didn't respond enough." See
references/news-failure-patterns.md for the full statistical rationale.
English:
cot-contrarian-detector flags a market CROWDED_LONG / CROWDED_SHORT
and the user wants to move to step 2Japanese:
Do NOT use when:
--direction overrideFMP_API_KEY or pass --api-key. Used
for price data only (stable/historical-price-eod/light) — coverage
varies by symbol; see references/price-source-map.md.requests installed.cot-contrarian-detector JSON report (--detector-json)
to auto-resolve symbol + direction, or supply --direction explicitly.From a cot-contrarian-detector report (--detector-json, symbol looked
up in markets[]) or directly from the user (--symbol + --direction).
A NEUTRAL classification, a symbol missing from the report, or a report
older than --max-detector-age-days (default 10) all refuse fail-closed
with a specific reason — only an explicit --direction overrides.
Search news in the evaluation window (--window-days, default 10) using
the 4-tier source hierarchy (issuer/primary → SEC/official stats → wire →
portal — see references/news-failure-patterns.md). Write findings into
an events JSON from references/news-failure-patterns.md's template —
event, event_time (ISO8601 with explicit UTC offset), source_url,
source_tier, expected_impact (BULLISH/BEARISH) per event.
Never fabricate events or URLs. WebSearch unavailable → state it
explicitly; proceed without an events JSON only if the user accepts an
INSUFFICIENT_EVIDENCE result (reason no_events_provided) — the CLI
never raises an exception for a missing events file, it always exits 0
with a documented reason.
python3 skills/news-reaction-failure-analyzer/scripts/analyze_news_reaction.py \
--symbol B6 --detector-json reports/cot_crowding_2026-07-12.json \
--events-json reports/nrf_events_B6_2026-07-12.json \
--output-dir reports/The script fetches the price series (documented fallback chain — futures
symbol first, ETF proxy if 402/restricted or rows == 0; see
references/price-source-map.md), computes effective dates / returns /
z-scores per event, clusters events whose 3-trading-day windows overlap
(independence guard), and synthesizes the verdict.
Present the verdict, aggregate stats (drift_stat, responded_ratio), and
the evidence table (per-event returns/z-scores/reaction labels, with any
dropped_events reasons shown — never silently hidden). If a proxy
(run_context.proxy_used) was used, note the tracking-error caveat.
Emit a handoff block for contrarian-setup-gate (#241, not yet built):
{"news_failure": {"verdict": "CONFIRMED", "confidence": "HIGH", "report_path": "reports/nrf_B6_2026-07-12.json"}}reports/nrf_<symbol>_<as-of-date>.json — schema_version,
symbol, direction, expected_direction, actual_reaction
(FAILED_TO_RALLY/FAILED_TO_SELL_OFF/RALLIED/SOLD_OFF/
MIXED_REACTION/NO_DATA), verdict, confidence,
relevant_events_used, aggregate (mean_z3/drift_stat/responded_ratio),
evidence[], dropped_events[], run_context.reports/nrf_<symbol>_<as-of-date>.md — human-readable
verdict, aggregate stats, evidence table, dropped-events table, proxy
caveat (if used), and methodology footnote.--min-events (default 3) usable relevant event clusters, a missing
detector report, or a detector vintage (data_date) that's missing,
unparsable, dated after --as-of, or older than
--max-detector-age-days (stale), a NEUTRAL classification without an
explicit override, or no working price source all produce this verdict
— never a crash, never a forced call on inadequate data.cot-contrarian-detector); news-failure evidence should be read in
that context, not as same-day confirmation.expected_impact
matches the crowd's expected_direction count).run_context.proxy_used), the report says so — tracking error, expense
drag, and roll-timing differences make the reaction-direction read
approximate, not exact.references/news-failure-patterns.md for the full numbers. Users who
want the stricter <10% margin even under that stress can pass
--drift-z 1.75 (at the cost of missing some genuine news-failure
signals, not just noise).references/news-failure-patterns.mdFull methodology: what qualifies as a relevant event, the 4-tier source hierarchy, worked examples, the events-JSON curation guide + template, and the verdict-threshold rationale (why drift-significance, not a naive ratio; the Monte-Carlo-verified null bounds).
references/price-source-map.mdPer-market price-source fallback chain, verified/402/0-rows status (live-
probed at implementation time), ETF-proxy caveats, and markets with no
viable source (documented no_price_source cases: VX, ZQ, HO, all agri on
this key).
references/news-failure-patterns.mdreferences/price-source-map.md62a1635
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.