Jev trading bot (TypeSafe AI): does a Jev failure still place the order?
Trading and fraud gates read in source. "jev trading bot" was a Google suggestion (client=firefox) for the words "jev trading" when the pool checked on . Bing and DuckDuckGo offered "jev trader". "jev fraud", "jev fraud detection" and "jev finance" got no relevant suggestion on any endpoint checked, so "fraud" is kept out of the main heading. A suggestion shows that people search for something; it does not show how many. This page reads seven public projects at pinned commits: four trading bots and three fraud or payment-approval gates. For each it shows the default mode, what switches it to real orders, and whether an order or payment still goes ahead when Jev errors, gives a bad or unsure answer, has no key, or is skipped. The pool ran none of them: no bot, no exchange or payment call, no Jev call.
Of 4 Jev trading bots read in source, 2 can still place a new order when Jev errors; all 4 can trade without Jev. None of 3 fraud or payment gates moves money.
Picked from projects named in earlier pool research, two GitHub searches and this run's 24-hour scan; not a survey (how the seven were chosen). The counts describe these 7 projects at these commits only. None of the seven is confirmed as running with real money, and the page gives no trading advice.
What the seven projects add up to
One square per project: a filled square counts towards the number on the left
- Q QuantDinger
- A jev-trader
- B Jev Trade
- F btc-hft-jev
- C jev-fraud-shield
- D fraud-jev
- E expense-policy gate
Four trading bots
- Can place a new order on a Jev errorQuantDinger after an LLM fallback; btc-hft-jev through rules only. A and B send no new order but leave the resting order on the book2/4
- Q yes
- A no
- B no
- F yes
- Has a path that trades without Jevexits and strategy types; mock model with a wallet key; rules-only path4/4
- Q yes
- A yes
- B yes
- F yes
- Can place an order on a malformed answerQuantDinger after the LLM fallback; jev-trader as a buy2/4
- Q yes
- A yes
- B no
- F no
- Can place an order with no Jev keywith Jev selected; 2/4 stop or go dry; 1/4 not recorded1/4
- Q yes
- A not recorded
- B no
- F no
- Has no confidence thresholdbelow-threshold behaviour of the other 2 is in the table2/4
- Q no
- A yes
- B yes
- F no
- Starts in mock, paper, testnet or virtual modereal orders need an explicit setting4/4
- Q yes
- A yes
- B yes
- F yes
Three fraud or payment-approval gates
- Has a payment, authorisation or reimbursement call siteeach returns a dict, an HTTP JSON response or JSONL files0/3
- C no
- D no
- E no
- Reviews, steps up or aborts on a Jev error3/3
- C yes
- D yes
- E yes
- Has a malformed-answer path that approvesfraud-jev: a non-numeric
noulbecomes ALLOW1/3- C no
- D yes
- E no
- Counts
- Does not count
- Not recorded in the code read
Seven projects: does the failure reach the order or the payment?
Open a situation to highlight its column. Opening one closes the others. The last column says, for each situation, whether the failure still reaches an order or payment call site. Failure terms use the pool's shared vocabulary: fail-closed (stop, refuse or take the cautious outcome), fail-open (act anyway), fallback-<what> (a named substitute), advisory, no-decision; below a threshold: acts-anyway, held, no-threshold. Documented source at the commit shown, read 4 Oct 2026, 05:14–05:21 UTC
The Jev call failsHTTP error or timeout
2 of 4 bots can still place a new order. QuantDinger tries a configured LLM, then allows the order (error_allowed). btc-hft-jev reuses a judgment up to 60 s old, then falls back to rules only, which may quote. jev-trader and Jev Trade send no new order, but neither cancels the order already resting on the book. Timeouts: QuantDinger 8 s, Jev Trade 4,000 ms, btc-hft-jev 0.40 s; jev-trader sets none. All 3 gates take the cautious outcome: step-up, review with HTTP 500, or batch abort.
Malformed answerMissing or invalid fields
2 of 4 bots can still place an order: QuantDinger (LLM, then allow) and jev-trader, which turns any answer other than "sell" into a buy. Jev Trade cancels its resting quote. btc-hft-jev stops the run and cancels resting orders. Of the 3 gates, fraud-jev approves when noul is not a number (1/3); the other two step up or abort.
Below the thresholdLow confidence
QuantDinger: risk or execution confidence below 0.55 goes to the LLM, then the order is allowed; an insufficient answer never blocks. btc-hft-jev trades at half size below 0.50 and stands down when its quote environment is below 1.0. jev-trader and Jev Trade have no threshold (2/4). Gates: jev-fraud-shield steps up, the expense gate sends the claim to manual review, fraud-jev allows below its cuts.
No API keywith Jev selected
An order is still possible in 1 of 4 (QuantDinger: LLM if configured, else allow). Jev Trade refuses to start and btc-hft-jev switches to mock and dry run (2/4). For jev-trader this is not recorded (1/4): the key is read inside @ai-sdk/typesafe-ai, which was not read. Gates: jev-fraud-shield uses a local mock; fraud-jev returns HTTP 401; the expense gate refuses to run.
Ways around JevPaths that skip the Jev call
All 4 bots have a path that trades without Jev: QuantDinger's exits, grid, DCA and martingale strategies, its own credit denial, and the filter switched off; the mock model with a wallet key in jev-trader and Jev Trade; btc-hft-jev's rules-only path and cached judgments. Gates: jev-fraud-shield approves 0-flag and declines 3-or-more-flag transactions without Jev; fraud-jev sends OFAC destinations to review; the expense gate rejects on fixed rules and never approves without Jev.
| Project (commit) and what Jev decides | Default mode; what switches to real orders | Jev error or timeout | Malformed answer | Below threshold | No key | Bypass | Failure reaches the order or payment? |
|---|---|---|---|---|---|---|---|
QuantDinger (a5a9f4c)Trading platform, optional entry gate. Five Choice questions; blocks only on a risk or execution "block" or a confident two-sided directional conflict. Detail | Filter off; strategy orders go to a virtual account (signal). Real orders: execution_mode live plus exchange keys | fallback-LLM, then fail-openTimeout 8 s. ai_decision_filter.py L194–238 | fallback-LLM, then fail-openL437–468 | fallback-LLM, then acts-anywayMin confidence 0.55 (operator setting) L285–293; insufficient never blocks L305–309 | fallback-LLM, then fail-openReason ai_not_configured L156–175 | trades without JevExits; grid, DCA, martingale; QuantDinger credit denial; filter off |
|
jev-trader (b587759)Trading bot on Monad (Kuru). Jev picks the order side; the default model is a mock | MODEL=mock (config.ts L31); dry run if PRIVATE_KEY is unset or DRY_RUN=true (L13). Real orders: Monad mainnet with PRIVATE_KEY; Jev needs MODEL=jev | fail-closed for the new orderNo timeout set, maxRetries: 0 (model.ts L65; caught trader.ts L126). The resting order is not cancelled | fail-openAny choice other than "sell" becomes a buy (trader.ts L105); a missing answer object is fail-closed | no-thresholdNot applicable: probabilities are logged only | not recordedThe key is read by @ai-sdk/typesafe-ai, not by repo code | trades without JevMock model with PRIVATE_KEY set sends real orders; the position cap flips the side (L108) |
|
Jev Trade (a3f2f83)Quoting desk on Hyperliquid. Mock model and testnet by default | MODEL=mock; HL_TESTNET=true (config.ts L38); dry run without a wallet key (market.ts L53). Mainnet: HL_TESTNET=false + wallet key + MODEL=jev + Jev key | fail-closed for new ordersDeadline 4,000 ms (model.ts L314–324; trader.ts L93–101); a 402 pauses Jev for 30 s. The previous quote is not pulled | fallback-holdCancels the resting quote (model.ts L285–287) | no-thresholdNot applicable: no threshold in the code read | fail-closedassertJevCredentials refuses to start (config.ts L24–36) | trades without JevMock model with a wallet key places real orders on testnet, or on mainnet if switched |
|
btc-hft-jev (96f3541)Quoting loop on Alpaca. Jev's judgment and confidence set whether and how much it quotes. New in this run's 24-hour scan | Paper (Alpaca). Real orders need --live, JEV_LOOP_ALLOW_LIVE=i-understand-the-risk and a typed phrase (execution/alpaca.py L36–38, L92–109) | fallback-last judgment, then fallback-rules-onlyJudgment up to 60 s old, then rules only, which can quote (fail-open). Cap 0.40 s (loop.py L524, L554–578; policy.py L95–107). A 403 gateway error switches to mock and dry run (fail-closed) | fail-closedvalidate_answers raises; the run stops and resting orders are cancelled (battery.py L81–93; loop.py L753–767) | acts-anyway at half size; heldConfidence < 0.50 trades at half size (ladder.py L50–59); quote environment < 1.0 stands down | fallback-mockForced dry run, no orders (loop.py L274–278) | trades without JevRules-only path; a cached judgment is reused between throttled calls |
|
jev-fraud-shield (eeb4fc6)Runnable fraud demo on synthetic card transactions: approve, step-up or decline | Mock when TYPESAFE_API_KEY is absent (jev_client.py L31); synthetic transactions; no payment mode | fail-closedSTEP_UP (decision_engine.py L49, L208–213); no timeout in code; 2 retries | fail-closedSTEP_UP (jev_client.py L92–95) | heldSTEP_UP; author thresholds 0.7 / 1.3 (L53–56) | fallback-mockLocal mock fed simulated signals (L105, L143–193) | approves without Jev0 flags → APPROVE; 3 or more flags → DECLINE (decision_engine.py L200–205) |
demo.py prints it |
fraud-jev (aa33b97)Runnable Next.js demo: ALLOW or REVIEW for fictional payments | Demo; the key is pasted in the UI; fictional payments | fail-closedREVIEW + HTTP 500 (route.ts L119–129); maxDuration 60 s | conditional (counted fail-open: it can act)Missing object → REVIEW (fail-closed); non-numeric noul → ALLOW (fail-open) (fraud.ts L22–38) | acts-anywayALLOW below the 0.65 / 0.75 / 0.85 cuts (fraud.ts L23–38) | fail-closedHTTP 401 (route.ts L20–26) | reviews without JevOFAC destination → REVIEW (fraud.ts L31) |
|
Expense-policy gate (161c33b)Expense approval gate: approve or manual review after fixed checks. New in this run's 24-hour scan | Jev by default (config/expense-policy.json L5; cli.py L44); replay optional; no reimbursement step | fail-closedThe batch aborts before outputs; 30 s, no retries (jev_client.py L144; pipeline.py L40–58) | fail-closedThe batch aborts (jev_client.py L222–248) | heldmanual_review; thresholds in config/expense-policy.json L24–31 | fail-closedcli.py L46–49 | rejects without JevFixed rejects (currency, amount, receipt, duplicate, dates) skip Jev; no approval without Jev |
|
- fail-closed or held (a person or the host's own prompt decides)
- fail-open or acts-anyway; a "conditional" cell that can act is counted fail-open
- fallback-<what> (named in the cell)
- not recorded, not applicable or no-threshold (the cell says which)
Colours follow the shared legend on when Jev fails (changed ; this page used its own colours before). A fallback that can still place the order is blue with "then fail-open" in the cell. Bypass cells: red means the order or payment goes ahead without Jev; green means it is held, reviewed or rejected.
Last column: yes the failure still reaches an order call site; no it does not; conditional it can, depending on a fallback; not recorded. Line numbers refer to the file at the pinned commit (paths in sources). How to test these branches without a key is on testing without a key; status codes and retries are on errors and rate limits; how to choose a threshold is on confidence thresholds. To compare these rows with other use cases, see when Jev fails. One row per project is on the products ledger.
QuantDinger: where the gate sits before the order
QuantDinger is a trading platform with an optional Jev entry gate in backend_api_python/app/services/ai_decision_filter.py. The pool read it in the 28 Sep audit from moving main links. The file has since been rewritten: it is 743 lines at a5a9f4c, while the 28 Sep links pointed at lines up to L2279. Those earlier line links are stale. This page uses the a5a9f4c pins. The behaviour summarised on 28 Sep is confirmed at this commit. Documented read by the runner, 4 Oct 2026, 05:17–05:20 UTC
Three order call sites, each traced
The gate (AIDecisionFilter.evaluate()) is called at three places, each before the order is created. An allowed=False result stops the order at all three. An allowed=True result, including every failure path in the table, leads straight to order creation.
- Strategy v2 orders (
strategy_v2/live_execution.pyL233–273). The gate runs only whenexecution_modeisliveand the strategy hasai_decision_filterset. A rejection sets the intent toai_rejectedand returns beforeINSERT INTO pending_orders(L308). The pending-order worker then sends these rows "through exchange and broker clients" (pending_order_worker.pyL1–6). - Quick trade (
routes/quick_trade.pyL564–567, callingquick_trade_ai.pyL14–68). The rejection returns beforeplace_order_from_signalorclient.place_limit_order(L575–595). Opt-in per request. - Alpaca route (
routes/alpaca.pyL453–479). Returns beforeplace_limit_orderorplace_market_order(L492, L497). Opt-in per request. Alpaca is paper when the key starts withPK(L51, L72–75).
The 28 Sep claim that "rejected entries never reach the exchange" came from the README. It is now traced in source.
What the gate checks and what it lets through
- Off by defaultThe filter runs only if the strategy or request sets
ai_decision_filter(trading_executor.pyL1723;quick_trade_ai.pyL19). Strategy orders default toexecution_mode "signal"(L1763), which fills "the isolated virtual account". - Five questions, three ways to blockChoices on
data_quality,signal_alignment,market_regime,risk_checkandexecution_quality(L24–92). Only a risk "block", an execution "block", or both a signal conflict and an adverse regime at or above the minimum confidence reject the order (L299–309). - Unsure answers do not blockAn
insufficientanswer on any check does not block, anddata_qualityis never read by the allow expression (L305–309). Minimum confidence defaults to 0.55 and is an operator setting (L285, L517). - Errors end in "allow"On an exception the log says "Jev decision failed open" (L194–204); a configured LLM is tried (L206–223); if there is none, the order is allowed as
error_allowed(L225–238). TimeoutJEV_TIMEOUT_SECONDS: default 8 s, clamped to 1–30 s (L250, L516). - Paths that skip JevExits (actions outside
ENTRY_ACTIONS, L141–146); grid, DCA, martingale and layered martingale strategies (L147–150); QuantDinger's own credit check failing, which allows the order with no Jev call (L177–191). - Audit does not blockEach decision is written to
qd_ai_decisions. If the write fails, the log says "AI decision audit persistence skipped" and the order is not blocked (L622–700). No per-order human step was found.
What it sends to Jev: symbol, action, market and order type, quantity, reference price, notional, leverage, strategy type, signal reason and the strategy's context dict (L394–410), with no truncation in code. The repository has 17 tests for the gate, all mocked (tests/test_ai_decision_filter.py), including malformed answer → LLM and credit denial → order not blocked.
Not traced: the pending-order worker upgrades a queued signal row to live when the strategy is configured that way (pending_order_worker.py L1413–1420), while the strategy-path gate only runs for live requests. This may be another way past the gate. It was not followed end to end.
Fraud and payment-approval gates: real Jev calls, no money moved
All 3 gates have a real Jev call path. None of the 3 has a payment, authorisation or reimbursement call site, so for every situation in the table the answer to "does the failure reach the payment?" is no. Documented 4 Oct 2026
- jev-fraud-shield (
eeb4fc6)Runnable demo on synthetic card transactions. Rules approve a transaction with 0 flags and decline one with 3 or more without asking Jev. A Jev error, a malformed answer or a below-threshold answer all lead to STEP_UP. Without a key it uses a local mock. The result is a dict thatdemo.pyprints. - fraud-jev (
aa33b97)Runnable Next.js demo with fictional payments; the key is pasted in the UI. A Jev error returns REVIEW with HTTP 500; no key returns HTTP 401. A non-numericnoulreturns ALLOW, and scores below the 0.65 / 0.75 / 0.85 cuts are allowed. OFAC destinations go to REVIEW without Jev. The answer is JSON to the UI. - Expense-policy gate (
161c33b)Expense approval with Jev by default. Fixed rules reject on currency, amount, receipt, duplicates and dates without Jev; nothing is approved without Jev. A Jev error or a malformed answer aborts the batch; a below-threshold answer goes tomanual_review. Output is a JSONL decisions file; there is no reimbursement step.
Before you point a Jev trading bot at real money
- All 4 bots start in mock, paper, testnet or virtual mode (QuantDinger: filter off and a virtual account; jev-trader: mock; Jev Trade: mock and testnet; btc-hft-jev: paper). Each needs an explicit setting to send real orders (see the table). Documented
- In jev-trader and Jev Trade, "mock" means no Jev, not no trading. The mock model still sends real orders when a wallet key is set: on Monad mainnet in jev-trader, and on testnet (or mainnet if switched) in Jev Trade. Documented
- jev-trader turns any answer other than "sell" into a buy. Documented
trader.tsL105 - On a Jev error, jev-trader and Jev Trade place no new order, but the resting order stays on the book. Neither cancels it. Documented
- A valid typed answer is not a safe trade. In QuantDinger,
insufficientanswers on all five checks still allow the order; only a "block" or a two-sided directional conflict rejects it. Documentedai_decision_filter.pyL305–309 - Claims of real fills or returns are the creators' own. Jev Trade's creator (aowang-ai) claims fills on Hyperliquid from five wallets Reported recorded by the pool 25 Sep 2026; the public desk showed "Offline" with blank positions when checked on 26 and 27 Sep. A survey gist by drillan says "Dry-run/paper-by-default is the norm — real orders require explicitly configured keys" Reported drillan, 20 Sep 2026. The pool states no performance figure and gives no trading or investment advice.
- Order and account data leave your system. Read what data leaves your system before sending financial or personal data to Jev.
What is sent to Jev, and what is logged
- Sent: order fields and the strategy context (QuantDinger); market data (jev-trader); market data plus the open position, including liquidation price and unrealised profit and loss (Jev Trade, btc-hft-jev); cardholder free text cut to 200 characters (jev-fraud-shield); payer and beneficiary names and account data, fictional in the demo (fraud-jev); full receipt text (expense gate). See the data checklist.
- Logged: a failed audit write in QuantDinger does not block the order; jev-trader writes its log after the order is sent; a log failure in btc-hft-jev stops the later ticks, not the order already sent.
- People and stop switches: none of the 7 has a per-order human approval step in the code read. btc-hft-jev has a dashboard pause and stops at a 5% drawdown.
How the seven were chosen and read
Picked from projects named in earlier pool research, two GitHub searches and this run's 24-hour scan; not a survey. In detail: the two trading and two fraud repositories named in the pool's 28 Sep audience findings, QuantDinger from the 28 Sep audit, two GitHub repository searches at ("jev fraud": 15 results; "jev payment": 10 results), and two projects created in the 24 hours before this run and found in its scan (btc-hft-jev and the expense-policy gate). A search count is a count of indexed repositories, not of users. TradeRank, named earlier, was not found in the searches or in two Jev project lists (cobanov/awesome-jev @72ee9f4, everyinfra/jev-radar @41c2547).
Each project was pinned to one commit and read through raw files at that commit. The runner read QuantDinger (05:17–05:20 UTC). A helper agent read the other six (05:14–05:21 UTC); the runner spot-checked 9 lines in 5 of those repositories at the same commits at 05:21:48 UTC, and all matched. No account, key, exchange, broker, wallet, testnet or payment-provider call was made; no bot was run in any mode; nothing was installed. Nothing on this page is Tested.
What was not verified
- Any real order, fill, return or payment by any of the seven, and whether any copy of them runs with real money.
- jev-trader's no-key path: the key is read inside
@ai-sdk/typesafe-ai, which was not read. - QuantDinger's
signaltoliveupgrade in the pending-order worker as a way past the gate (possible, not traced end to end). - How QuantDinger's LLM fallback decides: its prompt was not read beyond the call.
- The contents of the expense gate's tests.
- The six projects read by the helper agent were spot-checked (9 lines), not re-read line by line.
- TradeRank (not found). Not read:
caiovicentino/jev-risk-check-provider(pre-payment verdicts; the next payment candidate),Jono717/jev-trader,gilesknap/jev-trader,buberlo/jev-trader. Read lightly:ndolinschi/cartshield(a real Jev call, heuristics without a key, no payment call).
Sources and check times (4 Oct 2026, UTC)
- R7-S50–S57: QuantDinger at a5a9f4c (commit 1 Oct 17:52; Apache-2.0), read 05:17–05:20, under
backend_api_python/:app/services/ai_decision_filter.pyL21–22, L24–92, L139–309, L394–410, L437–468, L516–517, L622–700;app/services/strategy_v2/live_execution.pyL233–273, L308;app/routes/quick_trade.pyL19–20, L564–595;app/routes/quick_trade_ai.pyL14–68;app/routes/alpaca.pyL51, L72–75, L453–497;app/services/trading_executor.pyL1723, L1763;app/services/pending_order_worker.pyL1–6, L1413–1420;tests/test_ai_decision_filter.py. - R7-S58: jev-trader at b587759 (commit 17 Sep; MIT):
src/config.tsL13, L31;src/model.tsL65;src/trader.tsL105, L108, L126;src/market.ts,src/server.ts. - R7-S59: Jev Trade at a3f2f83 (commit 21 Sep; licence NOASSERTION):
src/config.tsL24–38;src/model.tsL285–287, L314–324;src/trader.tsL93–101;src/market.tsL53;src/plan.ts,src/index.ts,src/sleeves.ts,src/server.ts. - R7-S60: btc-hft-jev at 96f3541 (commit 3 Oct 21:45; no licence):
jevloop/loop.pyL274–278, L524, L554–578, L753–767;jevloop/policy.pyL95–107;jevloop/battery.pyL81–93;jevloop/ladder.pyL50–59;execution/alpaca.pyL36–38, L92–109. - R7-S61: jev-fraud-shield at eeb4fc6 (commit 26 Sep; MIT):
jev_client.pyL31, L92–95, L105, L143–193;decision_engine.pyL49, L53–56, L200–213;demo.py. - R7-S62: fraud-jev at aa33b97 (commit 17 Sep; no licence):
src/lib/fraud.tsL22–38;src/app/api/analyze/jev/route.tsL20–26, L119–129. - R7-S63: Expense-policy gate at 161c33b (commit 3 Oct 07:23; MIT):
config/expense-policy.jsonL5, L24–31;src/jev_expense_gate/cli.pyL44–49;src/jev_expense_gate/jev_client.pyL144, L222–248;src/jev_expense_gate/pipeline.pyL40–58. - All seven read 05:14–05:21; helper-read rows spot-checked at 05:21:48.
- R7-S64: GitHub repository searches "jev fraud" (15 results) and "jev payment" (10 results), 05:15:49.
- R7-S65: drillan survey gist (gist, 20 Sep 2026), Reported.
- R7-S66:
ndolinschi/cartshield@59013c3src/lib/jev.ts(read lightly);cobanov/awesome-jev@72ee9f4andeveryinfra/jev-radar@41c2547READMEs (no TradeRank). - R7-S11: query wording, 05:21:29. Google suggest for "jev trading" offered "jev trading bot"; Bing (
api.bing.com/osjson.aspx) and DuckDuckGo (duckduckgo.com/ac) offered "jev trader"; YouTube offered "jev trading" and nothing else. "jev fraud", "jev fraud detection" and "jev finance" gave no relevant suggestion on any endpoint. - Jev Trade creator claim and desk status: pool checks of 25, 26 and 27 Sep 2026 (carried, not rechecked).