Skew Stream — Pinned Activation Test (pre-registered 2026-08-01, panel item B4)
Status: BINDING, append-only after today. This memo closes the open clause
in the options_skew capture registration (CAPTURES.md): "escalate … only if
a residual long-only large-cap signal appears in 12–18 months" named no
test, so the mid-2027 evaluator could have chosen whichever definition
flattered the preferred outcome. The test is pinned now, while the track is
too short to peek at (the placebo-ensemble precedent: pinned at day 22).
Attestation. As of this pin, no skew-vs-return statistic of any kind has
ever been computed on the accrued capture. Basis, recorded 2026-08-01: the
only readers of the skew JSONL in the repo are the capture writer and the
integrity QA (capture-qa) — load_skew() has zero consumers outside
data/options_skew.py; RESEARCH.md and the evaluation ledger contain no
skew-return join; the operator's research log records none. The full accrual
from stream inception (2026-06-09) is therefore legitimately usable as test
data: the test is being named before anyone has seen what it would say.
What the thresholds gate: SPENDING, not truth. Passing authorizes buying retail option-chain history (legitimate since the scarcity retirement, memory/options-skew-feasibility 2026-07-21) to run a proper backtest behind a NEW hash-frozen registration and the full SHIP gate. Passing here ships nothing and proves nothing; failing here proves no absence — it closes this shop's wallet and attention on the question, permanently.
1. The hypothesis and its rebuttal, plainly
Under test: steep put skew — downside insurance (out-of-the-money puts) priced rich relative to at-the-money options, a fingerprint of informed sellers — predicts poor stock returns (Xing–Zhang–Zhao 2010).
The rebuttal: Muravyev–Pearson–Pollet show the predictability is largely a stock-borrow-fee artifact: when a stock is hard to borrow, market makers hedging puts must pay the borrow fee, which mechanically steepens the put skew; the associated "alpha" lives in shorting those names — a leg this long-only book cannot trade. The shop owns data on both sides of the argument (the skew capture; the FINRA days-to-cover and Alpaca shortability captures), so the test must both measure the signal and attribute it.
The original design would have conditioned on the binary hard-to-borrow flag. That flag is degenerate on this universe — 0 of 889 Russell-1000 names were hard-to-borrow at the shortability registration — and a conditioning branch that can never fire would launder "artifact not confirmed" out of a test that could not have confirmed it. It is replaced by graded constraint measures (§5) with an explicit UNDECIDABLE clause.
2. The pinned skew measure (real captured fields; no substitutes)
- Signal = the
skewfield ofdata/options_skew.jsonl, defined at capture asiv_put_25d − iv_atm_call: the implied volatility of the ~25-delta put minus that of the at-the-money call, on the single expiry nearest 30 days out (window 20–45 days), as computed bydata/options_skew.py:compute_skew. Present since stream inception 2026-06-09. Higher = steeper put skew (puts rich); the predicted relation to future returns is therefore negative. - The later
cs_*smile fields (captured since 2026-06-10) are not admissible alternates. No re-derived variant, transform, smoothing, or z-scoring may be substituted at evaluation. Rank statistics (§4) make winsorization moot, so none is applied. - Duplicates: if a (date, symbol) pair appears more than once (heal re-runs append), the last row in file order wins.
- No liquidity filter: every row with a finite
skewenters. The capture's own leg-matching already excludes unquotable names; adding a contract-count floor now would be an extra knob with no pre-stated need.
3. The pinned weekly panel
- Signal dates: within each ISO calendar week (Mon–Sun), the last capture date carrying ≥ 400 valid skew rows (roughly half the ~890-name daily recovery — a partial, mid-crash capture cannot stand in for the cross-section). A week with no qualifying date is skipped (missing, never interpolated).
- Cross-section: all valid rows on the signal date. The capture universe IS the production Russell-1000 run list at capture time — no retroactive membership edits.
- Forward return for signal date s with next signal date s′: adjusted
close(first trading day after s′) ÷ adjusted close(first trading day
after s) − 1, per name. Skipping one day before measuring mirrors the
repo's
.shift(1)no-lookahead convention (the 19:00Z snapshot can land in-market); chaining each window to the next signal date makes consecutive returns non-overlapping by construction. If s′ − s exceeds 10 trading days (a dead-cron stretch), the observation is dropped rather than becoming one giant-horizon week. - Return source: the
closecolumn (Tiingo-adjusted) of the owned frozen storedata/raw/, read at evaluation time — the single resolution point the whole apparatus uses. Vendor re-basing rescales a name's entire past by a constant, so week-over-week return ratios are stable. Names missing the forward close (delisted mid-window) are dropped from that observation — this biases against finding the effect (the crash tail is where steep-skew blowups live); accepted for a screen and stated here so it cannot be discovered later.
4. The three pinned statistics (the whole family — nothing else counts)
S1 — PRIMARY: weekly cross-sectional rank-IC. Per signal date, the
Spearman rank correlation (do names rank the same on both lists?) between
skew and forward return across the cross-section. This is the information
coefficient ("IC"): one number per week saying whether steep-skew names
underperformed that week. Judged statistic: t = mean(IC) ÷ sd(IC, ddof=1) ×
√N over all N weeks from 2026-06-09 through the checkpoint date. Predicted
sign: negative. Chosen as primary for power: ~890 names × ~54 weeks is the
largest sample any owned consumer can produce.
S2 — SECONDARY: the momentum-top-100 de-selection spread — the only sanctioned consumer (a defensive de-selection filter on the momentum sleeve), measured directly. Per signal date:
- Rank the universe by the production momentum composite exactly as
features/indicators.pycomputes it under the momentum sleeve's pinned config (strategy.momentum: lookback 252, skip 5, smoothness_window 21, smoothness_weight 0.5;.shift(1)convention; prices fromdata/raw). Take the top 100. - Among the top 100 with valid skew that week (require ≥ 50, else the week is skipped for S2), the steepest-skew quintile = the ⌈n_valid/5⌉ highest-skew names. Vetoed set = top-50 names in that quintile. Replacement set = the same count of highest-momentum names from ranks 51–100 not themselves in the quintile.
- Spread = equal-weight forward return of the vetoed set − same for the replacement set. Weeks where the veto binds zero names are skipped, and the bind rate is reported (a filter that never binds is vacuous — the same vacuity discipline as the shortability registration).
Judged statistic: t of the mean weekly spread, as in S1. Predicted sign: negative (vetoed names underperform their replacements). Reported with its confidence interval as the economics read; it is not expected to carry power (§7).
S3 — CONDITIONING: days-to-cover decile contrast (the artifact test).
Days-to-cover = short interest ÷ average daily volume — how many days shorts
would need to buy back; a graded how-crowded-is-the-short-side measure, from
the owned FINRA capture (data/short_interest/<settlement>.parquet, column
days_to_cover). Knowledge rule: a partition is usable on signal dates
≥ its settlement_date + 9 business days (published ~T+7; +2 cushion — the
same publication-lag discipline item A4 demands of the engine hook). Per
signal date, deciles (ten equal buckets by rank) of days-to-cover within the
joined cross-section; contrast = IC within the top decile (most constrained)
− IC within deciles 1–5 pooled (unconstrained half). Judged statistic: t of
the mean weekly contrast. Negative = the effect concentrates in
constrained names (supports the borrow-fee-artifact reading); positive =
concentrates in unconstrained names (supports a clean signal).
- Decidability floors: a week counts only if the top decile holds ≥ 30 names with valid skew and return and the pooled half ≥ 150. If fewer than half of otherwise-valid weeks pass, S3 is declared UNDECIDABLE-ON-THIS-UNIVERSE for that checkpoint: the attribution question was not answerable here, and the evaluation may NEVER report it as "artifact not confirmed". The family shrinks to S1/S2; the per-test bar does not loosen.
Attribution companions (outside the family, report-only, same floors):
the margin-requirement tail (data/shortability/, names with
maintenance_margin_requirement > 30 — known n ≈ 4 in-universe at pin time,
so expected UNDECIDABLE, stated now so its silence cannot be spun), and
item B2's option-implied borrow-fee wedge if and only if B2's own
registration has validated it (or graded it usable-as-ranks) by the
checkpoint — if B2 is unbuilt or unvalidated, the branch is simply ABSENT
and its absence carries zero evidential weight.
5. The decision rule (both checkpoints, verbatim)
- Family: exactly S1, S2, S3. Bar: |t| ≥ 2.4.
- Authorization (either checkpoint): S1 or S2 clearing the bar in the predicted (negative) direction, or S3 clearing it in either direction (its sign is the attribution and both signs are informative). A wrong-sign S1/S2 clearing 2.4 does NOT authorize — chasing a flipped sign is the instability trap the feasibility memo warned about; it is recorded as an anomaly, nothing more.
- What authorization means: the operator MAY buy retail chain history (the dollars are Dan's call — panel §6.4); any purchased-history study runs behind a NEW hash-frozen registration and the full SHIP gate. If the authorizing statistic is S3 in the negative (artifact) direction, the purchase memo must state in its first paragraph that it would be testing the constraint channel — redundancy with the free FINRA days-to-cover screen is the live risk.
- Why 2.4: with three looks, per-test p ≈ 0.008 (one-sided, S1/S2) + 0.016 (two-sided, S3) gives a false-authorization rate ≈ 3.3% per checkpoint by union bound — the conventional ~5% family bar, held with room. The two checkpoints share their data (the second contains the first), so the combined rate across both looks stays well under the naive doubling.
- Checkpoints: data through 2027-06-30 (month ~12), evaluated after
that date; data through 2027-12-31 (month 18), evaluated after that
date. Nothing between, nothing before, nothing after — no interim
computation of any of these statistics is permitted (the daily
capture-qaintegrity checks touch no returns and do not count).
6. The kill, verbatim
Below the bar at both checkpoints → the stream demotes to insurance: the capture may keep running (near-zero marginal cost, and the chains/IV consumers under other registrations — B1's term structure, the VRP research class — are unaffected), but the stock-signal escalation door closes permanently. No purchased history, no v2 of this hypothesis on this apparatus, and future proposals may not cite the accrued skew as "untested potential". No relitigation.
7. Power, printed (screen-grade, not SHIP-grade)
Let λ = mean(IC)/sd(IC) per week — the per-week signal-to-noise. Expected t at N weeks is λ√N. Checkpoint 1 has N ≈ 54 usable weeks (55 calendar weeks from inception minus expected misses); checkpoint 2 N ≈ 80.
| λ (per-week IC signal/noise) | E[t] @ ckpt 1 | P(clear 2.4) | E[t] @ ckpt 2 | P(clear 2.4) |
|---|---|---|---|---|
| 0.15 (plausible: large-cap, post-decay) | 1.10 | ~10% | 1.34 | ~15% |
| 0.25 (optimistic: full published all-cap strength) | 1.84 | ~29% | 2.24 | ~44% |
Even at the optimistic effect size the design clears the bar less than half the time by month 18. That asymmetry is deliberate: the bar guards the wallet (few false purchases), so a PASS is strong evidence of signal while a FAIL is weak evidence of absence — and the spending door closes on a FAIL anyway, because this shop budgets attention, not just truth. S2 is a ~20-vs-20-name portfolio difference dominated by idiosyncratic noise: reported for magnitude and bind rate, not expected to carry power. S3's power depends on how the effect splits across deciles; no claim is made.
8. Change discipline
Append-only after today, like the December memo: corrections and context arrive as dated appends below this line, never edits above it. The paired CAPTURES.md amendment (same date, panel B4) supersedes the unnamed-test clause and the "~June-30 / ~Aug" revisit points in the original registration; the original text stays in place, per the registry's append-only convention.
Panel-Item: B4 — merged derivatives-PM + new-alpha-strategist proposal, red-team revisions folded in (single binding primary; degenerate-flag replacement with the UNDECIDABLE clause; spending-not-truth framing; two pinned dates only).