خارطةُ طريق كيل — تُقرأ من المستودع وتتجدّد كل ساعة
هذه الصفحة قراءةٌ لخطة عمل المشروع نفسه — المراحلُ على GitHub والبنودُ تحتها، تمامًا كما يتتبّعها المستودع. ويرتبط كلُّ بندٍ بقضيّته حيث يجري النقاش أصلًا؛ لا تصويتَ هنا، ولا يمكن شراءُ تقدُّمٍ على أحدٍ هنا.
المرحلةُ المفتوحة نيّةٌ لا التزام، والتاريخُ عليها هدفٌ لا وعد. ويُنجَز العمل حين يصحّ قولُ إنه أُنجز — وسجلُّ التغييرات يوثّق ما هبط فعلًا.
المسيرةُ حتى الآن
كلُّ المعالم المغلقة، من الأقدم إلى الأحدث — تاريخُ المشروع مقروءًا من المستودع مباشرةً، بتواريخٍ دوّنها GitHub في اليوم الذي اكتملت فيه كلُّ مرحلةٍ فعلًا. لا سردَ كُتب بعد وقوعه؛ هذا هو السجلّ.
يوليوز 2026
-
Safety hardening — USDC, allowance, bypass-arm
USDC-funding rail (no bank/ACH draw), monthly subscription-allowance rail, and bypass-arming hardening.
شاهِد هذه المرحلة على GitHub → -
Engine validation & trade simulation
5yr historical trade simulation of the deterministic engine: edge test + realistic $500/mo account, risk-adjusted vs DCA benchmark, GO-LIVE/TRAIN-MORE verdict + gap-analysis backlog.
شاهِد هذه المرحلة على GitHub → -
Account-model reconciliation + tier/fee analysis
20% taker <$1k vol) + subscription costs -> net-P&L matrix.
شاهِد هذه المرحلة على GitHub →
غشت 2026
-
Phase 1 — Offline foundation
DB + CSV import + P&L + analysis primitives + market feed.
شاهِد هذه المرحلة على GitHub → -
Phase 2 — Rules, CTS engine, backtest, paper gate
Rule library + CTS confluence scoring + backtest + paper-trade + promotion/demotion.
شاهِد هذه المرحلة على GitHub → -
Phase 3 — Execution, rails, agent loop (confirm)
Executor + 12 hard rails + scheduled agent loop in confirm mode.
شاهِد هذه المرحلة على GitHub → -
Phase 4 — Autonomy, money mgmt, insights
Bypass mode + smooth-ratio money management + insights + journaling.
-
Phase 6 — Open source: licence & discoverability
BLOCKING. The repo is public but legally all-rights-reserved: no LICENSE, no description, no topics.
شاهِد هذه المرحلة على GitHub → -
Phase 7 — Open source: contributor readiness
Make contributing possible for someone who is not the author.
شاهِد هذه المرحلة على GitHub → -
Phase 8 — Open source: scholarly grounding & launch
What converts 'someone's trading bot' into something a Muslim developer can trust: the fiqh basis written down, a scholarly review path, Arabic entry point, then announce — in that order, never before.
-
Phase 9 — Execution & backtest fidelity
Make the simulator and the live executor agree with reality.
شاهِد هذه المرحلة على GitHub → -
Phase 10 — Evidence pipeline: cadence, pooling & measurement
20 trades per asset-year, min_trades=100 takes 31–84 years — the promotion gate is arithmetically unreachable.
شاهِد هذه المرحلة على GitHub → -
Phase 13 — TUI: the operator console
py 3000→1434 lines, parity+isolation pins), C2 #388 (console shell, guarded profile switching, the session banner with the MarketSchedule port extension), C3 #389 (compliance menu, the scout-results admission handler,…
شاهِد هذه المرحلة على GitHub → -
Phase 14 — Self-update: the console keeps the deployment current
CLOSED 2026-08-19 — #415 delivered in PR #417: the in-console self-updater.
شاهِد هذه المرحلة على GitHub → -
Desktop distribution — keel for non-technical users
A first-time user downloads one file, installs, and reaches a working keel without typing a command.
شاهِد هذه المرحلة على GitHub → -
Strategy-API expressiveness (Jesse comparison)
Outcome of the 2026-08-23 comparison against the Jesse framework's strategy API.
شاهِد هذه المرحلة على GitHub → -
Web UI — a zero-dependency, view-source console
py's server-side HTML with a JSON API plus plain ES modules.
شاهِد هذه المرحلة على GitHub → -
Reach & surfacing (deferred)
Work whose value depends on having an audience: MCP surfacing, the site AI page, homepage claims.
شاهِد هذه المرحلة على GitHub → -
v0.11 — Ship the browser, the app, and WAL
0. 11+ plan: deepen the moat (auditability, the gauntlet, compliance) while attacking the real bottlenecks — statistical throughput and fee economics.
شاهِد هذه المرحلة على GitHub → -
Phase 11 — Evidence expansion & operational guardrails
Phase 11 — Evidence expansion & operational guardrails.
شاهِد هذه المرحلة على GitHub → -
Phase 13 — Binance (keel-broker-binance)
A fifth venue, and the first added for a REASON the repo already states rather than for reach.
شاهِد هذه المرحلة على GitHub → -
Competitive parity — validation & reach
7, ranked. Organising principle: every competitor's validation tooling is a diagnostic the user may ignore; keel's promotion gate refuses.
شاهِد هذه المرحلة على GitHub →
شتنبر 2026
-
The honest cockpit (dashboard)
The Alpaca-audit dashboard pass.
شاهِد هذه المرحلة على GitHub → -
v0.14.0 shakedown
0 on the deployment turned up: the MCP un-migrated guard (#751), two console bugs found testing it (#754, #755), and the launchd console daemons plus keel open (#756).
شاهِد هذه المرحلة على GitHub →
أكتوبر 2026
-
Console — four engine views
Slim the local web console from 13 screens to Pulse, Holdings, Rules, Audit & Setup; drop venue-mirror data; add the browser Halt.
-
DCA sleeve — lifecycle design
قيدُ العمل — مراحلُ مفتوحة
-
Phase 5 — Broker port & second venue
Wire the keel.brokers registry to the live path so a second venue is reachable. Covers the Robinhood adapter's remaining prerequisites, venue visibility/capability gating, and retiring the hardcoded CoinbaseClient in _build_broker.
- أُنجز Robinhood best_bid_ask is not a coherent book snapshot — the legs cross on the most liquid pairs #413
- مفتوح Robinhood: order-object shapes are still doc-only — one real order is needed to verify them #412
- أُنجز Robinhood transport: no backoff against a 100 req/min limit, and 429 propagates as a bare HTTPError #411
- أُنجز Robinhood: no pre-flight sizing check, so a sub-minimum or off-increment order finds out at the venue #410
- أُنجز Broker port: place_order has no idempotency key, so any retry places a second live order #409
- أُنجز Venue visibility must be capability-based, not key-presence-based — a read-only key looks identical to a working one #233
- أُنجز Robinhood STATE_TO_PORT_STATUS omits partially_filled — latent, not currently harmful #226
- أُنجز Validate the Robinhood adapter's invented fixture shapes against the live venue #215
- أُنجز Assess US equities as a tradeable asset class for keel (Coinbase or any other broker) #214
- أُنجز Robinhood: declare the quote-sized-entry gap rather than approximating it #207
- أُنجز Assess Trade Nation (tradenation.com) as a candidate broker for keel #204
- أُنجز Assess cTrader Open API (openapi.ctrader.com) as a candidate broker for keel #201
- أُنجز Prerequisites before wiring Robinhood to the live execution path #198
- أُنجز Robinhood: fees_usd is always 0, so subscription-lapse detection is inert against this venue #197
- أُنجز Robinhood adapter: close the independent review findings #196
-
Phase 12 — Stocks via Alpaca (keel-broker-alpaca)
US equities through the broker port: a keel-broker-alpaca adapter (Alpaca Trading API, paper first) that passes the port conformance suite with zero changes to the engine core, an equities paper profile accruing hash-chained evidence, and a cost-fidelity restatement (regulatory fees, spread, data tiers) benchmarked against DCA on the same tickers. PRD: docs/superpowers/specs/2026-08-18-keel-broker-alpaca-prd.md Lineage: Phase 5 — Broker port & second venue (milestone 8; #233 capability-based venue visibility and #198 Robinhood live-path prerequisites remain open there and interact with this work). Hard constraints carried from the PRD: long-only spot, cash accounts only (no margin — riba; also sidesteps PDT's margin threshold), per-(venue, instrument) attested screening with operator-supplied classifications, no live path in any phase.
- أُنجز Alpaca options: verify the venue reality before any commitment — agreement, cash-account support, multi-leg, assignment events #636
- مفتوح Route within fee-free allowances across venues — rail 14 is the boundary, never a budget to relax #478
- أُنجز keel update cannot update an Alpaca deployment — the equities profile is outside PRODUCTION_WHEEL_PREFIXES #425
- أُنجز Trademark & originality posture: venue disclaimers and contribution licensing rules #379
- أُنجز Cash-account posture: encode and document no-margin / PDT-adjacent constraints #372
- أُنجز keel-broker-alpaca Phase C: cost-fidelity restatement + DCA benchmark on equities #371
- أُنجز keel-broker-alpaca Phase B: equities paper profile, attestation semantics, runbook #370
- أُنجز keel-broker-alpaca Phase A: adapter package + port conformance suite green #369
-
Phase 14 — Analysis feed (Ibn Khaldun Analyzer)
Consume Ibn Khaldun Analyzer's assessments as candidate proposals a human attests. The Analyzer proposes; keel's existing deterministic gate decides. Nothing new touches admission, sizing, or order placement. PRD: docs/superpowers/specs/2026-08-27-analysis-feed-prd.md SRD: docs/superpowers/specs/2026-08-27-analysis-feed-srd.md GATED: the machine-readable fields keel needs (asset, sources[]) live in the Analyzer's `signal` block, which is the Desk tier boundary. Desk tier or the integration does not work. Everything after Phase A depends on that decision.
- مفتوح Analysis feed C3: the keep-paying decision — measure it, publish it either way #578
- مفتوح Analysis feed C2: the operator guide — including the sentence about attesting out of persuasion #577
- مفتوح Analysis feed C1: the safety pins — AST scans that outlive the unit tests #576
- مفتوح Analysis feed B4: entitlement visibility — a lapse must not read as market quiet #575
- مفتوح Analysis feed B3: `keel analysis fetch` — writes a shortlist the existing `assets propose` already reads #574
- مفتوح Analysis feed B2: the frame→Candidate adapter — pure, and narrower than the payload #573
- مفتوح Analysis feed B1: bounded SSE client on urllib — stdlib only, not a daemon #572
- مفتوح Analysis feed A2: `analysis_feed:` config and credential — not `subscription:`, which is rail 14 #571
- مفتوح Analysis feed A1: decide the tier — measure crypto relevance before buying Desk #570
-
Deferred — awaiting a named trigger
Work deliberately NOT started, each with a written trigger that would reopen it. This milestone exists so deferred work stays tracked without being counted as in-flight — closing these issues would delete the trigger, which is the thing worth keeping. See each issue for its own condition.
- مفتوح Monetisation rail: self-hosted non-custodial BTCPay — crypto-only, USD-priced, prepaid-credit subscriptions #638
- أُنجز ADR 0005 — the options decision: amend the constitution (cash-secured, exception-gated) or hold the line at cash-spot #637
- أُنجز The MCP server is invisible: README mentions it zero times in 212 lines #600
- مفتوح Binance BNB fee discount: an allowlist admission, not a settings toggle #568
- مفتوح keel-broker-binance Phase C: cost-fidelity restatement — does 0.1% make the intersection non-empty? #567
- مفتوح keel-broker-binance Phase B: paper profile, rail-17 attestation semantics, runbook #566
- مفتوح keel-broker-binance Phase A: adapter package + port conformance suite green #565
- مفتوح Binance: decide which entity, and whether USDT becomes a settlement currency #564
- أُنجز Opt the promotion gate into per-product slippage — prerequisite-gated on a thin-asset candidate or a load-bearing restatement #335
- مفتوح Route a rule's conditional entry as a genuine resting order (limit/stop) — deferred until a price-conditional rule earns it #333
-
Anywhere access (Phase B)
The mobile wedge: keel link, remote-exposure security, the mobile-first PWA pass, ceremony card, Web Push. Nothing here is audience-gated — it is free-product value that later tiers sit on. Plan: docs/evolution-plan.md §5 Phase B.
-
DCA plan — proposal CLI and read-only card
keel dca plan: a proposed multi-asset DCA schedule from the allowlist, admission, target weights and rail 14's buy cap; [Y] writes candidate rules only. Read-only proposal card under /rules.
- أُنجز DCA card: a degraded rail 14 cap is shown without its reason #852
- أُنجز DCA card: awaiting-state command template omits the served deployment's --config/--db #851
- أُنجز PR feat(web): read-only DCA plan card on /rules #850
- أُنجز dca plan: a duplicated allowlist entry doubles that asset's weight and writes two DCA rules for it #849
- أُنجز dca plan: target_weights keys differing only in case collapse silently #848
- أُنجز dca plan: cap check uses an average month; rail 14 caps the calendar month, so 5-buy months veto #847
- أُنجز PR feat(dca): keel dca plan -- propose a DCA schedule within the venue plan's cap #846
- أُنجز test_rule_manifest still pins the DCA rule budget to config.dca.budget_usd after #840 #844
- أُنجز PR fix(executor): size each DCA buy from the rule's own amount (#840) #843
- أُنجز PR fix(rails): exempt DCA buys from the total-exposure rail; rail 14 bounds DCA (#841) #842
- أُنجز fix(rails): exempt DCA buys from the total-exposure rail; rail 14 bounds DCA #841
- أُنجز fix(executor): live DCA spends config dca.budget_usd ($50) instead of each rule's own amount #840
- مفتوح keel asset onboard: one guided flow for declare → attest → allowlist → fetch/screen, ending at a candidate rule #839
-
DCA sleeve — limits and ops
- أُنجز PR fix(dca): the passing-value suggestion clears rails 3 and 2 as well as 14 (#874) #876
- مفتوح With an unlimited rail-14 record, cash is DCA's only aggregate bound -- say so, and warn in dca plan #875
- أُنجز keel dca plan: the rail-14 suggestion can name a value rail 2 or rail 3 still blocks #874
- أُنجز DCA plan screen cache ignores allowlist edits for up to its TTL #873
- أُنجز dca plan: at $0 headroom the rail-14 suggestion names a budget/buffer where every per-buy rounds to $0.00 #872
- أُنجز dca plan: rail 5 warning says it 'may never veto', but multi-asset DCA plans are vetoed every cycle #871
- أُنجز PR feat(web): cache the DCA plan's admission screen for 5 minutes (#856) #870
- أُنجز PR fix(rails): exempt DCA buys from rail 6; dca plan checks rails 3 and 5 (#853) #869
- أُنجز PR feat(dca): a cap-blocked plan names the largest passing budget and buffer (#854) #867
- أُنجز PR chore(deploy): sync live-rules.json with the live rule set (#855) #858
- أُنجز Cache the admission screen behind /api/dca-plan (5-minute TTL) #856
- أُنجز Sync deploy/live-rules.json with the live rule set #855
- أُنجز keel dca plan: a cap-blocked plan names the largest budget and buffer that would pass #854
- أُنجز DCA concentration: exempt DCA buys from rail 6, and warn in keel dca plan on the rails that still bind #853
-
DCA sleeve — sell side build
- أُنجز [Phase 6] Declared close's phantom exposure returns on the product's next BUY (R33 zeroes only while flat) #943
- أُنجز [PR #939] The SKIPPED exit-watch line points to keel doctor, which crashes on the same non-mapping record #942
- أُنجز [PR #939] keel dca exit --preview crashes on an out-of-range observed_at in a sleeve_exit record #941
- أُنجز [PR #939] Two SleeveExit rules on one product: the proposal and the exit watch disagree about a breach #940
- أُنجز PR feat(rules): sleeve_exit, preview-only (#857) #939
- أُنجز [PR #937] Exit watch judges a cold-cache product (PAXG tranche 3) on one daily bar and reports clear #938
- أُنجز PR feat(execution): the sleeve exit monitor -- transition alerts, doctor, keel dca exit --preview (#857) #937
- أُنجز PR feat(rules): profit_take in preview, and --view gain as trim's default (#857) #936
- أُنجز PR feat(dca): keel dca trim --preview --view lots and --view bands (#857) #935
- أُنجز test(sleeve_report): cover render_replay's "the rule proposed nothing" line #934
- أُنجز test(rules): cover _sleeve_lookahead's cross-truncation divergence dedup #933
- أُنجز sleeve_sell lookahead: n_compared counts a truncation whose claim sits below warmup, which is never compared #932
- أُنجز Tests: sleeve_sell promotion refuses when the lookahead harness raises #931
- أُنجز Tests: run_proposal_replay's dca-rule selection, no-config branch and granularity refusal #930
- أُنجز sleeve_sell promotion: a lookahead check that compared nothing reads as clean #929
- أُنجز PR feat(promotion): the sleeve_sell gate, proposal replay, proposals review, --allow-concurrent-dca (#857) #928
- أُنجز PR fix(deps): pyjwt 2.13.0 -> 2.14.0 (CVE-2026-102274) #927
- أُنجز [PR #922] account sim crashes on a sell-all distribution: refusal holding re-sums qty above the lot #926
- أُنجز [PR #922] sim reports still say the DCA sleeve is never sold; HTML artefact omits distributions #925
- أُنجز [PR #922] account sim's min_hold_days reads only the averaged lot's first buy, booking sales live refuses #924
- أُنجز [PR #922] accumulation_table reuses lot ids after a full-lot sale, corrupting the FIFO row #923
- أُنجز PR feat(sim): the reverse path -- distributions in the account sim and the accumulation row (#857) #922
- أُنجز dca distribute --preview is one day behind the cycle: it misses the cadence day the pipeline proposes on (incl. the day-210 same_day_dca veto) #921
- أُنجز PR feat(dca): keel dca distribute --preview and the reverse_dca doctor findings (#857) #920
- أُنجز sleeve: R36 repeat check silences a later month's lost distribution (no recency bound) #919
- أُنجز PR feat(rules): reverse_dca, preview-only (#857) #918
- أُنجز A sleeve product a bar behind loses the day's proposal: no hourly retry happens (PR #914) #917
- أُنجز No cycle test reaches the min_hold_days / cooldown_days refusals in _handle_reductions (PR #914) #916
- أُنجز Sleeve cooldown self-renews on its own vetoes and never expires (PR #914) #915
- أُنجز PR feat(agent): _handle_reductions -- arbitration, one proposal per product per day, sleeve.proposal notifications (#857) #914
- و39 أخرى على GitHub →
أُنجز مؤخّرًا
-
DCA sleeve — lifecycle design
- أُنجز Sell-side spec (#859): #831 D-arm fee drag quoted from the allowance-aware model, not the live-matching flat-taker run #868
- أُنجز Sell-side spec (#859): keel pnl reads imported transactions (FIFO), so --lots is not a small extension #866
- أُنجز Sell-side spec (#859): 'cycle did not run' is profile.cycled, not #811's position.unmanaged #865
- أُنجز Sell-side spec (#859): rotation and rebalance cost figures overstated vs #831's slippage table #864
- أُنجز Sell-side spec (#859): trial pre-registration is the driver docstring, not trials-ledger.jsonl #863
- أُنجز Sell-side spec (#859): cost_basis formula names a nonexistent positions.original_qty #862
- أُنجز Sell-side spec (#859): the ~$213 'DCA book' includes the PAXG turtle tranche; DCA at cost is $151.81 #861
- أُنجز Sell-side spec (#859): 'no live path can sell a DCA tranche' ignores last-writer position_rule ownership #860
- أُنجز PR docs(spec): DCA sleeve sell side -- trims, rebalancing, reverse DCA, protective exits, rotation (#857) #859
- أُنجز Design: the DCA sleeve's sell side -- trims, rebalancing, reverse DCA, protective exits, rotation #857
-
Console — four engine views
Slim the local web console from 13 screens to Pulse, Holdings, Rules, Audit & Setup; drop venue-mirror data; add the browser Halt.
- أُنجز PR Console: serve the static shell past the remote lifetime to its own session (#1006) #1008
- أُنجز PR sim report: word an empty-side Avg win/loss (R) by counting the R sample (#1004) #1007
- أُنجز Console: serve the static shell past the remote session lifetime so a first visit still gets HALT #1006
- أُنجز PR docs: remote-access names the two stop exceptions to the session lifetime (#1002) #1005
- أُنجز sim report: Avg win (R) / Avg loss (R) print a measured-looking 0.000 for an empty side #1004
- أُنجز PR sim report: word an empty-side R profit factor as insights does (#1000) #1003
- أُنجز docs/remote-access.md still says an expired session cannot be told apart from a wrong one (#985 follow-up) #1002
- أُنجز PR Console: a reloaded console keeps its HALT after the remote lifetime (#985) #1001
- أُنجز sim report edge table: profit factor (R) prints inf / 0.000 for an empty side #1000
- أُنجز PR fix(web): refuse HTTP/0.9 before dispatch with a framed 505 (#989) #999
- أُنجز PR rules backtest: word an empty-side profit factor as insights does (#988) #998
- أُنجز keel serve: an HTTP/0.9 request line raises AttributeError in _declared_body_length #989
- أُنجز rules backtest: profit_factor prints Infinity / 0 for an empty side, unlike insights summary since #986 #988
- أُنجز PR keel serve: socket timeout, GET drain, halt never creates a DB, halt outlives the remote lifetime; stale citations (#981 #982 #983) #987
- أُنجز PR insights+promotion: an empty sample side reads as empty, not as Infinity or zero (#979, #980) #986
- أُنجز Console: keep the HALT control on Pulse after the remote session lifetime expires (client half of #983) #985
- أُنجز Remote session lifetime (#648) refuses HALT too: a keel serve --external-host console can't halt after 12h until restarted #983
- أُنجز Stale backticked code references outside keel/web (engine._assemble_cts_context, backtest._closed_trade, simulate._slippage_for_products) #982
- أُنجز keel serve: request handler has no socket timeout; a refused POST that declares a body it never sends holds a thread forever #981
- أُنجز promotion: check_floors' blocking reasons print win_rate 0.0 / rr_r 0 where the sample has no trades or no wins #980
- أُنجز insights: an all-wins profit factor reads "—" (unknown) on Rules but "Infinity" in the CLI #979
- أُنجز PR Test log isolation, stale references, DCA stop distance, manifest name refusal (#964 #967 #973 #974) #978
- أُنجز PR Halt and keel serve hardening: drain every POST, HALT on a failed Pulse, serve keeps --external-host (#955, #958, #971) #977
- أُنجز Console reads 'keel isn't running' after another process closes the WAL database last (setup.inspect mode=ro) #976
- أُنجز PR insights: one track record per rule; empty side reads unknown (#962, #965) #975
- أُنجز scripts/rule_manifest.py apply stores a "name" param; a non-DCA rule named "dca" would read "no stop by design" #974
- أُنجز keel positions: attributed DCA tranches show a stop distance measured against the stop=0 sentinel #973
- أُنجز PR console: Holdings per rule row; DCA tranches read "no stop by design" (#960, #961) #972
- أُنجز keel serve drops --external-host after binding: remote Host refused, session lifetime and release locality check hollow #971
- أُنجز PR console: HALT gets its own token; the release token is served nowhere (#968, #969) #970
- و18 أخرى على GitHub →
-
v0.14.0 shakedown
What running v0.14.0 on the deployment turned up: the MCP un-migrated guard (#751), two console bugs found testing it (#754, #755), and the launchd console daemons plus keel open (#756). Closed issues only — this is a record of the shakedown, not a plan.
- أُنجز [ops] Serve every deployment from one command, surviving reboot and crash — and the origin problem behind a live/paper switcher #756
- أُنجز [web] The mode badge's db/config identity is a hover tooltip, so it is unreachable on touch — the mobile wedge's target device #755
- أُنجز [web] Navigating shows the previous view's figures under the new view's nav highlight — the loading signal is assistive-only #754
- أُنجز keel mcp's doctor tool raises on an un-migrated database, where the audit chain reports and continues #751
-
The honest cockpit (dashboard)
The Alpaca-audit dashboard pass. Sprint 1: equity series, orders, positions, balances. Sprint 2: activity timeline, session identity, journal. Sprint 3: cancel asymmetry, inverted plans page. Research Hub runs in parallel. Read-only unless noted — nothing here waits on #648; the ceremony card stays in Phase B.
- أُنجز [engine] Append-only SHA-256 hash chaining for orders, transactions and attestations #721
- أُنجز [engine] Persist the per-currency settled/available/total balance pair into the cycle snapshot #719
- أُنجز [engine] Record an attestation window: attest_due_ts on asset_attestations and instrument_attestations #718
- أُنجز [engine] Schema v20: persist quote_provenance and client_order_id on orders, at placement #715
- أُنجز [web] Research Hub /research: trials ledger, evidence matrix, gauntlet, slippage universe #708
- أُنجز [web+cli] keel orders cancel: the cancel asymmetry — entries one-click, exits typed #707
- أُنجز [web] Plans page, inverted: a manifesto of zero-cost permanence instead of a paywall matrix #706
- أُنجز [engine] Wire the discretionary journal: repo methods, CLI entry (human attestation), web read view #705
- أُنجز [web] Session identity: profile · mode · equity-state switcher chip and a no-CTA paper banner #704
- أُنجز [web] Activity: a unified timeline (cycles · fills · flows · attestations) with audit-grade CSV export #703
- أُنجز [web] Balances view: settled vs total cash, per-asset, as-of — never a buying-power CTA #702
- أُنجز [web] Positions view: per-tranche MTM, stop distance, bracket status, freshness and attestation chips #701
- أُنجز [web] Orders view: the per-order honesty record — expected vs actual fill, fee as paid, provenance #700
- أُنجز [engine] equity_points: a mode-partitioned mark-to-market equity time series (schema v16) #698
-
Competitive parity — validation & reach
Gaps against Freqtrade 2026.7, Hummingbot v2.16.0 and Jesse 3.0.7, ranked. Organising principle: every competitor's validation tooling is a diagnostic the user may ignore; keel's promotion gate refuses. Adopt their validation EVIDENCE as gate inputs rather than importing their features. Design boundaries (shorting, leverage, futures, market making, arbitrage, ML, market-data-driven pair selection, hyperopt) are recorded in the PRD as explicit non-goals. See docs/superpowers/specs/2026-08-20-competitive-gap-analysis-prd.md
- أُنجز Record the monetisation decision and its trigger — Jesse published theirs, keel should publish its 'not now' #603
- أُنجز `keel research`: thirteen evidence modules with no front door #601
- أُنجز A read-only MCP server for research assistants — the #453 capabilities check proves it cannot trade #477
- أُنجز Optuna parameter study, research-side only — candidates for the gauntlet, never auto-tuned lives #476
- أُنجز Rule significance testing — is a family's edge distinguishable from zero at the fee actually paid? #475
- أُنجز C7 — Rules are not pluggable, though brokers are #447
- أُنجز C6 — Partial fills are not tracked as a distinct state #446
- أُنجز C2 — A reusable walk-forward validator #445
- أُنجز C4 — Notifications beyond a CRITICAL-only webhook #444
- أُنجز C5 — keel doctor: one command that answers 'is this deployment actually working' #443
- أُنجز C3 — trail_stop_atr, roll_to_break_even and scale_out are implemented, tested, and never called #442
- أُنجز C1b — Monte Carlo and candle-bootstrap resampling: is the equity curve an outlier? #441
- أُنجز C1a — Lookahead and recursive bias detection #440
-
Phase 13 — Binance (keel-broker-binance)
A fifth venue, and the first added for a REASON the repo already states rather than for reach. README: "no shipped rule family is net-positive at the taker fee actually paid on this venue — cost is the binding constraint, and the viable parameter/fee intersection is empty under production-faithful execution." config.live.yaml carries taker_pct: 0.012 — 1.2%, Coinbase's published rate for a sub-$1k-30d-volume account. Binance spot is 0.100% at VIP 0 (verified against its published schedule). That is 12x, applied directly to the one constraint the project says is binding. Two gates come BEFORE any code, and neither is an adapter problem: which Binance (binance.com restricts US persons; Binance.US is a different entity, API and listing set), and whether USDT becomes a settlement currency (Binance is USDT-denominated; keel's screen deliberately excludes *-USDT today). The Phase A/B/C shape follows Phase 12's.
-
Phase 11 — Evidence expansion & operational guardrails
Phase 11 — Evidence expansion & operational guardrails. DONE: #349 (fetch honors config granularities, shipped in 0.9.1), #351 (universe 8→19 behind a measured 15-minute health screen; 19 hourly rules at paper; kill switch opened by the operator 2026-08-18; first cycle verified). REMAINING: #350 spread-gate rail (live-path half of the Tier-2 guardrail — ship before any live resumption), #352 pullback hourly-backtest perf regression, #353 n=100 forward-evidence review (accruing at ~940 signals/yr pooled; review scheduled 2026-09-30 — the milestone's due date). Progress board: https://github.com/orgs/CodeGateSoftware/projects/13
- أُنجز The 2026-09-30 n=100 pooled review is underpowered: n_eff is about 39, and it can only detect a 20-point edge #427
- أُنجز Analyze Dr. Lahlou's speculation-risk scholarship; cite as method support in fiqh-basis #376
- أُنجز Money-management and fiqh source review — findings and recommendations #365
- أُنجز n=100 forward-evidence review of paper-hourly (~2026-09-30) — the operator's degradation-metric milestone #353
- أُنجز PullbackContinuation hourly backtest is pathologically slow (38+ CPU-minutes, 5-year window) #352
- أُنجز Expand the paper-hourly universe 8→19 — gated on a measured 15-minute data-health screen #351
- أُنجز A routing-time maximum-spread gate — refuse entries when the live book is too wide #350
- أُنجز keel fetch ignores config.market_data.granularities — cache warm misses the FIFTEEN_MINUTE confirmation series #349
-
v0.11 — Ship the browser, the app, and WAL
Ship what main already holds: the browser surface, the macOS app, keychain secrets, background market data, browser attest/promote, and WAL — 25 commits past v0.10.0. First step of the v0.11+ plan: deepen the moat (auditability, the gauntlet, compliance) while attacking the real bottlenecks — statistical throughput and fee economics.
-
Reach & surfacing (deferred)
Work whose value depends on having an audience: MCP surfacing, the site AI page, homepage claims. Reopen when keel has real users — the same trigger ADR 0004 will record for monetisation: users, not revenue. Desktop-signing activation (the #438 Option D decision) shares this trigger: stay unsigned until a real user hits the wall.
-
Web UI — a zero-dependency, view-source console
Replace render.py's server-side HTML with a JSON API plus plain ES modules. No framework, no build step, no third-party JavaScript. Spec: docs/superpowers/specs/2026-08-23-web-ui-rewrite-design.md
- أُنجز The chart draws but cannot be read: cursor legend, trade hover, save as image #602
- أُنجز Delete the curses TUI — after parity, never before #541
- أُنجز Delete render.py's HTML generation and the HTML routes #540
- أُنجز Documentation deep links to keeltrading.com — and the empty glossary every install ships #539
- أُنجز PWA: manifest, icons, and a service worker that never caches /api/* #538
- أُنجز The remaining six views, SVG charts, and live updates over EventSource #537
- أُنجز Client shell: router, status view, responsive layout, accessibility baseline #536
- أُنجز Static asset serving and the full security header set #535
- أُنجز JSON API over the existing reports, with server-side sort and /api/config #534
- أُنجز The serialisation contract: money as strings, values presentation-ready #533
- أُنجز Palette: profit and loss are the same brightness, and inputs have no visible border #532
-
Strategy-API expressiveness (Jesse comparison)
Outcome of the 2026-08-23 comparison against the Jesse framework's strategy API. Scope is deliberately narrow: adopt the declared parameter space (which makes keel's own trials budget derivable rather than hand-recorded), document the fill-model hazard for externally-sourced strategies, and explicitly decline to port signal families — keel is cost-bound, not signal-bound. The comparison independently re-derived #333/#447/#502, which are corroborated rather than extended.
-
Desktop distribution — keel for non-technical users
A first-time user downloads one file, installs, and reaches a working keel without typing a command. Blocked on four architectural properties before any packaging step is meaningful: CWD-relative state, the un-overridable TTY gate, curses-on-Windows, and a first-run ceremony that includes decisions no installer can make. See the PRD: docs/superpowers/specs/2026-08-20-desktop-distribution-prd.md
- أُنجز A curl | bash installer that bootstraps the wheels — the no-warning path, auditable line by line #479
- أُنجز D6 — Decide the update path for a packaged install #439
- أُنجز D5 — Package and sign macOS/Windows artifacts in the release workflow #438
- أُنجز D4 — First-run wizard that presents the ceremony rather than skipping it #437
- أُنجز D3 — A GUI human gate, architecturally distinct from _is_interactive #436
- أُنجز D2 — Local web UI over the existing service layer #435
- أُنجز D1 — Resolve state to an OS app-data directory, keeping CWD as an explicit override #434
-
Phase 14 — Self-update: the console keeps the deployment current
CLOSED 2026-08-19 — #415 delivered in PR #417: the in-console self-updater. One service (keel/commands/update.py), two front-ends (keel update [--check] and the TUI Account menu). The release procedure in code: snapshot-consistent DB backups before download, the four production wheels by path, per-DB migrate, keel-versions verify before cleanup, superseded wheels removed only on verified success, backups never deleted, typed gate, verbatim-argv relaunch via execv. The adversarial review caught two blockers pre-merge (refusal false-positive on every real deployment; relaunch argv mangling the wrappers' flag order) plus torn-backup and lying-failure-text majors — all fixed red-first. Bootstrap note: the updater itself rides the next release cut; the FIRST update to any deployment is still the manual procedure.
-
Phase 13 — TUI: the operator console
CLOSED 2026-08-19 — all seven slices delivered and merged: C1 #387 (service extraction — the foundation; cli.py 3000→1434 lines, parity+isolation pins), C2 #388 (console shell, guarded profile switching, the session banner with the MarketSchedule port extension), C3 #389 (compliance menu, the scout-results admission handler, the Shariah-in-force browser with pinned honesty lines), C4 #390 (the strategy console — zero-backtest ledger, ARMED simulate, param help from PARAM_DOCS — and the research readers), C5 #391 (trading + data menus, every typed contract the CLI's own, curses-suspended prompting), C7 #394 (brokers service + CLI + Venues browser; the help & glossary system), C6 #392 (account menu, the thinness pin, the ceremony audit with coverage teeth, the runbook's console section). Independent final review: goal_met — O2-O11 verified at the code level; 3651 tests passing; no schema changes (deployments need only the next release cut). Every slice ran the full TDD → adversarial-review → fix → merge cycle; the reviews earned their keep (a console-freezing ledger blocker, three false glossary claims, a broken-adapter crash, and a blind-typed prompt were all caught and fixed pre-merge).
- أُنجز C7: venues/brokers visibility (service + CLI + TUI browser) and the newbie help & glossary system #394
- أُنجز C6: safety & polish pass — typed-confirmation adversarial review, keybinds, runbook TUI section #392
- أُنجز C5: trading + data menus — cycles, fetch surfaces, typed contracts intact #391
- أُنجز C4: rules menu + research readers (experiments, docs, trials ledger) #390
- أُنجز C3: compliance menu + the scout-results admission handler #389
- أُنجز C2: console shell — menu/sub-menu framework + profile switching (4 deployments) #388
- أُنجز C1: service-extraction audit — make every CLI operation callable as a service #387
-
Phase 10 — Evidence pipeline: cadence, pooling & measurement
Born from the 2026-08-15 status review's central complaint: at 1.19–3.20 trades per asset-year, min_trades=100 takes 31–84 years — the promotion gate is arithmetically unreachable. The fix is not more trades (the hourly corpus already measures more-trades and it is net-negative); it is making the evidence collectable and admissible: hourly-cadence paper, cross-sectional sample pooling with a diversity floor, the DCA ablation, and the re-measurement under Phase 9's honest cost model.
- أُنجز Rail-17 withdrawal attestation cadence — the 7-day TTL needs a visible refresh habit #340
- أُنجز Re-measure under the honest cost model: simulate re-run, DCA dip ablation, paper DCA re-enabled #339
- أُنجز Pool min_trades across same-parameter rules, with a cross-sectional diversity floor #338
- أُنجز An hourly-cadence paper profile — evidence at a collectable rate #337
-
Phase 9 — Execution & backtest fidelity
Make the simulator and the live executor agree with reality. Two defects here already voided every performance figure in the project once (#254 pending setups never expiring, #257 fills at a price live never waits for); the two open issues are the remaining known divergences between what a rule computes, what the backtest models, and what the venue actually does.
- أُنجز The live executor discards a rule's conditional entry price and routes a market order regardless #260
- أُنجز slippage is one global 5bp constant applied from BTC to TON #259
- أُنجز The simulator fills at a price live never waits for: entries are market orders in production, resting orders in backtest #257
- أُنجز backtest(): a pending setup never expires, silently freezing a strategy for the rest of the series #254
-
Phase 8 — Open source: scholarly grounding & launch
What converts 'someone's trading bot' into something a Muslim developer can trust: the fiqh basis written down, a scholarly review path, Arabic entry point, then announce — in that order, never before.
-
Phase 7 — Open source: contributor readiness
Make contributing possible for someone who is not the author. README written for a stranger, the documentation standard stated explicitly, the toolchain floor resolved, and a real on-ramp of shallow issues.
- أُنجز Enable Discussions with a Compliance & classification category #287
- أُنجز Create a real good-first-issue on-ramp (8-12 shallow issues) #286
- أُنجز Add issue and PR templates, including a compliance-question route #285
- أُنجز Add CODE_OF_CONDUCT.md with a stance on religious disagreement #284
- أُنجز Decide the Python floor: justify >=3.14.4 or relax it #283
- أُنجز Write CONTRIBUTING.md, including the documentation standard #282
- أُنجز Rewrite README for a newcomer, leading with the compliance engine #281
-
Phase 6 — Open source: licence & discoverability
BLOCKING. The repo is public but legally all-rights-reserved: no LICENSE, no description, no topics. Nobody can contribute, and nobody can find it. Until this closes, external PRs must not be accepted — a contributor has no rights to grant.
- أُنجز State the governance boundary: keel enforces rulings, it does not issue them #280
- أُنجز Add SECURITY.md and a private vulnerability reporting channel #279
- أُنجز Set the repo description and topics so the project is discoverable #278
- أُنجز Add a LICENSE — the repo is public but legally all-rights-reserved #277
-
Phase 4 — Autonomy, money mgmt, insights
Bypass mode + smooth-ratio money management + insights + journaling.
-
Phase 3 — Execution, rails, agent loop (confirm)
Executor + 12 hard rails + scheduled agent loop in confirm mode. First live-capable wave.
- أُنجز P3 Task 9: CLI #48
- أُنجز P3 Task 8: Agent loop (confirm mode) #47
- أُنجز P3 Task 7: Dangerous-action passphrase gate #46
- أُنجز P3 Task 6: Encrypted secrets vault #45
- أُنجز P3 Task 5: cb_client place_order (live) #44
- أُنجز P3 Task 4: Executor #43
- أُنجز P3 Task 3: Hard rails (guards) #42
- أُنجز P3 Task 2: Position sizing #41
- أُنجز P3 Task 1: Repository API + shared stats helper #40
-
Phase 2 — Rules, CTS engine, backtest, paper gate
Rule library + CTS confluence scoring + backtest + paper-trade + promotion/demotion. Nothing live.
- أُنجز P2 Task 9: Promotion / demotion lifecycle #30
- أُنجز P2 Task 8: Paper trader #29
- أُنجز P2 Task 7: Evaluation engine #28
- أُنجز P2 Task 6: Backtester (intrabar, no-overlap, MFE/MAE) #27
- أُنجز P2 Task 5: Rule — DCA / dip-buy backbone #26
- أُنجز P2 Task 4: Rule — RSI mean-reversion #25
- أُنجز P2 Task 3: Rule — pullback-continuation family #24
- أُنجز P2 Task 2: CTS confluence scorer #23
- أُنجز P2 Task 1: Strategy interfaces & shared types #22
-
Phase 1 — Offline foundation
DB + CSV import + P&L + analysis primitives + market feed. Fully offline, unit-tested, no live money.
- أُنجز Task 10: Market feed #10
- أُنجز Task 9: P&L (FIFO) #9
- أُنجز Task 8: CSV import #8
- أُنجز Task 7: Coinbase client wrapper #7
- أُنجز Task 6: Indicators (EMA/RSI/MACD/ATR/Fib/deceleration) #6
- أُنجز Task 5: Regime (condition & phase) #5
- أُنجز Task 4: Levels (support/resistance) #4
- أُنجز Task 3: Candlestick primitives #3
- أُنجز Task 2: SQLite schema & repository #2
- أُنجز Task 1: Project scaffolding, config & shared types #1
-
Account-model reconciliation + tier/fee analysis
Fix the sim account so it can trade (clamp sizing to real constraints, DCA sleeve, volume=buys+sells), then model Coinbase One tiers (Basic $500/Preferred $10k/Premium unlimited free volume) within-cap and over-cap with real fees (1.20% taker <$1k vol) + subscription costs -> net-P&L matrix. Live executor untouched (separate safety follow-up).
-
Engine validation & trade simulation
5yr historical trade simulation of the deterministic engine: edge test + realistic $500/mo account, risk-adjusted vs DCA benchmark, GO-LIVE/TRAIN-MORE verdict + gap-analysis backlog. Spec docs/superpowers/specs/2026-07-17-engine-validation-simulation-design.md
- أُنجز Sim Task 9: HTML/SVG simulation artifact (additive) #71
- أُنجز Sim Task 8: keel simulate CLI #70
- أُنجز Sim Task 7: report, verdict & gap analysis (sim/report.py) #69
- أُنجز Sim Task 6: portfolio simulator (sim/portfolio_sim.py) #68
- أُنجز Sim Task 5: DCA benchmarks (sim/benchmark.py) #67
- أُنجز Sim Task 4: raise promotion floors to canonical proving-gate values #66
- أُنجز Sim Task 3: hand-rolled Decimal financial metrics (sim/metrics.py) #65
- أُنجز Sim Task 2: simulation account ledger + guards parity (sim/account.py) #64
- أُنجز Sim Task 1: paginated 5yr candle history fetch (data/history.py) #63
-
Safety hardening — USDC, allowance, bypass-arm
USDC-funding rail (no bank/ACH draw), monthly subscription-allowance rail, and bypass-arming hardening. Safety-critical, before any live use.
تُرجمت هذه الصفحة عن المراجعة الإنجليزية 2026-08-29.2.