Follow-up to the lazy order-req qualify: pre-qualify (and
cache) contracts for ALL already-open pps and orders during
`open_trade_dialog()` startup so live submissions NEVER pay
a first-request qualification delay; the warmup runs before
the order handler task starts so early reqs just buffer in
the ems IPC stream. Any brand-new mkt still lazily
qualifies on its first submission.
Deats,
- factor the `Client` lookup-table writes out of
`.symbols.get_mkt_info()` into a new `cache_contract()`
helper which now ALSO keys `_contracts` by `mkt.fqme`
(read by the fill-time pp-update path in
`emit_pp_update()`) alongside `mkt.bs_fqme` (read by
`Client.submit_limit()`); resolves the old "post-split
mktmap lookup" TODO.
- explicitly `cache_contract()` in
`handle_order_requests()` since the lifo-cache may
deliver a hit (body skipped) when another acct/client
already qualified the fqme.
- filter `None` entries (ambiguous contracts) from
`qualifyContractsAsync()` results in
`Client.find_contracts()` before any attr access + raise
a better "use a (more) venue-qualified fqme" error msg.
- relay ALL (non-cancel) errors from the aio method-relay
task to the `trio`-side caller instead of crashing the
whole proxy/dialog; critical post-`datad`-split where eg.
qualification failures are expected to be caught
per-request by order/warmup code.
- handle inline `('event', ...)` api-farm status msgs in
`MethodProxy._run_method()` at info-level instead of the
"UNKNOWN IB MSG" warning.
- only `log.setLevel()` in `open_trade_dialog()`;
attaching a handler via `get_console_log()` double-prints
every record since the daemon fixture already enables the
console handler on the parent subsys logger.
(this patch was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>