diff --git a/docs/reports/2026-08-16-status-review.html b/docs/presentations/keel-status-review-2026-08-15.html similarity index 68% rename from docs/reports/2026-08-16-status-review.html rename to docs/presentations/keel-status-review-2026-08-15.html index 490095b6..8cbb4ea2 100644 --- a/docs/reports/2026-08-16-status-review.html +++ b/docs/presentations/keel-status-review-2026-08-15.html @@ -236,7 +236,61 @@

Deployed, autonomous, and deliberately tiny

-

A parallel paper deployment carries a wider universe — 19 allowlisted assets, 20 attested, 22 rules — and exists purely to accumulate evidence without risking funds.

+

Alongside it runs a paper deployment — separate database, separate config, synthetic cash. It is not a toy: it is the evidence pipeline that is supposed to feed live. The next section is about why it currently does not.

+ + +
+

Paper → live

+

The promotion path exists, is enforced, and is unreachable

+

A rule is not supposed to touch real money until it has earned it. keel encodes that as a status ladder with a deterministic gate between the last two rungs — and the gate is doing its job, which is how we know the strategy cannot clear it.

+ +
+ + + + + + + + + + + + +
Paper deployment · synthetic cash, wider universe
ItemDetailFigure
ModePaper — synthetic equity, no venue orders$500 → $550
AllowlistThe live six plus SOL, LTC, LINK, ZEC, NEAR, AVAX, UNI, FET, ICP, DOT, CRV, ALGO, BCH19
Attested assetsHuman-classified, each with a source20
Rules on the books19 × turtle_breakout at paper, 1 at candidate, 2 × dca disabled22
Rules that actually loadOnly status=paper loads in paper mode — the other three are inert19
Signals producedTo date0
Orders, positions, outcomesTo date0
+
+ +

The ladder, and the gate between paper and live

+

A rule moves candidatepaperlive. Status is not a label: it decides whether the agent loads the rule at all. Promotion to live requires clearing every floor below, and the floors were deliberately not relaxed together — when the win-rate axis was loosened for trend-following, min_trades was held at its canonical value on the grounds that the two axes are independent and only one had a justification.

+ +
+ + + + + + + + + + +
Promotion floors · strategy/promotion.py
FloorRequiredStatus against measurement
min_trades100Unreachable — see below
min_expectancy> 0Untested at scale
min_rr1.5Untested at scale
min_win_rate (trend class)0.30Relaxed from 0.55, deliberately and alone
PBO / overfitting gaterequiredBlocks while unset
+
+ +
+

The floor and the timeframe are arithmetically incompatible

+

min_trades = 100 is checked per rule, per product — it does not pool across assets. Measured trade rates for the daily turtle:

+ +

Waiting for the gate is not a slower path to the same place; it is no path. And adding assets does not help — the floor is per rule, so a new asset yields a new rule with its own ~14 trades, not a pooled 114.

+
+ +

What follows, stated plainly

+

Five of the seven live rules carry promoted_at = NULL. They were seeded straight to live and have been left there. That is a recorded decision, not an oversight — the reasoning sits in the live config, reviewed and dated. Only the BTC dca rule and the DOGE turtle were promoted through the normal path.

+

What bounds the risk is therefore not the promotion gate, which never ran. It is the position caps, the nineteen rails, and the allowlist — and those are separate mechanisms that all did run. The bypass is of the evidence gate, not the safety rails.

+

This is also why paper matters more than its zero signals suggest. It is the only apparatus that could ever produce the evidence the gate demands, and the honest reading of 0 signals is not that paper is broken — it is that a rule firing twice a year cannot generate a hundred trades inside a human attention span.

@@ -341,6 +395,55 @@

The governing asymmetry

+
+

Shariah basis

+

Which rulings are encoded, and what they rest on

+

The compliance screen is not a curated list of "approved coins". It is a set of named juristic tests, each traceable to a source, each enforced in code that fails closed.

+ +
+ + + + + + + + + + + + + + +
The encoded rules · compliance/screen.py and execution/guards.py
CriterionWhat it testsSourceWaivable?
attestationSector, backing and yield are human-attested with a source. Nothing is derived from price data, so an unclassified asset is unknown — and unknown is a rejection§28.4Never
haram_sectorThe token's core business line is not an excluded one§28.4Never
riba_yieldHolding it carries no guaranteed or expected return — that is riba-like, and not a bare spot position§28.4Never
backing'ayn (a tangible, owned thing) versus dayn (a debt claim on an issuer). A pure claim is refused§65.5 · §67.2Never
└ gold & silverIf the backing is gold or silver, the stricter bay' al-sarf treatment applies — relevant to PAXG§65.5Never
instrument_wrapperAdmission must name the contract, not just the asset: the allowlist is not juristically homogeneous, and a CFD can spell itself exactly like spot§71.4aNever
withdrawal_capabilityQabd — possession holds only while nothing prevents withdrawal on demand. Rail 17 halts new entries when it cannot be shown§65.4Never
settlementUSD-settled spot only; every other contract class is refused mechanicallyrails 18/19Never
historyFour years of daily bars before a rule can be validatedevidence, not fiqhYes, documented
+
+ +

Only one criterion in the whole screen can be waived, and it is the one that is not a religious question. The code does not consult the waiver map for any of the others, and the CLI will not accept them — expanding that set is a deliberate decision, not something a passing test can quietly do.

+ +

The sources

+
+ + + + + + + + + + + +
Compliance references, in the order they entered the record
RefSourceRole
§28Andreas Jobst, The Economics of Islamic Finance and Securitization — IMF Working Paper 07/117 (2007)The original compliance foundation; its §II definition grounded the first screen
§65Muhammad Ayub, Understanding Islamic Finance — Wiley Finance (2007, 544pp)The foundation source, displacing §28. Derives the prohibitions from primary texts, names the juristic tests, and cites OIC Fiqh Academy and AAOIFI resolutions
§66Four trading-specific papers on bay' al-sarf, qabd and forex fiqh — including Syed Faiq Najeeb (INCEIF)Exchange-specific rather than banking-specific; the sharpest-focused material in the base
§67Al-Jarhi, Abuzaid & Oweida, Handbook of Islamic Finance — Ankara Social Sciences University (2022, 322pp)The 'ayn/dayn distinction the backing axis rests on
§71IIFA Resolution 237, the SRB material, and the IIUM literature reviewSought specifically to close the crypto gap below
§72Four academic papers on cryptocurrency and Shariah — the māl/thaman questionThe first direct engagement with whether crypto is Shariah-recognised property
+
+ +
+

⚠️ The honest gap, and why it is stated rather than papered over

+

The field's highest authority has expressly declined to rule on the central question. IIFA Resolution 237 carries a heading reading "Second: Shariah Ruling" — and there is no ruling under it. The Academy identified the foundational questions as unresolved. It has ruled on electronic possession, which is precisely why the qabd test behind rail 17 is well-grounded; it has not ruled on whether crypto is Shariah-recognised property. The IIUM piece is a literature review and issues no ruling of its own.

+

An earlier note in the record puts it more bluntly: at the time, not one compliance source addressed crypto directly — and silence is not permission. §71 and §72 were sought specifically to close that, and they narrowed it rather than closing it.

+

So keel does not claim the question is settled. It enforces what is settled — possession, riba, sector, backing, contract class — and records the operator's own attestation, attributed and sourced, for what is not. That is the whole design: keel is an enforcement engine for a ruling you supply, not a source of rulings.

+
+
+

Asset sweep

The scout found more bugs in itself than assets to trade

@@ -364,7 +467,7 @@

The scout found more bugs in itself than assets to trade

Venues

Coinbase spot only — and the refusals are structural

-

Three venue expansions were studied and three answered no. Two are permanent; one is "not yet".

+

Four venues have been assessed beyond Coinbase spot. None is live, and the reasons are not interchangeable — two are permanent refusals on the instrument, one waits on data, and one is built and deliberately unwired.

@@ -375,11 +478,16 @@

Coinbase spot only — and the refusals are structural

+
Trade NationRefusedNothing in the product range is spot ownership — CFDs and spread bets throughout.
US equitiesNot yetCoinbase does have an equities order path — the brief was wrong. But market data is absent: n=0 candles across 21 trading days, preview refused 403, three conflicts with our execution model.
Coinbase futures / perpsRefusedRails 18/19 reject any non-USD-settled-spot contract mechanically, regardless of narrative.
RobinhoodBuilt, unwiredThe only venue with a working adapter — keel-broker-robinhood ships translate, transport and adapter layers behind the broker port, with its own test suite. It is deliberately unreachable from live: the executor still calls Coinbase's signature directly, _common.py constructs a CoinbaseClient, and nothing calls load_broker().
-

The distinction matters for planning: a CFD venue is never, because the instrument conflicts with the charter. Equities are not yet, because the blocker is data and execution capability, both of which can change.

+

Robinhood is blocked by the venue, not by us

+

The gap is a property of the venue rather than a bug to fix: Robinhood's market orders accept only asset_quantity — there is no quote-amount market order. keel opens every position with MarketIOCByQuote, sizing in dollars rather than coins, so under the current entry model Robinhood cannot open a position at all. The adapter is honest about it: it declares market_ioc_quote unsupported and raises rather than approximating.

+

That is why the port work is finished and the wiring is not. Issue #198 exists so the migration trips over this deliberately, on the bench, rather than discovering it with real money.

+ +

The distinction matters for planning. A CFD venue is never — the instrument conflicts with the charter. Equities are not yet — the blocker is data and execution capability, both of which can change. Robinhood is not like this — it needs either a different entry model or a venue-side capability that does not exist today.