piker/ai/ib-recovery-qualification-2...

72 lines
3.3 KiB
Markdown

# IB recovery qualification, 2026-11-06
This records human-operated qualification of the bounded #94
landing on `wkt/land_ib_recovery`, starting from `495c0915` plus
the narrow history catch described below. It supplements the
historical evidence in `ai/ib-recovery-candidate.md`.
## Runtime and dependency source
The evaluated environment uses Python 3.13, Trio 0.34.0 and Tractor
`8fe574c1e447358dafd8ebf5ada3b0714c688f78`. Tractor was an editable
local checkout during evaluation. The human subsequently published
that exact commit as GitHub's `goodboy/tractor:piker_pin`; a read-only
remote query confirmed the published OID before restoring Piker's
Git source and recording the same OID in `uv.lock`.
Offline lock validation resolves 126 packages successfully. No
environment sync was performed. This validates the lock metadata;
it does not claim a fresh installation from the published source.
## Manual observations
The human operated Gateway, chart windows and paper orders. The
agent did not operate live services or the account.
- Same-feed overlap, close/reopen and paper order submit/cancel
worked after the existing order-dialog guard was imported.
- Different-feed overlap originally exposed a timed-out one-second
MNQ March 2027 gap query. PDB showed `timedout=True` and
`out is None`. Its uncaught `NoData` canceled sibling history and
quote tasks even though `pikerd` remained alive.
- After the narrow catch, the human reported the overlap journeys
working, then confirmed cases 5 and 6 with Ctrl+Alt+F: overlapping
live feeds survived the Gateway data reset; closing all charts
and reopening with `pikerd` left running restored live updates.
- Earlier Ctrl+Shift+R attempts left feeds live, but do not prove
that the intended Gateway data reset was triggered.
These are manual observations, not automated timing or latency
measurements. Ctrl+Alt+R was not qualified here; Piker's utility
labels it a connection reset.
## Narrow history backport
Only the `NoData`/`DataUnavailable` catch around `get_hist()` in
`maybe_fill_null_segments()` is copied from
`0846cbd4a4197e47415689cf5e9d146ba3174c32`, authored by
`goodboy <goodboy_foss@protonmail.com>`. The existing gap fallback
remains in place; this does not import broader history repair.
The new regression uses real null detection and checks that a
sibling in the same nursery still runs after either provider
exception. Both cases failed before the catch. With it, the two
focused history files passed: 17 tests. Earlier bounded-recovery
and Tractor qualification results remain separate evidence, not
fresh test runs of the final dependency commit tree.
## Remaining recovery limits
A full Gateway restart was triggered accidentally through its
auto-restart settings dialog. The disconnect delivered the string
`Peer closed connection.` to `deliver_trade_events()`. The string
branch then reached `err['reqid']`, raising `TypeError`; its `code`
local can also retain an earlier event's value. Full Gateway restart
recovery is outside this bounded landing.
The earlier history-failure teardown also exposed a separate
Tractor completion-callback assertion after `BrokenResourceError`.
The history catch does not establish that this callback race is
fixed. Broader history recovery and these disconnect paths remain
downstream work.