<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Researchbook</title><description>An open research book of systematic investing techniques: every idea preregistered, backtested against real costs, and either killed in public or promoted to live monitoring.</description><link>https://researchbook.dev/</link><language>en</language><item><title>The common-clock replay: make two strategies comparable before you believe their sum</title><link>https://researchbook.dev/writing/the-common-clock-replay/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-common-clock-replay/</guid><description>Two strategies developed separately each carry their own clocks — signal time, fill time, mark time. Combine their equity curves as-is and the portfolio math silently rewards the mismatch: correlation biases low, overlap risk hides, and the book looks better-diversified than it is. The fix is mechanical: freeze both decision streams, rebuild every sleeve at one shared clock against the displayed order book, and only then let the portfolio numbers speak — with the incompleteness, cost surface, and fragility bands published next to them.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><category>methods</category><category>execution</category><category>portfolio</category><category>replay</category></item><item><title>Anti-correlation hedges, doesn&apos;t stack — the pairwise rule&apos;s 5th iteration</title><link>https://researchbook.dev/writing/anti-correlation-hedges-not-stacks/</link><guid isPermaLink="true">https://researchbook.dev/writing/anti-correlation-hedges-not-stacks/</guid><description>PR #802&apos;s vol_weighted_mean_revert composite was predicted to stack — pairwise correlation -0.42, both score-stage, no sign-vs-rank conflict. All four prior iteration conditions satisfied. Instead the composite TIED its better parent on both single-signal and dual-signal data. The mechanism: anti-correlated parents HEDGE each other; the sum captures the average, bounded by the better parent. This is the rule&apos;s 5th iteration: negative correlation predicts hedging, not stacking.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>pairwise</category></item><item><title>Composite strategies can interfere</title><link>https://researchbook.dev/writing/composite-strategies-can-interfere/</link><guid isPermaLink="true">https://researchbook.dev/writing/composite-strategies-can-interfere/</guid><description>Two top-of-leaderboard strategies — three_clock_momentum (highest min-Sharpe) and vol_regime_filter (highest mean) — got composed into one. Expectation: stack. Result: interferes. The composite&apos;s mean sits between the parents, its min goes below both, and the variance contribution from the gate is unchanged. On synthetic data with one signal source, both noise-reducers smooth the same noise; you can&apos;t double-count.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>composition</category></item><item><title>Designing an event-aware strategy: a checklist</title><link>https://researchbook.dev/writing/designing-an-event-aware-strategy/</link><guid isPermaLink="true">https://researchbook.dev/writing/designing-an-event-aware-strategy/</guid><description>A working note that pulls the event-clock research into one recipe. Six steps from &apos;I have an event hypothesis&apos; to &apos;I have a strategy whose cost I can defend.&apos; The four prior notes are the why; this is the how.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>events</category><category>research</category><category>checklist</category></item><item><title>Disconfirmed: the transition-gate fix didn&apos;t recover the regime-filter</title><link>https://researchbook.dev/writing/disconfirmed-the-transition-gate-fix/</link><guid isPermaLink="true">https://researchbook.dev/writing/disconfirmed-the-transition-gate-fix/</guid><description>PR #717 named a candidate fix for vol_regime_filter&apos;s underperformance on clustered-vol data: gate on vol CHANGE instead of vol LEVEL. PR #721 ran the experiment. Result: the transition gate underperforms the level gate on BOTH modes by 0.2 Sharpe. The &apos;gate on change&apos; fix doesn&apos;t recover the regime-filter performance. Both interpretations matter.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>regime</category><category>negative-result</category></item><item><title>Don&apos;t pay for caution you can&apos;t justify</title><link>https://researchbook.dev/writing/dont-pay-for-caution-you-cant-justify/</link><guid isPermaLink="true">https://researchbook.dev/writing/dont-pay-for-caution-you-cant-justify/</guid><description>A risk-reduction gate looks free until you measure what it costs. Most don&apos;t survive the measurement. The ones that do clear two specific bars — and if you can&apos;t say which bar you cleared, you&apos;ve added ceremony, not safety.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>risk</category><category>evaluation</category><category>research</category></item><item><title>Drift vs reversal: the cleanest counterfactual for a post-event regime</title><link>https://researchbook.dev/writing/drift-vs-reversal-as-counterfactual/</link><guid isPermaLink="true">https://researchbook.dev/writing/drift-vs-reversal-as-counterfactual/</guid><description>Running the drift strategy and its sign-flipped twin on the same data, in the same window, with the same lookback — that&apos;s not two strategies. It&apos;s a thermometer. The sign of `drift − reversal` is the answer to &apos;does this event lead to continuation or over-correction?&apos;</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>events</category><category>research</category><category>counterfactual</category></item><item><title>Dual-signal at N=100, all 27 arms — the full picture</title><link>https://researchbook.dev/writing/dual-signal-full-leaderboard-n100/</link><guid isPermaLink="true">https://researchbook.dev/writing/dual-signal-full-leaderboard-n100/</guid><description>PR #790 documented the partial dual-signal result (composite stacks slightly). This is the full 27-arm leaderboard at N=100 with `--fomc-drift-bps 50 --mean-revert-bps 100`. Five findings: ts_momentum still leads; three composites converge again; multi-factor variants are LESS negative on dual-signal; vol_penalty flips negative; the mean_revert diagnostic confirms data shape.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>dual-signal</category><category>leaderboard</category></item><item><title>Dual-signal data makes composites stack</title><link>https://researchbook.dev/writing/dual-signal-makes-composites-stack/</link><guid isPermaLink="true">https://researchbook.dev/writing/dual-signal-makes-composites-stack/</guid><description>Added a second alpha source to the harness data — per-bar mean-reversion independent of the FOMC drift. The composite arm that INTERFERED on single-signal data (PR #664) now STACKS on dual-signal: mean +1.190 above three_clock_momentum (+1.181) and vol_regime_filter (+1.125). Confirms PR #666&apos;s hypothesis: &apos;interferes&apos; was a property of the synthetic having one alpha source, not of the strategies themselves.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>composition</category></item><item><title>Dual-signal at N=100: the composite stacks (slightly)</title><link>https://researchbook.dev/writing/dual-signal-n100-composites-stack/</link><guid isPermaLink="true">https://researchbook.dev/writing/dual-signal-n100-composites-stack/</guid><description>PR #777&apos;s pairwise-rule final-form note ended with: 5/5 direction predictions correct, 0/5 magnitude — no composite cleanly stacked at N=100 on single-signal data. The hypothesis: synthetic only has one alpha source. Re-ran the harness at N=100 with `--mean-revert-bps 100` (dual-signal mode). Result: `three_clock_vol_weighted` is now ABOVE both parents (+0.584 vs +0.573 + +0.515). The stack is small but directional. Confirms the dual-signal hypothesis.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>dual-signal</category></item><item><title>An event-aware wrapper needs signal concentration, not just signal presence</title><link>https://researchbook.dev/writing/event-aware-needs-signal-concentration/</link><guid isPermaLink="true">https://researchbook.dev/writing/event-aware-needs-signal-concentration/</guid><description>Adding a directional component to a synthetic FOMC shock made the baseline momentum strategy capture the alpha. The event-aware drift wrapper didn&apos;t help. The reason is geometry — if the signal extends over multiple days, a 4-hour capture window is the wrong shape.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>events</category><category>research</category><category>evaluation</category></item><item><title>Event gates cost Sharpe when the event has edge</title><link>https://researchbook.dev/writing/event-gates-cost-when-the-event-has-edge/</link><guid isPermaLink="true">https://researchbook.dev/writing/event-gates-cost-when-the-event-has-edge/</guid><description>Ran the 15-arm FOMC compare at a config where the synthetic has +50 bps drift baked into event days. Long-only wins (Sharpe 1.88), baseline trails at 1.24, the blackout and damping arms lose -0.11 and -0.14 Sharpe to baseline, the drift arm crashes to 0.64. The gates aren&apos;t broken — they&apos;re throwing away the exact exposure the synthetic data rewards.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>events</category><category>evaluation</category></item><item><title>Fifty seeds, twenty-four arms — the full leaderboard</title><link>https://researchbook.dev/writing/fifty-seeds-full-leaderboard/</link><guid isPermaLink="true">https://researchbook.dev/writing/fifty-seeds-full-leaderboard/</guid><description>The 50-seed run gave us full per-arm stats across all 24 harness arms. Three surprises: ts_momentum is the leader by mean (+0.910), not baseline (+0.767). The four-factor and three-factor variants are all NEGATIVE. The portfolio_vol_gate is mid-pack on mean — its true value is the smaller stdev, not the higher mean. This note is the full ranking and what each one teaches.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>leaderboard</category></item><item><title>Fifty seeds reveal the tie</title><link>https://researchbook.dev/writing/fifty-seeds-reveal-the-tie/</link><guid isPermaLink="true">https://researchbook.dev/writing/fifty-seeds-reveal-the-tie/</guid><description>At N=10, three_clock_vol_weighted beat baseline by +0.10 Sharpe — directionally encouraging but within the stdev (1.22). At N=50, the composite ties baseline at +0.765 — within rounding of baseline&apos;s +0.767. The directional signal didn&apos;t survive the higher seed count, exactly as the session-summary v2 note&apos;s caveat predicted.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>composition</category></item><item><title>Higher moments add noise faster than signal</title><link>https://researchbook.dev/writing/higher-moments-add-noise-faster-than-signal/</link><guid isPermaLink="true">https://researchbook.dev/writing/higher-moments-add-noise-faster-than-signal/</guid><description>Under the Gaussian approximation used here, the Nth moment has finite-sample standard error roughly proportional to √(N!/n). Adding a kurtosis term to a momentum + reversion + skew score buys (in theory) more explanatory power; in practice it buys mostly more variance. The strategy catalog&apos;s `kurtosis_weight = −0.5` default is the empirical compensation.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>moments</category><category>research</category><category>evaluation</category></item><item><title>How to use the comparison harness</title><link>https://researchbook.dev/writing/how-to-use-the-comparison-harness/</link><guid isPermaLink="true">https://researchbook.dev/writing/how-to-use-the-comparison-harness/</guid><description>The 19-arm comparison harness has grown through this session into a full toolchain — 19 strategies, two synthetic signal modes, five CLI flags, one analysis script. This note is the operator&apos;s how-to: a step-by-step workflow for asking &apos;does this new strategy work?&apos; and reading the answer.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>harness</category><category>research</category><category>workflow</category></item><item><title>One hundred seeds confirms and converges</title><link>https://researchbook.dev/writing/hundred-seeds-confirms-and-converges/</link><guid isPermaLink="true">https://researchbook.dev/writing/hundred-seeds-confirms-and-converges/</guid><description>Re-ran the harness at N=100 to refine the 50-seed leaderboard. ts_momentum&apos;s lead over baseline holds (+0.132, 82% hit rate). The three three_clock variants converge to exactly +0.798 — what looked like distinct arms at N=10 are statistically identical at N=100. baseline and spread_filter are also indistinguishable. Two findings: ts_momentum is robust; many arms are duplicates.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>leaderboard</category></item><item><title>The intervention-point rule, confirmed by a fourth experiment</title><link>https://researchbook.dev/writing/intervention-point-rule-confirmed/</link><guid isPermaLink="true">https://researchbook.dev/writing/intervention-point-rule-confirmed/</guid><description>Three per-symbol vol interventions failed. PR #731&apos;s discipline rule said: move to a different intervention point. PR #732 shipped the cross-symbol portfolio-scale gate. Result: it recovers 75-80% of the Sharpe gap to baseline that the per-symbol variants sacrificed. Same alpha source, same data, different intervention point — the rule held.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>vol</category><category>intervention</category></item><item><title>Long-only buys asymmetric exposure, not just lower Sharpe</title><link>https://researchbook.dev/writing/long-only-buys-asymmetric-exposure/</link><guid isPermaLink="true">https://researchbook.dev/writing/long-only-buys-asymmetric-exposure/</guid><description>Added a long-only momentum arm to the 14-arm harness. Mean Sharpe was −0.196 vs the long-short baseline. The interesting number wasn&apos;t the mean — it was the stdev: 1.487 across 5 seeds, more than double baseline&apos;s 0.581. Long-only doesn&apos;t just give up the short leg&apos;s contribution. It gives up the dollar-neutral diversification that flattens per-seed dispersion.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>design</category></item><item><title>Pairwise correlation predicts composition before you run it</title><link>https://researchbook.dev/writing/pairwise-correlation-predicts-composition/</link><guid isPermaLink="true">https://researchbook.dev/writing/pairwise-correlation-predicts-composition/</guid><description>Closes the loop on the session-summary note&apos;s `pairwise correlation across the 19 arms` follow-up. The matrix shows ts_momentum and three_clock_momentum at +0.34 correlation across 10 seeds — different signals — and three_clock_momentum and blackout at +0.93 — same signal in different framings. The empirical correlation tells you whether composing two arms will stack OR interfere, before you&apos;ve built the composite arm.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>harness</category></item><item><title>Perfect correlation explains the interference</title><link>https://researchbook.dev/writing/perfect-correlation-explains-the-interference/</link><guid isPermaLink="true">https://researchbook.dev/writing/perfect-correlation-explains-the-interference/</guid><description>The composite `three_clock_portfolio_vol` underperformed both parents in PR #740. The pairwise correlation analysis (10 seeds) shows why: three_clock_momentum and three_clock_portfolio_vol correlate at exactly +1.00 across seeds. The composite IS the parent — a vol-gate added on top of a momentum signal that&apos;s already vol-gated doesn&apos;t catch anything new.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>correlation</category><category>research</category></item><item><title>Property tests catch cross-strategy bugs that per-strategy tests miss</title><link>https://researchbook.dev/writing/property-tests-catch-cross-strategy-bugs/</link><guid isPermaLink="true">https://researchbook.dev/writing/property-tests-catch-cross-strategy-bugs/</guid><description>Three event-aware strategies, each with its own cold-inner test, each shipped under code-review. Two had the citation contract right. One didn&apos;t. The bug surfaced only when a single property-based test parametrised over all three at once. Per-strategy tests are necessary but not sufficient — the contract has to be expressed at the family level.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>testing</category><category>research</category><category>contracts</category></item><item><title>Redundant vs multiplicative composition — what +0.70 means</title><link>https://researchbook.dev/writing/redundant-vs-multiplicative-composition/</link><guid isPermaLink="true">https://researchbook.dev/writing/redundant-vs-multiplicative-composition/</guid><description>Two composites at the same +0.70 pairwise correlation produced opposite outcomes. mom_ma_composite (same quantity at different smoothings) stacked above baseline. vw_tc_composite (different quantities at the same granularity) interfered below both parents. The 6th iteration of the pairwise rule codifies the distinction. This note documents the side-by-side experiment that the rule rests on.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>pairwise</category></item><item><title>Sharpe is scale-invariant. Stop trying to make it not.</title><link>https://researchbook.dev/writing/sharpe-is-scale-invariant/</link><guid isPermaLink="true">https://researchbook.dev/writing/sharpe-is-scale-invariant/</guid><description>Added an `equal_risk_long_only` arm to the harness — same strategy, gross_leverage scaled to 0.71. Sharpe was identical to the 1.0×-gross arm. Dollar PnL and dollar drawdown scaled 0.71×. The arm earned its place by making the invariant visible: gross-leverage rescaling moves dollars, not ratios.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>sharpe</category><category>research</category><category>measurement</category></item><item><title>The sign-vs-rank composition conflict</title><link>https://researchbook.dev/writing/sign-vs-rank-composition-conflict/</link><guid isPermaLink="true">https://researchbook.dev/writing/sign-vs-rank-composition-conflict/</guid><description>PR #768&apos;s ts_filtered composite was predicted to stack (low pairwise correlation, different mechanisms). Instead it interferes — composite +0.527 vs leader ts_momentum&apos;s +0.995. The mechanism: ts_momentum&apos;s edge is sign-based (trade each active symbol in its momentum direction); cross-sectional ranking&apos;s edge is rank-based (short the lower-ranked even if positive). Composing them OPPOSES the parents&apos; edges, not aligns them. This is a third refinement to the pairwise rule.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>pairwise</category></item><item><title>Six regression tests pin the findings</title><link>https://researchbook.dev/writing/six-regression-tests-pin-the-findings/</link><guid isPermaLink="true">https://researchbook.dev/writing/six-regression-tests-pin-the-findings/</guid><description>The session&apos;s 100+ PRs produced 12+ discipline rules and 60+ research notes. Six of those findings now have CI-enforced regression tests pinning their empirical predictions against future drift. This note documents what each test catches and why the tests-vs-research-notes ratio matters.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>testing</category><category>discipline</category><category>regression</category></item><item><title>Strategy shape beats factor count: TSMom &gt; 4-factor on the same data</title><link>https://researchbook.dev/writing/strategy-shape-beats-factor-count/</link><guid isPermaLink="true">https://researchbook.dev/writing/strategy-shape-beats-factor-count/</guid><description>The 11-arm harness has a four-factor strategy that combines momentum + reversion + skew + kurtosis. It also has a one-factor strategy that just adds a 2% threshold on absolute return. The threshold-gated one-factor wins on mean AND on min Sharpe across seeds. The threshold matters more than three extra factors.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>design</category></item><item><title>Synthetic data shows what you were solving for</title><link>https://researchbook.dev/writing/synthetic-data-shows-what-you-were-solving-for/</link><guid isPermaLink="true">https://researchbook.dev/writing/synthetic-data-shows-what-you-were-solving-for/</guid><description>Shipped a chop-filter strategy designed to gate cross-sectional momentum during noise periods. Ran it on the synthetic harness. Got numbers identical to baseline — the threshold never gated because the synthetic data has no chop. That&apos;s not a failure of the strategy. It&apos;s a feature of synthetic data: when a wrapper has no effect, you&apos;ve learned which problem the wrapper solves and which problem your data has.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>synthetic</category><category>research</category><category>evaluation</category></item><item><title>The baseline arm you forgot to include</title><link>https://researchbook.dev/writing/the-baseline-arm-you-forgot/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-baseline-arm-you-forgot/</guid><description>An A/B with two arms tells you whether your gate moves the number. A run with the gate&apos;s inverse as a third arm tells you whether the input data has anything for the gate to defend against. Most A/Bs are missing the third arm and don&apos;t know it.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>evaluation</category><category>research</category><category>events</category></item><item><title>The clustered-vol finding was also small-N — another tie at higher N</title><link>https://researchbook.dev/writing/the-clustered-vol-finding-was-also-small-n/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-clustered-vol-finding-was-also-small-n/</guid><description>PR #717 claimed vol_regime_filter underperforms baseline by 1.3 Sharpe on clustered-vol data. At N=3 seeds that was right. At N=30 seeds with seeds 1-30, the gap collapses to +0.001 — within noise. The vol-regime-filter doesn&apos;t break on clustered vol the way the PR #717 note claimed; the original finding was N=3 luck. Add another instance to the pattern: directional claims at N less than 20 don&apos;t survive higher seed counts.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>regime</category><category>small-n</category></item><item><title>The event clock isn&apos;t the panel clock</title><link>https://researchbook.dev/writing/the-event-clock-isnt-the-panel-clock/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-event-clock-isnt-the-panel-clock/</guid><description>A research platform calibrated for day bars and minute bars handles event-driven trades awkwardly. Adding event-clock research doesn&apos;t need a new runtime — it needs one new column on the feature DAG and one new rule in the risk gate.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>platform</category><category>events</category></item><item><title>The first robust single-signal stack</title><link>https://researchbook.dev/writing/the-first-robust-single-signal-stack/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-first-robust-single-signal-stack/</guid><description>PR #815&apos;s mom_ma_composite (baseline raw return + MA-crossover) stacks above baseline by +0.071 Sharpe at N=100 single-signal. This is the first composite this session to stack ROBUSTLY at high seed count on single-signal data — earlier &apos;first stack&apos; claims (PR #746) collapsed at N=50. The mechanism: same underlying momentum signal at two different smoothing scales, additive in the +0.70 &apos;marginal&apos; band of ADR-0062&apos;s rule.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>stack</category></item><item><title>The full pairwise matrix — 28 arms at N=100</title><link>https://researchbook.dev/writing/the-full-pairwise-matrix/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-full-pairwise-matrix/</guid><description>The pairwise rule has been the session&apos;s most-iterated discipline. This is the full correlation matrix across all 28 arms at N=100 single-signal — the empirical surface the rule operates on. Surfaces six observations: complete dormancy clusters, sign-flipped diagnostics, the lowest-correlation pair, and three composite candidates the matrix predicts.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>pairwise</category><category>harness</category><category>matrix</category></item><item><title>The pairwise rule — final form (four iterations later)</title><link>https://researchbook.dev/writing/the-pairwise-rule-final-form/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-pairwise-rule-final-form/</guid><description>The pairwise-correlation discipline rule started simple (PR #710: low correlation predicts stack) and iterated four times across the session as composites were built and measured. This is the consolidated final form: four conditions all required for composite stacking. Includes the pre-build pre-test checklist, the decision tree for when each iteration of the rule applies, and the load-bearing failure modes.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>discipline</category></item><item><title>The pairwise rule predicted this one</title><link>https://researchbook.dev/writing/the-pairwise-rule-predicted-this-one/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-pairwise-rule-predicted-this-one/</guid><description>Picked the most-decorrelated top-arm pair (+0.71 correlation), composed them at the score stage, and shipped the result. The composite beat both parents AND baseline — the first composite-arm result this session to do all three. The empirical confirmation closes the loop the matrix opened: low pairwise correlation predicts composite stacking.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>composition</category><category>research</category><category>harness</category></item><item><title>The single-seed lead was a fluke</title><link>https://researchbook.dev/writing/the-single-seed-lead-was-a-fluke/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-single-seed-lead-was-a-fluke/</guid><description>PR-shipping the single-seed FOMC compare result said long_only was the leader at Sharpe 1.88. Re-running 5 seeds at the same config: long_only&apos;s mean Sharpe is 0.81 — below the 1.00 baseline — with stdev 1.49 and a range of −0.93 to 2.45. ts_momentum is the actual consistent leader at mean 1.27 across the sweep. The note&apos;s previous reading was the result you get when the noise lines up.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>evaluation</category><category>methodology</category></item><item><title>The strategy catalog — twenty-nine panel/event shapes, one ranking helper</title><link>https://researchbook.dev/writing/the-strategy-catalog/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-strategy-catalog/</guid><description>As of May 2026, alphakernel shipped twenty-nine registered live-trading strategies. Twenty-eight of them shared a single 17-line ranking helper, then differed only in their score function. The catalog is the working surface of the platform — what an operator can point a runner at, what an A/B harness can measure, what citation graphs read.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>catalog</category><category>strategies</category><category>platform</category></item><item><title>Three-clock momentum tops the harness</title><link>https://researchbook.dev/writing/three-clock-momentum-tops-the-harness/</link><guid isPermaLink="true">https://researchbook.dev/writing/three-clock-momentum-tops-the-harness/</guid><description>Of the 16 arms now in the comparison harness, the best mean Sharpe across 5 seeds (+1.429) came from XsThreeClockMomentumStrategy — a linear combination of 5-, 20-, and 60-bar momentum with default weights (-0.5, +1.0, +0.5). That beats single-window momentum (+1.001) by 0.43 Sharpe and single-window TSMom (+1.269) by 0.16. The result is consistent with the literature: composite-horizon momentum extracts more information than any single window cut.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>momentum</category></item><item><title>Three vol-intervention experiments, zero wins on this synthetic</title><link>https://researchbook.dev/writing/three-vol-experiments-zero-wins/</link><guid isPermaLink="true">https://researchbook.dev/writing/three-vol-experiments-zero-wins/</guid><description>Across three different shapes — level filter, transition filter, score-stage continuous penalty — no per-symbol vol intervention beats baseline cross-sectional momentum on the harness. The score-stage penalty was the best of the three on clustered-vol data, but still below baseline. The meta-finding: cross-sectional momentum is robust enough that per-symbol vol interventions consistently cost Sharpe regardless of shape.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>vol</category><category>negative-result</category></item><item><title>Vol-clustering breaks the regime filter — but not for the obvious reason</title><link>https://researchbook.dev/writing/vol-cluster-breaks-the-regime-filter/</link><guid isPermaLink="true">https://researchbook.dev/writing/vol-cluster-breaks-the-regime-filter/</guid><description>vol_regime_filter was designed for vol-regime detection. Add vol clustering to the synthetic — the regime structure it&apos;s allegedly designed to detect — and its Sharpe drops by 1.3 below baseline. The reason isn&apos;t that the gate fails to fire; the gate fires CONSTANTLY. When vol clusters, the vol_5/vol_60 ratio is structurally elevated most of the time, so the gate drops most of the universe most of the time, leaving 2-3 names rotating through the ranking on a cluster-driven schedule that has nothing to do with momentum.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>vol</category><category>regime</category><category>research</category></item><item><title>Vol-of-vol distinguishes regime from level</title><link>https://researchbook.dev/writing/vol-of-vol-distinguishes-regime-from-level/</link><guid isPermaLink="true">https://researchbook.dev/writing/vol-of-vol-distinguishes-regime-from-level/</guid><description>Two symbols sitting at 1% daily vol look identical to vol_20. One has been at 1% for sixty bars. The other just arrived at 1% from a 0.3% regime, with thirty bars of transition. Vol-of-vol — the 20-bar std of vol_20 — is what tells them apart, and it changes how a sizing rule should treat them.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>volatility</category><category>feature</category><category>research</category></item><item><title>Vol ratio as cross-symbol regime gate</title><link>https://researchbook.dev/writing/vol-ratio-as-cross-symbol-regime-gate/</link><guid isPermaLink="true">https://researchbook.dev/writing/vol-ratio-as-cross-symbol-regime-gate/</guid><description>Realised vol is a level. Vol-of-vol is its second derivative. The vol_5/vol_60 ratio is neither — it&apos;s a dimensionless regime classifier that works the same across a 1%-daily ETF and a 5%-daily small-cap. Why scale-invariance matters when classifying regime across heterogeneous universes.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>volatility</category><category>feature</category><category>regime</category></item><item><title>Vol-regime filter wins on mean, pays in variance</title><link>https://researchbook.dev/writing/vol-regime-filter-mean-vs-variance/</link><guid isPermaLink="true">https://researchbook.dev/writing/vol-regime-filter-mean-vs-variance/</guid><description>The vol-regime gate dropped the harness&apos;s top spot from three_clock_momentum (+1.429) to vol_regime_filter (+1.493) — a 4.5% mean Sharpe improvement at the cost of doubling the per-seed dispersion (0.672 → 1.383). When a gate concentrates exposure on a survivors-only universe, the mean might tick up but the worst case gets meaningfully worse.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>strategy</category><category>research</category><category>regime</category></item><item><title>What 19 arms told us about strategy composition</title><link>https://researchbook.dev/writing/what-19-arms-told-us/</link><guid isPermaLink="true">https://researchbook.dev/writing/what-19-arms-told-us/</guid><description>A session of incremental work grew the harness from 6 to 19 arms across two synthetic signal modes. The findings cluster into four claims about composition, regime gates, and what synthetic harnesses can and can&apos;t measure. This note is the index.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>summary</category><category>research</category><category>harness</category></item><item><title>What 24 arms told us — the session&apos;s research log</title><link>https://researchbook.dev/writing/what-24-arms-told-us/</link><guid isPermaLink="true">https://researchbook.dev/writing/what-24-arms-told-us/</guid><description>Five more arms shipped after the original `what-19-arms-told-us` summary. The new findings cluster into four additional claims about intervention points, composition stages, and pairwise correlation as a pre-test. This note supersedes the 19-arm summary as the top-of-stack index.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>summary</category><category>research</category><category>harness</category></item><item><title>What 27 arms told us — session research log v3</title><link>https://researchbook.dev/writing/what-27-arms-told-us/</link><guid isPermaLink="true">https://researchbook.dev/writing/what-27-arms-told-us/</guid><description>The v2 summary at 24 arms / 8 claims is now stale. The v3 covers 27 arms / 11 claims, including the small-N discipline corpus (two findings disconfirmed at higher N), the pairwise rule&apos;s four iterations and final form, and the dual-signal stacking confirmation. This note replaces v2 as the top-of-stack index for the session&apos;s research arc.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>summary</category><category>research</category><category>harness</category></item><item><title>What 29 arms told us — session research log v4</title><link>https://researchbook.dev/writing/what-29-arms-told-us/</link><guid isPermaLink="true">https://researchbook.dev/writing/what-29-arms-told-us/</guid><description>The v3 summary at 27 arms / 11 claims is now stale. The v4 covers 29 arms / 25 strategies (now 27) / 12 claims, including the pairwise rule&apos;s 5th iteration (anti-correlation hedges, doesn&apos;t stack), ADR-0062 codifying the rule, and four CI-enforced regression tests pinning load-bearing findings. This note replaces v3.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>summary</category><category>research</category><category>harness</category></item><item><title>Why ts_momentum leads at N=100</title><link>https://researchbook.dev/writing/why-ts-momentum-leads-at-n100/</link><guid isPermaLink="true">https://researchbook.dev/writing/why-ts-momentum-leads-at-n100/</guid><description>At N=100 seeds, ts_momentum (+0.995) beats baseline (+0.863) by +0.132 Sharpe. Hit rate 82% vs baseline&apos;s 79%. Not a small margin — 1.2 standard errors above baseline. The mechanism: ts_momentum&apos;s |return| &gt; threshold entry rule closes time-series chop that cross-sectional ranking can&apos;t filter. Deepens PR #557&apos;s &apos;strategy shape beats factor count&apos; rule into a sharper claim about the entry-rule axis.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>research</category><category>harness</category><category>ts-momentum</category></item><item><title>AI research agents as platform citizens</title><link>https://researchbook.dev/writing/ai-agents-as-platform-citizens/</link><guid isPermaLink="true">https://researchbook.dev/writing/ai-agents-as-platform-citizens/</guid><description>The platform decisions that turn a hallucinating LLM into something a research firm can safely point at a backtest engine. None of them are about the model.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>platform</category><category>agents</category></item><item><title>Audit isn&apos;t a feature you turn on</title><link>https://researchbook.dev/writing/audit-isnt-a-feature/</link><guid isPermaLink="true">https://researchbook.dev/writing/audit-isnt-a-feature/</guid><description>The moment compliance asks where a trade came from, you find out whether your platform was designed around audit or had it bolted on. The difference is small, structural, and decided years before the conversation.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>platform</category><category>design</category><category>audit</category></item><item><title>Refusal as planning hint</title><link>https://researchbook.dev/writing/refusal-as-planning-hint/</link><guid isPermaLink="true">https://researchbook.dev/writing/refusal-as-planning-hint/</guid><description>A 500 tells an agent something went wrong. A typed refusal tells it what to do next. The cost of getting this right is a vocabulary; the payoff is an agent that doesn&apos;t bluff.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>platform</category><category>agents</category></item><item><title>Search isn&apos;t research</title><link>https://researchbook.dev/writing/search-isnt-research/</link><guid isPermaLink="true">https://researchbook.dev/writing/search-isnt-research/</guid><description>Most discovery systems quietly become unbounded search loops the platform can&apos;t cost. The trick is to let the operator name the bound, not the algorithm — and to refuse runs whose spec exceeds it.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>platform</category><category>research</category><category>discovery</category></item><item><title>The citation graph as substrate</title><link>https://researchbook.dev/writing/the-citation-graph-as-substrate/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-citation-graph-as-substrate/</guid><description>Once every decision is a row that names what it cites, four otherwise-separate features become one shape — and the platform you can build on top of that shape is meaningfully different from one you can&apos;t.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>platform</category><category>design</category><category>citation</category></item><item><title>Right-sizing the research data platform: five thresholds, in order</title><link>https://researchbook.dev/writing/right-sizing-the-research-data-platform/</link><guid isPermaLink="true">https://researchbook.dev/writing/right-sizing-the-research-data-platform/</guid><description>Most platform debates skip the right question. It isn&apos;t &apos;what&apos;s best practice?&apos; — it&apos;s &apos;which threshold have we crossed today?&apos; Build the smallest architecture that covers the answer; upgrade exactly when the next threshold lands.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><category>platform</category><category>judgment</category><category>research</category></item><item><title>The promotion gate: why bad data should be unreachable</title><link>https://researchbook.dev/writing/the-promotion-gate/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-promotion-gate/</guid><description>Validation that runs as a dashboard tells you what went wrong after the model trained. Validation that runs as a gate makes it structurally impossible for a strategy to read what the platform hasn&apos;t vouched for. The difference shows up in PnL.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><category>platform</category><category>validation</category><category>research</category></item><item><title>The deploy contract isn&apos;t a YAML file</title><link>https://researchbook.dev/writing/the-deploy-contract-isnt-a-yaml-file/</link><guid isPermaLink="true">https://researchbook.dev/writing/the-deploy-contract-isnt-a-yaml-file/</guid><description>The most important artifact a research engineer ships is also the one that doesn&apos;t look like code. It looks like the conversation that happened the week before.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>platform</category><category>process</category><category>research</category></item><item><title>Walk-forward without leakage: a checklist that&apos;s saved me</title><link>https://researchbook.dev/writing/walk-forward-without-leakage/</link><guid isPermaLink="true">https://researchbook.dev/writing/walk-forward-without-leakage/</guid><description>Most leakage bugs don&apos;t look like leakage. They look like a model that&apos;s just good. Here&apos;s the small set of checks I run before I&apos;ll trust any backtest number.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><category>evaluation</category><category>ml</category><category>research</category></item><item><title>MLOps for quant research isn&apos;t MLOps for ML</title><link>https://researchbook.dev/writing/mlops-for-quant-research/</link><guid isPermaLink="true">https://researchbook.dev/writing/mlops-for-quant-research/</guid><description>Web-MLOps wants to retrain on yesterday&apos;s data and ship to A/B. Quant-MLOps wants to defend bit-exact reproducibility of a model that traded a year ago. Same vocabulary, different platform.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>mlops</category><category>platform</category><category>research</category></item><item><title>Observability for alpha pipelines: three dashboards, one rule</title><link>https://researchbook.dev/writing/observability-for-alpha-pipelines/</link><guid isPermaLink="true">https://researchbook.dev/writing/observability-for-alpha-pipelines/</guid><description>If a model can be in production, you should be able to answer three questions about it without writing a query. Each question gets its own dashboard, and they don&apos;t share an owner.</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate><category>observability</category><category>mlops</category><category>platform</category></item></channel></rss>