BL-IS-017: The Strategy Source Publication Schedule
BIJECTIVE LABS
BL-IS-017: The Strategy Source Publication Schedule
Status: RELEASED
Classification: PUBLIC
Revision: 11
Date: 2026-09-11
1. Why this document exists
BL-FM-004 section 4 commits to publishing every closed family in full,
and it gives the reason: publishing the source alongside a verdict is what
makes the verdict checkable rather than asserted. BL-TR-001 section 5 makes
the same commitment from the other direction, calling a closed strategy's
source the thing a reader with a different envelope re-runs.
Those commitments were not kept all at once. Volume V shipped the measurement instruments first, and forty-three dossiers carried a sentence saying their strategy source was scheduled for publication here. A sentence like that is a promise with no due date and nothing to audit it against, which over time is indistinguishable from a sentence that will never come true.
This document is the audit surface. It names what is published, what is not yet, and in what order the rest arrives. A release gate reads it and fails if a dossier promises publication without appearing here, or if this document names a module that does not exist on disk.
The record should be checkable against itself on its own unfinished business, not only on its findings.
2. Publication order, and why it runs this way
Three tiers, ordered by what an outside reader can do with each.
Tier 1, the envelope-bound families. These are the thirteen rows a reader
operating different parameters is told to re-test. BL-FM-004 section 3 names
that as the intended use of this record and the Kill Ledger is structured to
support it. Without the source, that instruction cannot be carried out, so
these came first.
Tier 2, the universally falsified families. The mechanism died on its own merits and the result carries to anyone. The source is worth less as a tool here and more as evidence: it is what shows the kill was reached honestly. The cointegration family is the one to read first, because its source contains the look-ahead defect that produced a false positive before the walk-forward harness caught it.
Tier 3, the maker engine. Complete, wired, disabled by configuration, and closed on economics rather than on technique. It is the largest single body of strategy code in the archive and the one most sensitive to a reader's fee tier.
3. Tier 1, published
Thirteen envelope-bound dossiers, plus two more whose implementations are dependencies of them and are therefore published in the same pass.
3.1 Rust decision cores
Built as their own crate under 05_INSTRUMENTS/strategies/rust/, with no
external dependencies. A reader compiles and tests these without the trading
engine, its transport, or any credentials.
| Module | Dossiers | Lines | Tests |
|---|---|---|---|
05_INSTRUMENTS/strategies/rust/src/directional_alpha.rs | BL-SD-003, BL-SD-004 | 512 | 20 |
05_INSTRUMENTS/strategies/rust/src/taker_wider_edge.rs | BL-SD-008 | 508 | 15 |
05_INSTRUMENTS/strategies/rust/src/vacuum_capture.rs | BL-SD-002 | 928 | 24 |
05_INSTRUMENTS/strategies/rust/src/types.rs | shared market-data structs | 100 | |
05_INSTRUMENTS/strategies/rust/src/lib.rs | crate root | 15 |
3.2 Python strategy cores
Under 05_INSTRUMENTS/strategies/python/src/, with tests in the sibling
tests/ directory.
| Module | Dossiers | Lines | Tests |
|---|---|---|---|
05_INSTRUMENTS/strategies/python/src/cash_and_carry.py | BL-SD-016 | 254 | 20 |
05_INSTRUMENTS/strategies/python/src/lead_lag.py | BL-SD-018 | 396 | 19 |
05_INSTRUMENTS/strategies/python/src/identity_burst.py | BL-SD-029 | 294 | 20 |
05_INSTRUMENTS/strategies/python/src/aggressor_identity.py | BL-SD-026, BL-SD-029 | 166 | 13 |
05_INSTRUMENTS/strategies/python/src/whale_drift.py | BL-SD-030, BL-SD-031 | 269 | 21 |
05_INSTRUMENTS/strategies/python/src/volatility_premium.py | BL-SD-038, BL-SD-047 | 284 | 19 |
05_INSTRUMENTS/strategies/python/src/option_pricing.py | BL-SD-038, BL-SD-047 | 141 | 10 |
05_INSTRUMENTS/strategies/python/src/conditioned_reversion.py | BL-SD-039 | 248 | 16 |
05_INSTRUMENTS/strategies/python/src/exact_pnl_backtest.py | BL-SD-039 | 100 | 18 |
Two of the thirteen needed no new code. BL-SD-001 carries no reference
implementation at all, because the order-flow computation it used was later
carried into the directional-alpha module. BL-SD-046 rests on the cost and
markout primitives already published under 05_INSTRUMENTS/src/.
3.3 What tier 1 came to
| Strategy cores published | 14 modules, 4,215 lines |
| Tests | 215, all passing |
| Dossiers whose promise is now kept | 15 |
| Defects found in ported arithmetic | 0 |
| Defects found in the record while porting | 5 |
The last row is the one worth reading twice. Porting found nothing wrong with
the code and five things wrong with the documents describing it: four cells in
a results table in BL-SD-039, recorded in BL-SD-000 section 7.3, and one
ambiguous condition list in BL-SD-002 section 4.
That is the same pattern the instrument publication pass produced, and
BL-IS-000 section 6 draws the conclusion this one confirms. A specification
and an implementation that never meet cannot disagree. Putting them side by
side is what makes the disagreement visible, and the disagreements surface in
the prose more often than in the code.
4. Tier 2, published
Thirty-one dossiers, all closed, none envelope-bound. Every one of them now cites running code. Twenty cite the whole of what their verdict rests on; eleven cite the reasoning layer and have an orchestration driver still scheduled, and section 4.2 names each.
4.1 Published
| Module | Dossiers | Lines | Tests |
|---|---|---|---|
05_INSTRUMENTS/strategies/rust/src/vpin_reversal.rs | BL-SD-005 | 452 | 13 |
05_INSTRUMENTS/strategies/rust/src/spread_spike_capture.rs | BL-SD-006 | 447 | 12 |
05_INSTRUMENTS/strategies/python/src/cointegration_prescreen.py | BL-SD-013 | 436 | 23 |
walk_forward_momentum in 05_INSTRUMENTS/src/walk_forward.py | BL-SD-014 | 6 of 26 | |
05_INSTRUMENTS/strategies/python/src/cross_sectional_reversion.py | BL-SD-010, BL-SD-011 | 313 | 28 |
05_INSTRUMENTS/strategies/python/src/funding_carry.py | BL-SD-012 | 203 | 24 |
05_INSTRUMENTS/strategies/python/src/validation_stats.py | BL-SD-010, BL-SD-011, BL-SD-039 | 122 | 16 |
05_INSTRUMENTS/strategies/python/src/exit_geometry.py | BL-SD-040 | 238 | 28 |
05_INSTRUMENTS/strategies/python/src/fragility_conditioning.py | BL-SD-043, BL-SD-044, BL-SD-045 | 340 | 37 |
05_INSTRUMENTS/strategies/python/src/oi_accumulation.py | BL-SD-015 | 258 | 35 |
05_INSTRUMENTS/strategies/python/src/accumulation_distribution.py | BL-SD-017 | 275 | 45 |
05_INSTRUMENTS/strategies/python/src/session_structure.py | BL-SD-033, BL-SD-034, BL-SD-035 | 370 | 52 |
05_INSTRUMENTS/strategies/python/src/cascade_events.py | BL-SD-022, BL-SD-028 | 179 | 27 |
05_INSTRUMENTS/strategies/python/src/oracle_premium.py | BL-SD-024, BL-SD-025 | 292 | 40 |
05_INSTRUMENTS/strategies/python/src/settlement_flow.py | BL-SD-021 | 251 | 26 |
05_INSTRUMENTS/strategies/python/src/cohort_persistence.py | BL-SD-023 | 192 | 25 |
05_INSTRUMENTS/strategies/python/src/maker_replay.py | BL-SD-027 | 103 | 21 |
05_INSTRUMENTS/strategies/python/src/carry_characterisation.py | BL-SD-050 | 155 | 23 |
05_INSTRUMENTS/strategies/python/src/dislocation.py | BL-SD-019 | 157 | 20 |
05_INSTRUMENTS/strategies/python/src/crowding_state.py | BL-SD-037 | 142 | 21 |
BL-SD-009 needed no new code. Its configuration lives in the strategy
registry and its code is the taker wider-edge core already published; nothing
was written for it because there was nothing to write, and the dossier now says
so rather than leaving an absence.
Eleven rows are published in part rather than in full, and the schedule says
which half. BL-SD-040 has its causal stop primitive and its exit-geometry sweep
published; the stop-overlay driver that orchestrates them is scheduled.
BL-SD-042 has the cross-sectional primitive its three successors reuse.
BL-SD-043, BL-SD-044 and BL-SD-045 have the whole conditioning layer they
share -- the causal fragility gate, the trailing volatility gauge, the
rank-weighting, the double sort -- and their per-hypothesis drivers, decile map,
cell map and post-mortem diagnostic are scheduled. BL-SD-051 has the
anchor-robustness instrument its own correction motivated, and its momentum cell
map and rebalance-hour sweep are scheduled. BL-SD-034 and BL-SD-035 have
the session partition, the interval machinery and the door criterion, and the
detector wiring that supplies their events is scheduled. BL-SD-028 has the
cascade detector it shares with BL-SD-022, and its own two-entry-point
comparison glue is not published, because section 6 of that dossier records
that the glue lacked dedicated unit coverage and publishing untested code would
carry the gap forward under the appearance of closing it. BL-SD-041 has every module its verdict rests on -- direction selection, leg
pricing, the portfolio collapse, the interval, the stop and the geometry -- and
only its own event-selection loop is scheduled. BL-SD-037 has the causal
crowding state; its mechanical selection, characterisation instrument and tail
test are scheduled. Counting any of the eleven as delivered would overstate the
tier.
The split holds the same shape in every case. What is published is the layer a reader has to check to disagree with a verdict: the gate, the control, the weighting, the sign convention, the matcher. What is scheduled reads a data lake and calls those functions in order.
The split is not arbitrary. What is published in each case is the part that carries the reasoning a reader has to check: the gate that decides when to trade, the control that holds two arms at the same size, the weighting that bounds concentration. What is scheduled is orchestration over it. A reader who disagrees with one of these verdicts will disagree about the layer that is out, not about the loop that reads a data lake.
BL-SD-007 needed no new code. It shares the taker wider-edge core already
published in tier 1, and the sharing claim was verified rather than assumed:
the core takes its instrument universe as a parameter and holds no selection
logic, so the only difference between the two hypotheses is which symbol list
was supplied.
The cointegration pre-screen is the one to read first in this tier. It is
published as a negative exhibit, refuses to run without an explicit look-ahead
acknowledgement, and its test suite measures the leak rather than asserting it:
handed two independent random walks, it reports a net edge above +50 basis
points while the corrected harness on the same series reports a negative one.
BL-SD-013 section 11 sets out both leakage channels.
validation_stats.py was extracted from inside conditioned_reversion.py
during this batch rather than written fresh. Two families beyond BL-SD-039
rest on the same portfolio-sizing collapse and the same block bootstrap, and a
primitive three dossiers depend on should not live inside one of them. The
extraction changed no arithmetic and the test count went up rather than down,
because functions that were only covered through a caller now have cases of
their own.
oracle_premium.py carries the data rule that does more for its family's
credibility than any of its statistics. Sampling gaps are cut, never bridged,
and each contiguous segment is resampled on its own. Interpolating across an
outage would manufacture exactly the reversion the instrument is looking for: a
premium wide before a gap and narrow after appears, bridged, as a smooth
reversion nobody observed, and the instrument would then report reversion
strongest precisely where the data is worst.
cascade_events.py carries the equivalent choice on the statistics side. Its
trailing volatility measure is a median rather than a mean, because a cascade is
a period in which true range explodes and this statistic scales the band that
decides which events exist at all. A mean over a window containing the cascade
would grow with the event, widen the band, admit more forced flow, and make the
event look larger than it was. That is not a general preference for medians. It
is specific to a detector whose threshold is computed on the same series that
trips it.
session_structure.py is the one published module that names an open
methodological question in its own signature instead of settling it.
Its intervals come from a bootstrap that resamples observations independently,
and the function is called bootstrap_ci_iid for that reason. BL-IS-001
argues correlation-aware resampling is mandatory on this substrate and R-02
forbids per-leg statistics, but both arguments are about legs held
simultaneously across correlated instruments, where measured pairwise
correlation is 0.737. The observations here are events spread across coins and
across time, so that argument does not transfer directly, and it does not
obviously fail to either.
Whether these events cluster enough to require block resampling was not
measured, and this pass did not measure it. Naming the construction is what a
reader needs in order to decide for themselves and to substitute the moving-block
version in 05_INSTRUMENTS/src/inference.py if they judge it necessary. The
direction of the risk is stated too: an interval narrower than it should be
makes the session door easier to trip, not harder, so the exposure is toward
finding a difference that is not there.
That is the honest handling of a question a publication pass surfaces but cannot answer. The alternative is either a silent assumption or a claim the measurement does not support, and the record's own rules rule out both.
oi_accumulation.py and accumulation_distribution.py are published as a
pair, and the pair is the point: the second supersedes the first, and reading
them together is what shows what the successor added. It added a market regime
gate and a corrected funding accrual.
The predecessor is also where this record's clearest data-defect lesson sits.
Its funding cost function was handed an empty sequence on every one of 107
trades, because the feed above it was not delivering rates, and the function
had no way to tell that from a hold that spanned no settlement. R-17 is the
rule that came out of it and the published module records the distinction it
cannot itself make. Correcting the feed did not save the hypothesis: the
strategy is long-only and the sample ran through a nine-day decline, so it died
on the idea afterwards. A data defect that hides a cost term has to be found
before a mechanism can be judged, and finding it is not the same as having
judged one.
The successor carries a caveat that constrains what its own verdict may be read
as saying, and it was verified rather than repeated. entry_confirmation
accepts two routes into a position, and the spring and upthrust route was never
live: the engine's only call site passed reclaimed=False unconditionally. The
verdict falsified the confirmed-turn route and says nothing about the other one.
The published signature keeps the argument rather than dropping it, so the
untested path stays visible, and the test suite pins both routes so a reader can
see the untested one works.
fragility_conditioning.py carries the sharpest instrument lesson in the
record, and it is a lesson about measurement rather than about markets.
Its trailing percentile is a midrank rather than a plain empirical distribution function, and the reason was measured. Perpetual funding is clamped to a one-basis-point baseline whenever the premium index sits inside the interest-rate band, so between 43 and 68 percent of bars on our panel sit at exactly that value. The distribution has an atom. Under a plain distribution function the modal value scores near zero despite being the median, and a threshold written as "at or below 10" was measured capturing 24 percent of the sample. The threshold had stopped meaning what it was written to mean.
That is an instrument failure, not a hypothesis failure, and the two must not be allowed to look alike. It was caught before a single forward return had been computed, which is the only reason it is a design note rather than an incident note. The published test suite reproduces the substrate condition and pins the definition against it, so a reader can see both the failure and the fix rather than taking either on trust.
exit_geometry.py is the one module in this record whose tests are written
rather than ported, and the reason is the point of the module. Its measurements
first ran as one-off scripts that were never committed, which is where R-25
came from. The instrument built to replace them was never given a test file
either, so publishing it meant writing the suite. The module docstring says so
instead of letting a reader assume the cases came from somewhere.
It also carries the sharpest teaching point in the tier. Maximum favourable excursion is a look-ahead statistic: "ninety-six percent of trades were briefly up more than 22 basis points" is an upper bound on what any exit rule could have collected, not an estimate of what one would collect, because harvesting it would require knowing in advance which bar turns out to be the peak. A take-profit is the only causal implementation, which is why both halves are in one module. Publishing them apart would make it easy to report the bound as though it were the result.
The cross-sectional module is worth reading for the identity in BL-SD-010
section 11. Its two modes are one selection rule with the direction flipped, so
net_momentum = -net_reversal - 2 * (fee + spread_cost) holds per trade and the
two families cannot both be profitable. That is the kind of relation that is
obvious once written down and invisible until then, and the test suite pins it
rather than trusting it.
4.2 Scheduled drivers
Orchestration over published cores. None of these carries reasoning a reader needs to check a verdict, and each is named so the promise stays auditable.
| Driver | Dossiers |
|---|---|
| Fragility-family drivers over the published conditioning layer | BL-SD-042, BL-SD-043, BL-SD-044, BL-SD-045 |
| Stop-overlay driver over the published stop and geometry modules | BL-SD-040 |
| Momentum cell map and rebalance-hour sweep over the published anchor instrument | BL-SD-051 |
| Two-entry-point comparison glue, deliberately withheld as untested | BL-SD-028 |
| Detector wiring supplying the session families their events | BL-SD-034, BL-SD-035 |
| Mechanical selection, characterisation instrument and tail test over the published crowding state | BL-SD-037 |
| Event-selection loop over the published reversion modules | BL-SD-041 |
5. Tier 3, published
The maker engine's decision cores are published as
05_INSTRUMENTS/strategies/rust/src/maker_core.rs, 644 lines, 29 tests, in
the same dependency-free crate as the strategy cores. Its vacuum-capture
component was published in tier 1, because that component carried a family
verdict of its own.
| Core | What it decides |
|---|---|
| Quote placement | The five-step price and skip decision, per symbol, per tick |
| Inventory skew | The four-tier classification and the sign that steers it |
| Toxicity | Whether a reading clears both the floor and the window's own percentile |
| Force-flatten | Which of three triggers, if any, closes a position by taker |
Each core is a pure function. In the source the quote computation was asynchronous because it read the skew level, the inventory sign, the toxicity flag and the runtime order size through locks and a cache; all four are arguments in the published version, so the algorithm is testable without any of that and a reader can see which inputs decide a quote.
What is not published is the order manager, the fill watcher, the per-account
plumbing, the realised-PnL bookkeeping and the run loop. BL-TR-001 section 4
records the engine at 3,673 lines. What is decision logic is here; the rest
places orders, and publishing it would mean publishing the trading platform
rather than the research.
Two production defects are recorded in the module because their fixes are in the arithmetic. On 2026-05-25 order notional was found to be validated at the mark price rather than at each side's own quote price; a buy quote sits at the bid, below the mark, so its effective notional could fall under the venue minimum while the check passed, and the venue rejected it on every tick of a low-priced symbol. The same day, force-flatten was found to be issuing market orders on dust positions under the venue minimum, which were rejected and re-issued the next tick without end. Both fixes are pinned.
One label is corrected rather than the behaviour beneath it. The toxicity test returns not-toxic while its window is short of its sample floor, and the source described that as failing closed. It is the opposite: during warm-up the guard does not engage and quotes are placed. That is a defensible choice for a passive maker whose alternative is not quoting, but the label was inverted. The behaviour is unchanged, because changing it would change what ran.
With this, every tier of the schedule is published. What remains scheduled is listed in section 4.2: eleven orchestration drivers over cores that are already out, none carrying reasoning a reader needs in order to check a verdict.
6. What publication does and does not mean
A published strategy core is the decision logic that produced a verdict in this record, translated and tested. It is not a runnable trading system, and the modules say so individually.
What is left behind is consistent across the tier and stated in each module's own change record: the asynchronous run loop, the cache and market-data transport, the cancellation plumbing, order placement, and the engine types those depend on. None of it is needed to check a verdict, and publishing it would mean publishing the trading platform rather than the research.
A mechanical check of the published tier confirms the separation holds. A deterministic parse of the strategy modules and their tests resolves every reference leaving that set to a standard library, to the test runner, or to a sibling module inside this record. Nothing reaches back into the vault, the engine, or a transport client.
One published module deliberately reaches across into Volume V rather than staying inside its own tier. The cointegration pre-screen's test suite imports the corrected walk-forward instrument, because the exhibit is the comparison between the two and a test that could not run both would not be able to make it.
Nothing here is a representation that any of these strategies is profitable. Every one of them is closed.
7. Cross-references
BL-FM-004 section 4 for the classification policy this schedule discharges.
BL-IS-000 section 8 for what Volume V publishes overall. BL-SD-000
section 5 for the envelope-bound rows tier 1 covers, and section 7.3 for the
defects this pass found. BL-TR-001 section 5 for the live, dormant and
archived distinction in the source tree.
Copyright (c) 2026 Bijective Labs. All rights reserved.