# COMMISSION: Q1 — measure the real BingX maker fee (cold-start pack for omp) **From**: Fable (integrator) · operator-ordered · 2026-07-14 **Why you**: PASS agents token-dead until the 22nd, codex until the 21st. You're up. **Scope**: ONE task. Narrow on purpose. Finish it before touching anything else. ## The task in one sentence Place ONE tiny post-only (GTX) limit order on BingX **VST (testnet)**, get it filled as maker, read back the fee the venue actually charged, and write the number down. ## Why it matters (so you know the stakes without needing more context) The Unified Execution Layer spec (`prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md` — read §0, §15 tier table, §17-Q1; skim the rest) plans to cut trading fees roughly in half by using maker orders. The taker fee is MEASURED: 5.016 bps over 1,455 live fills. The maker fee is an ASSUMPTION: 1 bp. A ~$91K–$231K savings case rests on that assumption. Your one fill replaces the assumption with a measurement. It is the highest value-per-effort task in the entire program right now. ## How (use what exists — do not build new machinery) 1. Work in `/mnt/dolphinng5_predict`. Python: `/home/dolphin/siloqy_env/bin/python3`. 2. The characterization harness ALREADY places GTX orders on VST: `prod/bingx/characterization.py` (see also `prod/bingx/execution.py`, and the methodology in `prod/docs/BingX_FILL_CHARACTERIZATION_AND_ADVANTAGES.md`). VST credentials/env come the same way that harness gets them — do not invent a credential path. 3. Symbol: BTCUSDT (tick 0.1, step/min qty 0.0001 — quantize BOTH before submit). Size: minimum viable (≈0.0001 BTC). Place a GTX BUY just below the best bid (it must REST, not cross — GTX cancels itself if it would cross; that's fine, retry a bit deeper). Wait for the market to fill it (VST BTC trades ~5/sec; if it doesn't fill in ~10 min, cancel, reprice nearer the touch, repeat). 4. When filled, read the fee from the venue: the fill/order record's commission fields (REST order query and/or the user-stream fill event). Compute fee_bps = commission_quote / notional_quote × 10000. Capture the RAW response. 5. CLEANUP (non-negotiable): cancel any open orders on the symbol; flatten any position with MARKET reduceOnly=true positionSide=BOTH; verify flat. The characterization doc's cleanup discipline applies verbatim. 6. Repeat for ONE more fill if cheap to do (n=2 beats n=1); do not run a campaign. ## Deliverable `prod/docs/BINGX_MAKER_FEE_MEASURED_20260714.md` containing: the measured fee_bps (per fill, with raw venue responses quoted), order ids, timestamps, symbol/size/px, and one sentence comparing to the 1 bp assumption and the 5.016 bps taker baseline. Commit it (stage YOUR file only — `git add `, never `git add .`). Then: `h5i msg send Fable ""` (exact-case handle: Fable). ## Hard rules - VST ONLY. If any env var smells like mainnet (`DOLPHIN_BINGX_ENV` must be VST, `ALLOW_MAINNET` must be 0), STOP and report. - Do NOT touch: any running process, `prod/clean_arch/**` runtime modules, BLUE, ClickHouse `dolphin.*`. Your writes: the doc + tiny VST orders, nothing else. - If anything is ambiguous, STOP and ask (h5i to Fable) rather than improvise. Unknown is never "probably fine".