FlintTrade Feature Inventory
This is the build-status inventory the project's roadmap calls for: every mission pillar and feature, categorised as (a) built & working, (b) built but untested or only partially wired, or (c) referenced but not built / blocked. It is a living document — update it in the same change that moves a feature between buckets.
v0.0.1 is not production ready. The native adapter code for the five
founder brokers (Dhan / Upstox / Kotak Neo / INDmoney / Groww) is present and
mock-tested. Dhan, Upstox, and Kotak Neo are the current connectable native set
(Kotak Neo for Connected (read) / API smoke on FT-MONDAY-002 — Live place stays
fail-closed; Neo has no sandbox). INDmoney is read-verified with a locally
verified fail-closed planner, but remains disabled until restart-time
regular/smart-parent cancellation can be resolved authoritatively and a
broker-atomic reduce-only close primitive plus funded/live-market order-safety
proof exist. Groww stays connectable=false and retains its remaining live
blockers. Groww's official growwapi SDK is pinned for attestation/reference
parity while the adapter keeps using FlintTrade's tested REST transport; the
latest key-secret probe proves login/account reads but still lacks broker-side
market-data/API permission, static IP, and order-safety evidence. Native HTTP
UX remains frozen (Task 9D / Task 7C.2); MSI static-IP host native read smoke is the in-process
read path, not a restored Setup → Brokers HTTP session.
INDmoney is the only REST-only native with no SDK pin; its dashboard token resets
at the daily 06:00 IST cycle. INDstocks' own FAQ advertises indstocks-sdk, but
PyPI and npm currently have no matching package, so the adapter stays REST-native
until a real SDK distribution can be pinned.
Broker SDK source/artifact mirrors can be refreshed into the gitignored
.local/sdk-audit/ cache with uv run python scripts/sync_broker_sdk_refs.py --fail-on-drift;
tracked runtime installation still comes only from uv.lock and brokers.lock.
Kotak Neo uses exact Git provenance: upstream main
9a37488d77dc96442ee2a90ef78462e688cf4856 is the runtime and v3.0.7
peeled to 53cccc45fe56a193b30ffce3c03c71c5c0378538 is the release baseline.
The runtime exposes kotakneoapi 3.0.8; release_version 3.0.7 remains the stable
compatibility baseline. Both retain the neo_api_client import
namespace; the old neo-api-client distribution is forbidden. Closed-market/
no-funds verification does not prove funded live order execution.
The 3.0.8 runtime update is verified offline only; the retained activation date
and earlier real-account read evidence remain historical, not new SDK proof.
Legend
| Mark | Meaning |
|---|---|
| ✅ | (a) Built & working — wired end-to-end and covered by tests |
| 🟡 | (b) Built but untested, partially wired, or honest-sample-only |
| ⛔ | (c) Referenced but not built, or externally blocked |
Independence
| Item | Status | Notes |
|---|---|---|
| Native-first backend, gateway contract, safety/gating layer | ✅ | Original work; not a fork |
Attribution (NOTICE, docs/REFERENCES.md, AGPL LICENSE) | ✅ | Adapted modules carry in-source Adapted from: headers |
| Independence statement in README + website | ✅ | docs/README.md "Independence & attribution" → site |
Brokers
| Item | Status | Notes |
|---|---|---|
| Smart routing suggestions | ✅ | Capability metadata + recommendation engine + Account-Manager UI |
| — Dhan: rolling-options history + documented L20 depth feed | 🟡 | Rolling-options history is encoded in routing capabilities; Dhan's L20 depth remains feed-only until FlintTrade wires a runtime depth snapshot bridge (market_depth_runtime_ready=false). |
| — Upstox: historical-data edge | ✅ | historical_max_lookback/candles capabilities |
| — Kotak Neo: low-cost execution metadata | ✅ | brokerage_free + low_cost_execution use-case |
| Native adapters (Dhan/Upstox/Kotak Neo/INDmoney/Groww): identity, capabilities, order + data surfaces | 🟡 | Adapter and mapping code is present and mock-tested. Dhan and Upstox are connectable after live verification and emergency-planner coverage. INDmoney's fail-closed planner is locally verified but it remains coming soon pending an authoritative restart-time regular/smart-parent discriminator, a broker-atomic reduce-only close primitive, and a funded/live-market order-safety proof. Kotak Neo is connectable for Connected (read) / API smoke on the exact v3 Git runtime; its async SFeed and order-feed lifecycle is wired and locally synthetic-tested, while the historical live evidence remains REST reads only. Live-account/market-hours feed, funded-order safety, Live catalogue promotion, and cross-platform proof remain outstanding; Live place stays fail-closed. Neo has no sandbox (never offer Neo Practice). Groww retains its documented live blockers. |
| Multiple brokers per account, per-broker rate limits | ✅ | BrokerRateLimiter + live-apply UI (Account Manager) |
AI Agent
| Item | Status | Notes |
|---|---|---|
| Connect to any model — cloud providers | ✅ | OpenAI/Anthropic/Gemini/Groq/Mistral/Cerebras/… via LLMProvider + LLMSection |
| Local models - managed Ollama, Hermes, custom endpoints | ✅ | Ollama runtime is installed on demand with a pinned hash and controlled from Settings; external endpoints remain available through generic providers |
| AI agent backends | ✅ | agent_backends registry + AI Backends widget — Claude Code (API/OAuth), Cerebras, Codex (streaming), Hermes/Antigravity (catalogued); replaced the OpenClaw bridge |
| Obsidian vault | ✅ | Read-only browser widget + agent vault context |
| Create strategies | ✅ | StrategyBuilder (legs / payoff / margin / Pine) — Lab "Options Builder" tab; loads templates from the StrategyTemplates widget via explicit strike offsets |
| Backtest strategies (single + portfolio) | ✅ | Lab Backtest + Portfolio tabs (132 runnable by name; 41 selectable in the Lab picker) |
| Optimise overnight + reports + suggestions | ✅ | OvernightOptimiser + report store + Lab Optimise section |
| Pick strategy per market regime | ✅ | regime_detector _REGIME_STRATEGY → RegimePanel "Suggested Strategy" |
Manual Trading Terminal
| Item | Status | Notes |
|---|---|---|
| Preset layouts (17) | ✅ | FlexLayout workspace presets |
| Options-scalper 4-chart layout | ✅ | Index+Futures (centre) / CE+PE (sides) / option chain — per-panel pinned charts; tested |
Trading + dashboard widgets (71 registered; see widgetFactory.tsx for the count of record) | ✅ | Registered in widgetFactory, co-located tests |
| Operating modes: Practice and Live | ✅ | Connected (read) is a broker status, not a Mode. Example is sample data, not a Mode. The public web demo is Demo (example data). Practice places a simulated order. Widget catalogue count remains 71. The old sample-data URL is not a first-class installed screen. |
| Professional charts + indicators | ✅ | widgets/analysis/Chart/ on the lightweight-charts library |
| Practice mode | ✅ | Practice controls (capital + place simulated order) |
| Trade journal | Partial | TradeJournalTool reads recorded executions; authoritative native fill ingestion is not connected. Submission acknowledgements remain in the audit trail, not the fill journal. |
| Multiple built-in strategies | ✅ | 132 runnable by name (ALL_STRATEGIES + STRATEGY_REGISTRY + BUILTIN); 41 selectable in the Lab picker |
| Option-analysis tabs (GEX / IV-smile / max-pain / OI-profile) | ✅ | Live option chains use strict exchange, expiry, row, Greek and lot-size provenance through the configured broker path; incomplete or contradictory inputs fail closed to a labelled sample/unavailable state |
| Analytics widgets (VWAP / multi-timeframe / correlation pairs / correlation matrix) | ✅ | History and analysis reads are scoped to the selected native account and mode; explicit source badges identify Sample/Example fallbacks. Native HTTP reads remain unavailable until cutover activation. |
| IV-smile-derived widgets (IV skew / Greeks heatmap) | ✅ | IV-smile analysis and shared Black–Scholes transforms use explicit source badges and loading/unavailable states. Native HTTP reads remain unavailable until cutover activation. |
| Vol-surface, straddle-PnL analysis | 🟡 | Honest sample only (need multi-expiry / candle source) |
Data & Infra
| Item | Status | Notes |
|---|---|---|
| Historical download + time-remaining + safety monitor | ✅ | HistoricalDownloadPanel (ETA, free-disk, refused/aborted) |
| Native tick capture to storage | 🟡 | Unavailable pending a native stream source. Retained local tick storage and processing remain available; an environment flag does not enable capture. |
| Daily DB optimise + tick retention | ✅ | Nightly cron (CHECKPOINT/ANALYZE + prune); scheduler started |
| Per-broker customisable API rate limits | ✅ | Config + live-apply UI |
| Live order-flow footprint | ✅ | Aggregator fed from the tick stream (Lee-Ready side classification); honest synthetic fallback |
| Latency observability (per-broker p50/p95/p99) | ✅ | In-memory LatencyTracker fed by the live order path → /api/v1/latency/stats → MonitoringSection LatencyPanel + ObservabilityDashboard; regression-tested |
| Gated-order-path latency benchmark | ✅ | Tripwire test measures gate_order → BrokerRouter overhead against a mocked broker (real measured ms, generous ceiling) |
| Persisted DuckDB latency store (histogram + slowest-N) | 🟡 | LatencyMonitor built + unit-tested, admin endpoints dev-only; not yet fed by the production order path (two-store dedup tracked in the maintainer's working plan) |
System Components
| Item | Status | Notes |
|---|---|---|
| Profile Manager (in unified settings, quick-settings + profile button) | ✅ | ProfileSection; both entry points tested |
| Notification System (central manager, drives action) | ✅ | NotificationCentre + dispatchers + remediation actions + e2e test |
| Unified Settings | ✅ | SettingsRoute, 19 sections, deep-linkable |
Automation & Multi-Account
| Item | Status | Notes |
|---|---|---|
| Automate pillar (webhooks / schedules / monitors / Telegram) | ✅ | /automate route → AutomateRoute (generic HMAC-signed custom webhooks, scheduler, kill-switch indicator), backed by the webhooks + automation packages |
| Native copy trading | Unavailable | Account metadata is retained; mirroring, risk execution and linking remain unavailable pending a native safety design. |
| Invest & Learn routes | ✅ | /invest (mutual funds / SIP / net worth) and /learn (guided learning) protected routes |
Known backlog (built-but-unreachable / referenced-not-built / blocked)
| Item | Status | Notes |
|---|---|---|
| SmartOrderRouter (liquidity-aware TWAP slicing) | ✅ | Wired end-to-end: POST /api/v1/orders/smart-route (background job + live polling) → every child order independently traverses SafetySystem → gate_order → BrokerRouter via GatedChildExecutor; "Smart Order" terminal widget; OFF by default (brokers.smart_routing.enabled), live-mode only |
| Analytics endpoints: VWAP bands / pairs / MTF | ✅ | Compute endpoints built + tested and now reached by their widgets — live intraday/daily bars via getHistory, honest sample fallback |
| Download-watchlist manager UI | ✅ | Settings → Data: list / add / remove the symbols the bulk downloader fetches (was previously API-only — fresh installs had no way to populate it) |
Historical option-chain (getHistoricalChain/getHistoricalExpiries) | ✅ | "Historical Chain" widget — archived expiries → grouped CE/PE chain; honest empty state |
| Position sizing (Fixed % / Kelly / ATR) | ✅ | PositionSizingWidget computes all three methods correctly client-side (no backend round-trip — pure calculator, keeps latency low). The calculatePositionSize API client is for external callers, not a gap |
| Stock / fundamentals screener | ✅ | StocksTab (Invest route) → useStockScan → /v1/stocks/scan; curated large-cap fundamentals (disclosed as a fixed point-in-time snapshot). The separate /screener/fundamental/* clients are a dead duplicate (no consumers) |
| Credential rotation (`rotation/status | schedule | rotate-now`) |
| Native-SDK order execution (R13/R14) | 🟡 | Dhan and Upstox SDK-backed native paths plus INDmoney, Kotak Neo, and Groww REST/native writes are mapped and gated. Kotak Neo is catalogue-connectable for Connected (read) / API smoke only (runtime kotakneoapi 3.0.8; release baseline 3.0.7); funded Live place stays fail-closed. INDmoney and Groww remain not connectable. INDmoney's fail-closed emergency planner is locally verified, but restart-time regular/smart-parent discrimination, a broker-atomic reduce-only close primitive, and funded/live-market order-safety proof remain. Groww now has approved-key login/account-read proof but still needs market-data/API permission, static-IP, and order-safety proof before promotion. Funded live order placement remains unproven until market/funds conditions allow a live broker write probe. |
| Overscoped / dead frontend clients | — | Admin user-CRUD (single-principal app → out of scope), QuestDB browser-REST, OTP pair — removal candidates |
Maintained as part of the usability campaign. When you build, wire, or test one of the 🟡 / ⛔ items, move it to ✅ here in the same change.