Pin qualified `tractor` and require `trio>=0.34.0`

Advance the `piker_pin` lock from `b64c89f0` to the published
`8fe574c1`, retaining the evaluated Trio 0.34.0 release. Require
Trio >=0.34.0 for the updated cancellation APIs. Restore the Git
source used before local editable evaluation; no environment sync
is included.

Record the human's overlapping charts, Gateway data reset and
close/reopen qualification. Keep the full Gateway restart string
error and Tractor teardown callback assertion explicit as separate
recovery limits. Offline lock validation resolves 126 packages;
this is not a fresh-install qualification claim.

Prompt-IO: ai/prompt-io/20261106T201746Z_495c0915_612dfc_prompt_io.md

(this patch was generated in some part by `codex` (`openai`))
wkt/land_flake_update
Gud Boi 2026-11-06 15:21:33 -05:00
parent 51795a4e07
commit cb5e81d443
5 changed files with 139 additions and 6 deletions

View File

@ -0,0 +1,71 @@
# 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.

View File

@ -0,0 +1,41 @@
---
created_at: 2026-11-06T20:17:46.622316+00:00
generated_by:
harness: codex
provider: OpenAI
git_ref: 495c0915
scope: config
substantive: true
raw_file: 20261106T201746Z_495c0915_612dfc_prompt_io.raw.md
---
## Prompt
The human requested a commit plan, then a fast-forward landing of
the #94 branch and PR updates. They agreed the temporary local
Tractor source must be replaced, published piker_pin themselves,
and reported "pushed it". They also supplied the manual recovery
results and full Gateway restart failure diagnostics.
## Response summary
Restore the Git Tractor source after local qualification and lock
its published piker_pin at 8fe574c1e447358dafd8ebf5ada3b0714c688f78.
Retain the evaluated Trio 0.34.0 lock and require Trio >=0.34.0.
Record the human's overlap, data-reset and reopen observations,
the narrow history extraction, and full-restart recovery limits.
Offline uv lock validation passed without an environment sync.
## Files changed
- `pyproject.toml`: Trio minimum; restore existing Tractor Git source.
- `uv.lock`: published Tractor OID and evaluated Trio 0.34.0.
- `ai/ib-recovery-qualification-20261106.md`: scoped evidence.
## Human edits
The human selected the bounded landing scope, performed live tests,
identified the more aggressive reset distinction, and published
the tested Tractor ref. The agent applied the metadata edits and
wrote the qualification record from those observations. No human
acceptance or task-state transitions are inferred by this record.

View File

@ -0,0 +1,21 @@
---
created_at: 2026-11-06T20:17:46.622316+00:00
generated_by:
harness: codex
provider: OpenAI
git_ref: 495c0915
diff_cmd: git diff HEAD~1..HEAD
---
> `git diff HEAD~1..HEAD -- pyproject.toml`
> `git diff HEAD~1..HEAD -- uv.lock`
> `git diff HEAD~1..HEAD -- ai/ib-recovery-qualification-20261106.md`
Restore the Git Tractor source after local qualification and lock
its published piker_pin at 8fe574c1e447358dafd8ebf5ada3b0714c688f78.
Retain the evaluated Trio 0.34.0 lock and require Trio >=0.34.0.
Record the human's overlap, data-reset and reopen observations,
the narrow history extraction, and full-restart recovery limits.
Offline uv lock validation passed without an environment sync.

View File

@ -61,7 +61,7 @@ dependencies = [
"trio-util >=0.7.0, <0.8.0",
"trio-websocket >=0.10.3, <0.11.0",
"typer >=0.9.0, <1.0.0",
"trio >=0.27",
"trio >=0.34.0",
"pendulum",
"httpx >=0.27.0, <0.28.0",
"cryptofeed >=2.4.0, <3.0.0",

10
uv.lock
View File

@ -991,7 +991,7 @@ requires-dist = [
{ name = "tomli-w", specifier = ">=1.0.0,<2.0.0" },
{ name = "tomlkit", git = "https://github.com/pikers/tomlkit.git?branch=piker_pin" },
{ name = "tractor", git = "https://github.com/goodboy/tractor.git?branch=piker_pin" },
{ name = "trio", specifier = ">=0.27" },
{ name = "trio", specifier = ">=0.34.0" },
{ name = "trio-typing", specifier = ">=0.10.0" },
{ name = "trio-util", specifier = ">=0.7.0,<0.8.0" },
{ name = "trio-websocket", specifier = ">=0.10.3,<0.11.0" },
@ -1671,7 +1671,7 @@ wheels = [
[[package]]
name = "tractor"
version = "0.1.0a6.dev0"
source = { git = "https://github.com/goodboy/tractor.git?branch=piker_pin#b64c89f05a9fc8ac2878551eb5eda36574ebef6a" }
source = { git = "https://github.com/goodboy/tractor.git?branch=piker_pin#8fe574c1e447358dafd8ebf5ada3b0714c688f78" }
dependencies = [
{ name = "bidict" },
{ name = "colorlog" },
@ -1700,7 +1700,7 @@ wheels = [
[[package]]
name = "trio"
version = "0.32.0"
version = "0.34.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "attrs" },
@ -1710,9 +1710,9 @@ dependencies = [
{ name = "sniffio" },
{ name = "sortedcontainers" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d8/ce/0041ddd9160aac0031bcf5ab786c7640d795c797e67c438e15cfedf815c8/trio-0.32.0.tar.gz", hash = "sha256:150f29ec923bcd51231e1d4c71c7006e65247d68759dd1c19af4ea815a25806b", size = 605323, upload-time = "2025-10-31T07:18:17.466Z" }
sdist = { url = "https://files.pythonhosted.org/packages/92/dc/a2d25ed73ad49cfd79bf18d262577c3731c98e382284e28d522f49a0df35/trio-0.34.0.tar.gz", hash = "sha256:63b9485408bdfdde544fced107045a8c0086cdc4bd0ef2f797b9e0dd111b964b", size = 607457, upload-time = "2026-08-11T00:33:42.198Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/41/bf/945d527ff706233636c73880b22c7c953f3faeb9d6c7e2e85bfbfd0134a0/trio-0.32.0-py3-none-any.whl", hash = "sha256:4ab65984ef8370b79a76659ec87aa3a30c5c7c83ff250b4de88c29a8ab6123c5", size = 512030, upload-time = "2025-10-31T07:18:15.885Z" },
{ url = "https://files.pythonhosted.org/packages/77/1f/555f1364bed52a92a864181962b77f1b15adadeacf23b86105324363e461/trio-0.34.0-py3-none-any.whl", hash = "sha256:6c7c9f49917694dcdcd5f67abd168df5599eca480d61f29854d17a61a75c2f05", size = 511840, upload-time = "2026-08-11T00:33:40.552Z" },
]
[[package]]