df-pm-mm — Live operator console Mode B

Read-only tail + lifecycle controls for the running market maker. Devnet substrate today; the same surface serves Worm later with no UI change. Mode A · Mode S

Controls

Trip = halt future quoting (cancels on the next tick). Stop = stop the loop + cancel resting quotes now. Destructive actions ask for an inline confirm.

Runtime

Session ledger (cashflow + fees, NOT mark-to-market)

Live resting orders & last-computed targets

Live parameters (runtime-mutable; applied atomically next tick)

Only fields edited away from the last-rendered value are sent. A rejected patch mutates nothing; the server's reason is shown above. Successful changes repaint on the next poll. Base (ask-side) inventory is a boot-only deposit — not runtime-mutable.

Fair-value override

Pinning bypasses the oracle until you revert — explicit until cleared, no auto-revert. The server cannot map marketId → marketKey, so the key must be supplied here (it pre-fills once a pin exists).

Per-market pause

Pause cancels this market's quotes ONCE and rests nothing — a distinct, non-tripping halt (other markets keep quoting; no operator page). Manual orders are allowed while paused. On resume the bot reabsorbs or cancels any manual orders.

Live oracle reading (what the bot is quoting against — read-only)

Fair value over session (since boot; gaps = oracle unavailable / not queried)

In-process, tick-cadence history — lost on restart. The breakdown is rendered defensively: an oracle shape change shows what it recognizes and falls back to a raw-JSON view; it never blanks this card.

Manual order (limit-only; gated on paused-or-tripped)

Manual orders are only allowed while this market is PAUSED or the kill switch is TRIPPED. Pause the market (or trip) to enable these controls.

Manual orders bypass the MM risk caps (capital cap / quote size / base inventory) and are your own risk. On resume the bot reabsorbs (adopts as a side-quote) or cancels manual orders — you no longer control them after resume.

Event tail