wkt/land_flake_update #94
Open
goodboy
wants to merge 39 commits from
wkt/land_flake_update into main
pull from: wkt/land_flake_update
merge into: pikers:main
pikers:wkt/land_binance_usdm_feed
pikers:wkt/land_ib_recovery
pikers:wkt/land_broadcast_consumers
pikers:wkt/land_ib_method_proxy
pikers:wkt/ib_downstream_pin_eval
pikers:wkt/federated_project_stores
pikers:wkt/live_chart_qtractor
pikers:main
pikers:trend_calc_on_jev
pikers:wkt/typed_clearing_protocol
pikers:wkt/sampler_tick_time_guard
pikers:wkt/ib_history_request_bounds
pikers:ib_connectivity_harden
pikers:wkt/ib_disconnect_integration
pikers:wkt/fsp_backfill_sync
pikers:moar_ai_skillz
pikers:wkt/replay_provider_e2e
pikers:wkt/typed_ems_messaging
pikers:wkt/fix_binance_usdm_feed
pikers:wkt/tractor_tagged_addrs_compat
pikers:chart_local_gapper
pikers:wkt/fix_broadcast_consumers
pikers:ib_methproxy_refinery
pikers:wkt/backfiller_deep_fixes
pikers:backfiller_deep_fixes
pikers:flake_update
pikers:datad_service
pikers:maddr_endpoints
pikers:py_codestyling
pikers:kraken_stale_ws_token
pikers:multihomed_w_multiaddrs
pikers:nested_order_mode_block
pikers:fix_kraken_account_alias_mismatch_reporting
pikers:repair_tests
pikers:ngi0_submission
pikers:claudy_writes_ruff_conf
pikers:axes_w_zoom_refinery
pikers:gap_annotator
pikers:service_mng_to_tractor
pikers:symcache_polishin
pikers:dpi-font-auto-calc_goodboy_refinery
pikers:shm_from_tractor
pikers:to_asyncio_api_update
pikers:dpi-font-auto-calc_goodboy_test
pikers:dpi-font-auto-calc
pikers:ib_async
pikers:macos_dnks_vibed_fixes
pikers:macos_support
pikers:symcache_null_cleaner
pikers:ib_async_CONT
pikers:macmini_testing
pikers:macos_hackarounds
pikers:ib_venue_closures
pikers:fix_tractor_logging
pikers:hist_backfill_fixes
pikers:refresh_annots
pikers:multiaddrs
pikers:tpt_closed_and_finally_footguns
pikers:tractor_struct_and_godw_mod
pikers:tpt_closed_and_finally_footguns_CONT
pikers:CONT_fix_tractor_logging
pikers:CONT2_hist_fixes
pikers:cont_hist_fixes
pikers:order_line_cancel_nowork_debugging
pikers:macos_fixed_with_readme
pikers:binance_nq_hotfix
pikers:pdbp_bump
pikers:macos_fixes_2025
pikers:add_visidata
pikers:how_to_show_ur_pp
pikers:ib_2025_updates
pikers:providers_sync
pikers:port_to_latest_tractor
pikers:decimal_prices_thru_ems
pikers:rando_data_subsys_styling
pikers:subsys_refinery
pikers:bump_polars
pikers:brokers_refinery
pikers:simpler_gitea_merge_template
pikers:gitea_merge_template
pikers:nixround2_n_sway_testing
pikers:alt_tpts_for_perf
pikers:binance_api_3.1
pikers:accounting_refinery
pikers:no_symcache_no_problem
pikers:wayland_nix_py313
pikers:dpi_font_autocalc_fomo_bits
pikers:qt_w_graceful_SIGINT
pikers:stop_is_eoc
pikers:mp_fomo_polish
pikers:dpi_scaling_round2
pikers:max_pain_storage
pikers:macos_fixes_with_readme_premain_BACKUP
pikers:testing_utils
pikers:max_pain_chart
pikers:max_pain_deribit
pikers:deribit_fix
pikers:gitea_feats
pikers:jsonrpc_err_in_rent
pikers:tsp_gaps
pikers:max_pain_chart_backup
pikers:subsys_refinery_BACKUP
pikers:max_pain_deribit_backup
pikers:add_ruff_linter
pikers:deribit_fix_backup
pikers:kucoin_and_binance_fix
pikers:uv_migration
pikers:kucoin_and_binance_BACKUP
pikers:go_httpx_no_unrelated_binance_stuff
pikers:go_httpx
pikers:go_httpx_orig_BACKUP
pikers:ib_refinements
pikers:fix_deribit_hist_queries_NEW
pikers:fix_deribit_hist_queries
pikers:prev_deribit_fix
pikers:nix_shell_env_fix
pikers:cherry_to_storage_pr
pikers:fix_deribit_hist_queries_BACKUP
pikers:kucoin_and_binance_fix_goodboyBACKUP
pikers:nix-headless-fix
pikers:go_httpx_binance
pikers:fix-binance-venues
pikers:pyqt6
pikers:distribute_dis
pikers:runtime_to_msgspec
pikers:nix-monkeys-fix
pikers:ib_py311_fixes
pikers:poetry2nix
pikers:account_tests
pikers:py311_ib_fix
pikers:master
pikers:basic_buy_bot
pikers:marketstore_disable_snappy
pikers:rekt_pps
pikers:py311
pikers:kucoin_backend
pikers:small_kucoin_fixes
pikers:pre_overruns_ctxcancelled
pikers:emit_clear_ticks_only_on_ts_change
pikers:binance_ws_ep_update
pikers:log_linearized_curve_overlays
pikers:xdotool_fixes
pikers:deribit_updates
pikers:storage_middleware_layer
pikers:service_subpkg
pikers:pps_precision_hotfixes
pikers:service_subpkg_backup
pikers:storage_cli
pikers:xdo_and_you
pikers:decimalization_take_2
pikers:backward_compat_trans_with_symbolinfo
pikers:explicit_write_pps_on_exit
pikers:backend_spec
pikers:paper_trade_improvements_rebase
pikers:loglevel_to_testpikerd
pikers:overlays_interaction_latency_tuning
pikers:kraken_deposits_fixes
pikers:l1_compaction
pikers:epoch_indexing_and_dataviz_layer
pikers:multichartz
pikers:axis_sticky_api
pikers:multi_symbol_input
pikers:update_qt_screen_info_script
pikers:fsps_and_flumes
pikers:epoch_index
pikers:pregraphics_formatters
pikers:multichartz_backup
pikers:samplerd_service
pikers:misc_brokerd_backend_repairs
pikers:pre_viz_calls
pikers:dark_clearing_improvements
pikers:dark_clearing_repairs
pikers:epoch_index_backup
pikers:agg_feedz
pikers:kraken_limits_fields
pikers:cz_post_ftx
pikers:kraken_pair_status
pikers:ib_contract_updates
pikers:pre_multifeed_hotfix
pikers:kraken_pair_updates
pikers:daemon_sockaddr_config
pikers:no_signal_pi_overlays
pikers:pre_multi_feedz
pikers:pg_exts_fork
pikers:ib_1m_hist
pikers:even_moar_kraken_order_fixes
pikers:ci_fix_tractor_testing
pikers:clears_table_events
pikers:offline_dark_clearing
pikers:multi_client_order_mgt
pikers:pin_tractor_main
pikers:history_view
pikers:tractor_core_port
pikers:kraken_fill_bugs
pikers:paper_clear_logics_fix
pikers:kraken_nameerr_fix
pikers:livenpaper
pikers:size_in_shm_token
pikers:deribit
pikers:asycvnc_pin_bump
pikers:live_n_paper
pikers:open_order_loading
pikers:doin_the_splits
pikers:dict_differ
pikers:msgpack_zombie
pikers:the_ems_flattening
pikers:kraken_ws_orders
pikers:kraken_userref_hackzin
pikers:pydantic_zombie
pikers:ib_pps_upgrade
pikers:multisympaper
pikers:ppu_history
pikers:basic_pp_audit
pikers:historical_breakeven_pp_price
pikers:ib_native_data_hack
pikers:pptables
pikers:ahab_you_bad_boi
pikers:fix_forex
pikers:fsp_shm_caching
pikers:paper_eng_msg_fixes
pikers:drop_pydantic
pikers:krakenwsbackup
pikers:dpbackup
pikers:null_last_quote_fix
pikers:ahab_hardkill
pikers:tractor_typed_msg_hackin
pikers:kraken_ledger_pps
pikers:ib_rt_pp_update_hotfix
pikers:notokeninwswrapper
pikers:pps_postmortem
pikers:lifo_pps_ib
pikers:310_plus
pikers:mxmn_from_m4
pikers:contain_mkts
pikers:slic_fix_v2
pikers:uppx_slice_fix
pikers:update_last_datums_in_view
pikers:ib_subpkg
pikers:flexxin
pikers:ib_checker_hackz
pikers:incremental_update_paths
pikers:ib_dedicated_data_client
pikers:dockerize_ib_gw
pikers:pre_flow
pikers:drop_pandas
pikers:no_ib_pps
pikers:trimeter_dep
pikers:l1_precision_fix
pikers:marketstore
pikers:no_orderid_in_error
pikers:incr_update_backup
pikers:big_data_lines
pikers:m4_corrections
pikers:offline_history_loading
pikers:drop_arrow_add_predulum
pikers:marketstore_backup
pikers:broker_bumpz
pikers:no_git_prot_w_pip
pikers:kraken_editorder
pikers:fqsns
pikers:kraken_cleaning
pikers:kraken_orders
pikers:only_draw_iv_for_ohlc
pikers:mkts_backup
pikers:pp_bar_fixes
pikers:async_hist_loading
pikers:kraken_gb
pikers:windows_fixes_yo
pikers:ib_mkt_closed
pikers:py3.10_support
pikers:gb_kraken_orders
pikers:dark_vlm
pikers:overlayed_dvlm
pikers:fsp_ui_mod
pikers:vlm_plotz
pikers:plotitem_overlays
pikers:misc_backend_fixes
pikers:dolla_vlm
pikers:fspd_cluster
pikers:misc_ib_updates
pikers:single_display_update_loop
pikers:basic_vlm_display
pikers:pane_sizing_fixes
pikers:tractor_clustering
pikers:msgpack_no_sets_allowed
pikers:tinas_unite
pikers:simpler_quote_throttle_logic
pikers:fast_step_curve
pikers:win_fixes
pikers:fsp_hotfixes
pikers:teardown_guesmost_via_cs
pikers:windows_testing_volume
pikers:fsp_drunken_alignment
pikers:vlm_plotz_backup
pikers:fsp_feeds
pikers:chart_mod_breakup
pikers:pause_feeds_on_sym_switch
pikers:brokers_config
pikers:ordermodepps_backup
pikers:readme_bump_zone
pikers:ci_on_forks
pikers:asyncify_input_modes
pikers:minimal_brokerd_trade_dialogues
pikers:wait_on_daemon_portals
pikers:backup_asyncify_input_modes
pikers:naive_feed_throttling
pikers:window_cuckery
pikers:msgspec_fixes
pikers:status_bar
pikers:ems_hotfixes
pikers:ems_to_bidir_streaming
pikers:web_utils
pikers:symbol_search
pikers:binance_syminfo_and_mintick
pikers:update_throttling
pikers:syseng_tweaks
pikers:ems_tweaks
pikers:py3.9
pikers:binance_aggtrades_and_ohlc_parsing
pikers:binance_backend
pikers:tractor_open_stream_from
pikers:feed_fixes
pikers:order_mode_finesse
pikers:cached_feeds
pikers:readme_bumpz
pikers:supervise
pikers:basic_orders
pikers:kraken_trades_data
pikers:basic_alerts
pikers:kraken_history
pikers:y_zoom
pikers:chart_trader
pikers:graphics_pixel_buffer
pikers:vwap_fsp
pikers:to_qpainterpath_and_beyond
pikers:tina_free_vwap
pikers:vwap_backup
pikers:bar_select
pikers:ib_backend
pikers:unleash_the_kraken
pikers:facepalm
pikers:marketstore_integration
pikers:its_happening
pikers:relicense_as_agplv3
pikers:questrade_candles
pikers:use_tractor_logging
pikers:questrade_conns
pikers:kivy_mainline_and_py3.8
39 Commits (main)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
cb5e81d443 |
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`)) |
|
|
|
51795a4e07 |
Contain provider failures during SHM gap repair
Partially backport only the `get_hist()` exception catch from |
|
|
|
495c091546 |
Guard `brokerd_msg` set in order-mode dialog loop
Use `msg.setdefault('brokerd_msg', msg)` instead of blind assignment and
log a warning when the field was already populated.
Specifically, this avoids a self-reference field recursion which causes
crashes when using `tractor.devx.pformat.ppfmt()`..
(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
(cherry picked from commit
|
|
|
|
2a826fba17 |
`.tsp._history`: drop orphaned backfill events
- let structured nursery joins own child-task completion
- stop empty provider frames before timestamp endpoint indexing
- cover provider exhaustion and empty frames with bounded tests
Prompt-IO: ai/prompt-io/opencode/20260722T001358Z_16f3cd6f_prompt_io.md
(this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`))
(cherry picked from commit
|
|
|
|
6575db6463 |
Adjust to `trio>=0.34.0` invalid `Event` truthy checks
(cherry picked from commit 63ae23aa4ff229eb89cd970da132e997570c0afb) |
|
|
|
3ec447a45a |
Document bounded IB recovery and downstream replay
Record exact keep/backout/import provenance for the #94 candidate, including the quote-cache lineage correction and the distinction between file-equivalent adapter deltas and partial source commits. Deats, - Preserve the original raw prompt record and add the human's later scope decisions, corrections and live-test contributions to its structured partner. - Record 38 prior unique offline passes and the known-red bridge callback-cleanliness case, without claiming clean teardown. - Record live QQQ backfill, reattachment and overlapping chart close/reopen results. Startup needed debugger continuation; the local breakpoint cleanup was applied after that run. - Retain the cached-client daemon shutdown failure as a human- accepted follow-up outside #94, with its exact propagation path. - Require disposable downstream rebase rehearsals before landing, preserving omitted SHM/storage fixes and local regressions. The commit package records exact per-boundary project checks. Its structural replay/preflight does not substitute for those checks, the prior live observations or rebase qualification. Prompt-IO: ai/prompt-io/opencode/20261022T212248Z_dc618229_ib_recovery_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-6-astra` (`openai`)) |
|
|
|
11aa2eeb1e |
.tsp: drop the single-null debugger stop
Avoid interactive startup pauses when `get_null_segs()` sees one
zero-time row. Remove the explicit breakpoint and its now-unused
`RuntimeError` handler, preserving the legacy `None` result.
LOCAL UX CLEANUP -- NOT the downstream null-grouping fix.
The related source below removes this branch as part of a much
larger grouping/deduplication rewrite. None of that algorithm,
its index validation or its oracle coverage is backported here.
Downstream replay,
Prefer the complete downstream implementation. Do not preserve
this legacy single-null early return against the later rewrite.
The small inline comment records that temporary discrepancy.
Related-downstream:
|
|
|
|
9dde7a9867 |
.clearing: backport owned dark quote subscriptions
Import the source-equivalent EMS code and its original wrapper
regression. `clear_dark_triggers()` owns a non-strict child from
`quote_stream.subscribe()` for the lifetime of its clearing loop,
instead of changing a shared receiver's private lag policy.
LOCAL ADDITION,
Add a second regression using the production clearing loop and a
real broadcaster. Deliver a tick to EMS and a sibling, cancel EMS,
and prove the sibling remains usable with strict lag policy.
No order trigger or live broker is involved in this test.
Downstream replay,
The EMS code has the source patch's stable patch ID. The test file
also contains the local real-broadcaster case, so the complete
commit is not patch-identical. Preserve that extra coverage when
reconciling an already-applied EMS delta.
Backport-of:
|
|
|
|
02bb193f87 |
.ib.feed: backport no-data request boundaries
PARTIAL BACKPORT -- IB adapter and six boundary cases only.
The source also fixes history-layer endpoint/filtering behavior;
those changes and its SHM/NativeDB regressions are NOT imported.
Import the exact `piker/brokers/ib/feed.py` delta. Complete HMDS
no-data replies at the requested date instead of silently walking
back a day. Wake the waiter and let `open_history_client()` turn
the internal empty sentinel into `NoData` or `DataUnavailable`.
Deats,
- Retain the original parametrized request-boundary test body and
its six cases, adding only its required module import.
- Add LOCAL real-bridge history recovery coverage after the reset
backport: production proxy/relay/reset tasks, replayed external
IB/VNC input, and a real farm event before retrying 1s/60s bars.
- Leave `request_end_dt` versus `oldest_shm_dt`, storage cutoff
filtering, `diff_history()` removal and full-bar retention
coverage to the downstream history-layer commit.
Downstream replay,
Retain those omitted changes even if the adapter hunks vanish.
Preserve the local real-bridge regression when reconciling tests.
The resulting adapter file matches the source byte-for-byte;
that equivalence does not apply to the whole source commit.
Partial-backport-of:
|
|
|
|
6f626a9c45 |
.ib.feed: backport bounded reset coordination
PARTIAL BACKPORT -- IB adapter and seven adapter regressions only.
The source commit also repairs startup gaps in `ShmArray`; this
patch does NOT deliver that complete history/storage fix.
Import the exact `piker/brokers/ib/feed.py` delta: serialize farm
resets, publish completion and result separately, keep failure
counters per request, bound IB cancellation retries, and complete
empty replies without leaving the parent waiting forever.
Deats,
- Extract seven existing cases into `tests/test_ib_history.py`.
Their function bodies match the source; the module header and
imports are reduced for this older landing tree.
- Omit `piker/tsp/_history.py`: inclusive endpoint handling, SHM
layout, final null-sweep ordering and synthetic gap boundaries.
- Omit the source's history-layer regressions, harness update and
historical prompt files. The source SHA retains that provenance.
Downstream replay,
Only the adapter hunks and these seven cases are already present.
Retain the omitted history/SHM changes and their regressions; do
NOT skip the whole source commit when its adapter delta is empty.
Partial-backport-of:
|
|
|
|
72d0bdad5e |
Back out cached IB quote ownership
Reverse the quote-owner code and mocked-cache test from the landing replay below. Keep its historical prompt records and restore the direct-owner `_quote_streams` implementation for #94. With the pinned `tractor`, the cached owner turns quote restart teardown into a normal bridge exit, then propagates its injected `TrioTaskExited` into the consumer and kills the broker actor. The evaluated downstream branch did not contain this cache patch. LOCAL DIVERGENCE, - This is a targeted backout, not a replacement broadcast design. - Add a real infected-actor quote restart regression, including a second RPC on the same actor and subscription/task cleanup. - Keep the strict callback-cleanliness case visibly red: actor survival does not establish clean asyncio completion callbacks. Downstream replay, Reintroducing the original cache patch requires qualifying its owner teardown with the matching `tractor` fix. Do not interpret this backout as rejecting lexical broadcast subscriptions or as proving arbitrary concurrent direct-owner callers are safe. Reverts-code-and-test: |
|
|
|
dc618229bd |
.data: isolate cached feed stream consumers
Keep provider root streams private to the cached `Feed` and give every `maybe_open_feed()` caller, including the first owner, a local subscription view with copied `Flume` descriptors. Also, - key cached resources by the normalized full symbol set and stream policy instead of only the first FQME. - subscribe each `Feed.open_multi_stream()` provider relay and wait for all relays to start before yielding the merged channel. - give each provider relay an independent send-channel clone so one provider EOC cannot terminate its siblings. - document `Feed.pause()` and `Feed.resume()` as shared remote-provider controls rather than caller-local cursor operations. - cover miss/hit ownership, multi-market provider mapping, relay fan-out, lexical teardown and cache-key separation. Prompt-IO: ai/prompt-io/opencode/20260813T202402Z_12b0d66e_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
635314c757 |
.ib.feed: cache quote channel contexts
Replace the manual `_quote_streams` raw-channel registry with a symbol-keyed `maybe_open_context()` resource whose lifetime extends to the final quote consumer. Give every `open_aio_quote_stream()` caller a lexical child from the cached `LinkedTaskChannel` broadcaster so concurrent users receive the same quotes and close independently. Prompt-IO: ai/prompt-io/opencode/20260813T230744Z_ddac3553_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
d1571ddfc7 |
Always re-raise in `maybe_spawn_daemon()` handler
Move bare `raise` outside the `if lock.owner` guard so the error propagates regardless of whether the stale-lock branch runs. Also add a blank-line separator in the crash log msg. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
7bef50b0a5 |
Fix IB `MethodProxy` response routing
`open_client_proxy()` broadcast its one-slot linked channel to an always-running status relay and an idle method receiver. Status traffic advanced only the relay, so the first lazy contract lookup for an uncached order raised `Lagged` before receiving its response. Give `relay_client_proxy_messages()` sole receive ownership. Route tagged responses from concurrent caller tasks into their per-`mid` slots while each proxy context retains its own channel and relay. Deats, - log stale responses with their original method name; - warn when unresolved-request metadata exceeds its bounded limit; - drop late responses after caller cancellation; - preserve the reconnect design note and message-case rationale; - accept clean channel EOF during proxy teardown; - cover idle status, concurrency, cancellation and EOF paths. Prompt-IO: ai/prompt-io/opencode/20260811T205826Z_06d5ea5d_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
e8e0730a50 |
.ib.api: req-id correlate `MethodProxy` calls
The (single, shared) relay chan has NO ordering guarantee
when a caller task is cancelled (eg. by a search-req
timeout) after sending its request but before consuming the
response: the "orphaned" response gets mis-delivered to the
next caller, off-by-one skewing every result thereafter!
Deats,
- tag each request with a `mid` from an `itertools.count()`
on the proxy and echo it back in both the result and
exception resps from `open_aio_client_method_relay()`.
- drop (w/ a warning) any stale resp whose `mid` doesn't
match the current caller's and keep waiting for ours.
- rewrite the resp-wait loop as a `match:` (resolving the
old "py3.10 syntax" TODO) incl. the prior inline
`('error', ...)`/`('event', ...)` relay cases.
(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>
|
|
|
|
4133f07340 |
Select `piker_pin` and keep `polars` below 2.0
Replace the address-unpacking branch selector with `piker_pin` and lock the published branch at b64c89f0. Verify the installed Git revision without a local-source `PYTHONPATH` override. Bound Polars below 2.0 and resolve polars/runtime 1.44.2, the latest non-yanked stable 1.x release, instead of taking a major upgrade as part of the Tractor landing. This resolves the universal lock where retaining the older 1.36 versions was rejected for a Windows target. The scoped install changed only Tractor; 14 offline logger/startup cases passed with the existing Polars 1.36 installation. A full sync and Polars 1.44.2 data-path qualification remain outstanding. Prompt-IO: ai/prompt-io/opencode/20261021T224421Z_507c75c6_piker_pin_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-6.1-sol` (`openai`)) |
|
|
|
507c75c669 |
Use `tractor`'s reviewed address-unpacking branch
Select `wkt/addr_unpacking` in `pyproject.toml` and lock `tractor` at `a966928dead4cbf369ad244834ce9dbe988ac8ca` in `uv.lock`. Keep the existing PR94 application/test tree as the landing base for the original downstream consumer fixes. Also, - resolve `setproctitle` 1.3.8 while retaining `polars` 1.36.0, - record the dependency selection and original-history previews with their Prompt-IO provenance. Prompt-IO: ai/prompt-io/20261010T232852Z_1fa45dfa_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-6.1-sol` (`openai`)) |
|
|
|
1fa45dfa98 |
Fix endpoint config and daemon startup from PR94 review
Keep the shipped `conf.toml` defaults TCP-only for this `tractor` pin, with an explicit single-transport note and commented UDS alternatives. Preserve repeated Click `--maddrs` options and treat a direct string as one endpoint. Deats, - Validate daemon bind requests against actual listeners, not registrar discovery endpoints; normalize tagged addresses and allow OS-assigned TCP ports. Explain registrar ownership and automatic client binding at the validation site. - Resolve explicit or inherited registrar addresses independently of other daemon kwargs, consuming overrides before forwarding them and keeping discovery and startup on the same registrar. - Default chart binding to `None` for absent or empty network config, and remove the unconditional Binance debugger pause. - Defer the prematurely cherry-picked `test_datad_spawn` until its service API lands. Add offline endpoint/startup regressions and a real distinct-registrar/daemon lifecycle check. Include the human-directed config and registrar/bind explanations and the direct prompt provenance pair from the review fix pass. Prompt-IO: ai/prompt-io/20261007T165453Z_bde2457b_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-6.1-sol` (`openai`)) |
|
|
|
bde2457bdd |
Bump `tractor` and `msgspec` for Python 3.13
- require Python 3.13 across package metadata and the lock - advance `tractor` from `e77198bb` to `piker_pin@0d95a9e6` - raise `msgspec` from 0.19.0 to 0.21.1 - lock current multi-address transport deps - retain `xonsh` 0.24.2 from the flake-update stack Prompt-IO: ai/prompt-io/opencode/20260901T230043Z_e91f41a6_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
1ba9bdbac0 |
Preserve exact `piker` logger namespaces
Use `str.removeprefix()` instead of character-set stripping so subloggers such as `piker.paper` retain their requested namespace. Also, - drop stale parent-logger assertions from daemon startup paths - keep logger setup calls without assigning assertion-only locals - cover both logger factories and prefix-sensitive module names Prompt-IO: ai/prompt-io/opencode/20260821T042058Z_b7aca4c0_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
d86f29d416 |
Update feed test fqmes to use `.<venue>` format
Switch all `test_feeds.py` parametrized fqmes from legacy `<pair>.<broker>` to the current `<pair>.<venue>.<broker>` schema (e.g. `btcusdt.spot.binance`). Deats, - update binance fqmes: `btcusdt.binance` -> `btcusdt.spot.binance`, same for `ethusdt`. - update kraken fqmes: `ethusdt.kraken` -> `ethusdt.spot.kraken`, `xbtusd.kraken` -> `xbtusd.spot.kraken`. - update cross-broker set similarly. - comment out old fqmes with `!TODO` to later validate raising on bad/legacy formats. Also, - reformat `if ci_env and not run_in_ci` to multiline style. - reformat `pytest.skip()` msg to multiline. - add `?TODO` for symbology helper fn. - drop stray `await tractor.pause()` in `conftest.py`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
69a6edd6f8 |
Normalize registrar addrs with `wrap_address()`
Canonicalize legacy socket pairs and tagged tuples before storing or comparing `Registry.addrs`, keeping existing config readable when tractor emits protocol-tagged forms. Also, - broaden registry/runtime addr annotations for both wire shapes - compare service fixture addrs through tractor's address codec - use tractor's shared `--ll` pytest option instead of registering it twice - cover mixed legacy/tagged registry state and `pikerd` startup Prompt-IO: ai/prompt-io/opencode/20260820T163519Z_5f631e19_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
bbe9deaa62 |
Port service+tests to latest `tractor` APIs
Continue the `repair_tests`-branch mission (already merged in this stack's ancestry, see |
|
|
|
70e8d60326 |
Fix `pytest` config-dir isolation in subactors
The old (commented-out) `get_app_dir()` override gated on `'pytest' in sys.modules` which can NEVER work in spawned subactors (fresh procs, no pytest import); as a result test `paperboi`/daemon actors were writing into the user's REAL `~/.config/piker/accounting/` files.. friggin yikes. Deats, - add `config._maybe_use_test_dir()` which lazily (at conf-path access time, NOT import time) reads the `piker_test_dir` entry from `tractor.runtime._state._runtime_vars['piker_vars']` as pre-loaded by `open_piker_runtime()` from the `tests.conftest._open_test_pikerd()` overrides. - hook it in `get_conf_dir()` and route `get_conf_path()` + `load()`'s mkdir through `get_conf_dir()`. - route `.accounting._ledger` / `._pos` dir derivation through `config.get_conf_dir()` (was reading the `_config_dir` global directly, bypassing the override); also `mkdir(parents=True, exist_ok=True)` for nested tmp-dir creation. (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> Prompt-IO: ai/prompt-io/claude/20260610T170859Z_75cefe10_prompt_io.md |
|
|
|
2c007d3ada |
Add `tpt_bind_addrs` and separate registry eps
Thread a `tpt_bind_addrs` param through `open_piker_runtime()` and `open_pikerd()` so pikerd's bind addrs can differ from the registry endpoint (support a dedicated `regd` service). Simplify `load_trans_eps()` to delegate entirely to `tractor.discovery.parse_endpoints()`. Deats, - `conf.toml`: fix maddr prefixes to proper `/ip4/` and `/unix/`, add `chart` endpoints section, add commented `regd` example. - `cli/__init__.py`: replace `parse_maddr` with `parse_endpoints`, rename `--maddr` -> `--maddrs`, parse `regd` key from eps falling back to `pikerd` addrs. - `_actor_runtime.py`: thread `tpt_bind_addrs` through runtime open fns to `open_root_actor`. - `ui/cli.py`: activate `network` config parsing for chart CLI, extract `chart` eps for bind and `regd`/`pikerd` for registry, pass `tpt_bind_addrs` through runtime config. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
1fde12d3fd |
Use `tractor.Address` for endpoint resolution
Replace manual `layers['ipv4']['addr']` / `layers['tcp']['port']` tuple extraction with direct `tractor.Address` objects returned from `load_trans_eps()`. In `open_pikerd()` call `addr.unwrap()` for the raw-tuple comparison against `root_actor.accept_addrs`. Deats, - `conf.toml`: update maddr prefix `/ipv4/` -> `/ipv/`, add commented UDS socket path example. - `cli/__init__.py`: wrap endpoint loading in `maybe_open_crash_handler`, append `addr` objects directly to `regaddrs`. - `ui/cli.py`: restructure `chart()` body into `maybe_open_crash_handler` scope, switch to `registry_addrs` from config, comment out the `network`-based `load_trans_eps` path (WIP `multiaddr` transition). - `_actor_runtime.py`: use `addr.unwrap()` for accept-addr membership check. - `uv.lock`: add `multiaddr >= 0.2.0` and its transitive deps. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
c347ab08ea |
Drop `.cancel_actor()` from `maybe_spawn_daemon()`
Since `tractor`'s new and improved inter-actor cancellation semantics are much more pedantic, AND bc we use the `ServiceMngr` for spawning service actors on-demand, the caller of `maybe_spawn_daemon()` should NEVER conduct a so called "out of band" `Actor`-runtime cancel request since this is precisely the job of our `ServiceMngr` XD Add a super in depth note explaining the underlying issue and adding a todo list of how we should prolly augment `tractor` to make such cases easier to grok and fix in the future! |
|
|
|
c5155ce814 |
Swap `open_channel_from()` yield-pair order
Port deribit and IB `asyncio` bridge callables to the new `to_asyncio.open_channel_from()` signature where the `LinkedTaskChannel` is the first param and `started_nowait()` replaces the old `to_trio.send_nowait()` sync handshake. Deats, - deribit `api.py`: update `aio_price_feed_relay()` and `aio_order_feed_relay()` signatures to take `chan: LinkedTaskChannel` as first arg; drop `from_trio`/`to_trio` params; replace `to_trio.send_nowait()` with `chan.send_nowait()` and `chan.started_nowait()`. - drop `functools.partial()` wrapping in both `open_price_feed()` and `open_order_feed()`; pass `fh=`/`instrument=` as kwargs directly. - IB `broker.py`: same `chan` + `started_nowait()` port for `recv_trade_updates()`. Other styling, - rewrap `recv_trade_updates()` docstring to 67 chars. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
d7cefa71f3 |
Update `tractor` private-API refs across codebase
Port internal `tractor._<mod>` references to their new public or reorganized paths after `tractor` refactored its subpkg layout. Deats, - `tractor._portal.Portal` -> `tractor.Portal`. - `tractor._supervise.ActorNursery` -> `tractor.ActorNursery`. - `tractor._multiaddr` -> `tractor.discovery._multiaddr`. - `tractor._addr` -> `tractor.discovery._addr`. - `tractor._state._runtime_vars` -> `tractor.runtime._state._runtime_vars`. - `tractor._state.is_debug_mode()` -> `tractor.runtime._state.is_debug_mode()`. Files touched: `brokers/data.py`, `cli/__init__.py`, `data/feed.py`, `service/_actor_runtime.py`, `service/_mngr.py`, `storage/cli.py`, `tsp/_annotate.py`, `ui/kivy/monitor.py`, `ui/kivy/option_chain.py`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
20bfbc2380 |
Use pre-set reg addrs in `maybe_spawn_daemon()`
Pull actor-runtime `registry_addrs` from (the new)
`tractor.get_runtime_vars()` (over the previous hardcoding of
`('127.0.0.1', 6116)`..)) so that underlying `find_service()` and
`maybe_open_pikerd()` calls use the local actor's assigned registrar
endpoints.
Note, this is particularly necessary to get the `pytest` harness workin
again alongside any local running `pikerd` instance(s).
(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
|
|
|
|
d7f956a566 |
Register all custom excs with `tractor` IPC
Call `reg_err_types()` for every piker-defined exception so they can be marshalled and re-raised across actor boundaries. Deats, - `brokers/_util.py`: auto-register `BrokerError` + all `__subclasses__()` (6 types). - `config.py`: `ConfigurationError` + `__subclasses__()` (`NoSignature`). - `data/validate.py`: `FeedInitializationError`. - `service/_ahab.py`: `DockerNotStarted`, `ApplicationLogError`. - `service/marketstore.py`: `MarketStoreError`. - `storage/__init__.py`: `TimeseriesNotFound`, `StorageConnectionError`. - `brokers/kraken/api.py`: `InvalidKey`. - `brokers/kraken/broker.py`: `TooFastEdit`. - `brokers/questrade.py`: `QuestradeError`. Also, - uncomment `execution_venue` field on kraken `Pair`. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
d26286f6cc |
Factor `Pair` schema-mismatch handling to `_util`
Add `get_or_raise_on_pair_schema_mismatch()` helper and `SchemaMismatch` error type in `brokers._util` to standardize the "provider changed their API" error reporting across backends. Deats, - add `SchemaMismatch(BrokerError)` exc type. - `get_or_raise_on_pair_schema_mismatch()`: catch `TypeError` on `Pair` ctor, build `ppfmt()`-ed report with provider name, fall back to `pair_type._api_url` if no explicit URL passed, then raise `SchemaMismatch`. - binance `api.py`: replace inline `try/except` + `e.add_note()` with the new helper. - kraken `api.py`: replace bare `Pair(...)` ctor with the new helper inside crash handler. Also, - add `_api_url: ClassVar[str]` to binance `FutesPair` and kraken `Pair` structs. - binance `feed.py`: warn on missing `.<provider>` in fqme; raise `SymbolNotFound` on empty venue. - reformat `start_dt`/`end_dt` unions to `datetime|None` style in binance `Client`. - wrap binance `_pairs` lookup in `maybe_open_crash_handler()`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
22f166a5c6 |
Update `conftest.py` for `tractor` runtime API changes
Port test fixtures to match `tractor`'s updated registry and channel APIs. Deats, - use `registry_addrs=[reg_addr]` (list) instead of `registry_addr=reg_addr` in `maybe_open_pikerd()`. - `wait_for_actor()` now takes `registry_addr=` kwarg instead of `arbiter_sockaddr=`. - access `portal.chan` (not `.channel`) and unwrap remote addr via `raddr.unwrap()`. - yield `raddr._host`/`raddr._port` instead of tuple-indexing. - drop random port generation; accept `reg_addr` fixture from `tractor`'s builtin pytest plugin. Also, - add `reg_addr: tuple` param to `open_test_pikerd()` fixture (sourced from `tractor._testing.pytest`). - type-narrow `reg_addr` to `tuple[str, int|str]`. - drop unused `import random`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code |
|
|
|
6c8709d309 |
Bump `xonsh` to 0.24.2
Use the current xonsh release in the Nix-managed REPL environment. Deats, - require xonsh 0.24.2 for Python 3.13 and Nix fixes; - refresh only xonsh's source and wheel lock metadata; - retain dotrc compatibility for shells outside this project; - record Prompt-IO provenance for the dependency update. Prompt-IO: ai/prompt-io/opencode/20260828T200352Z_dd676857_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
23632d2153 |
Bump `flake.lock` after dev-shell fixes
Advance `nixpkgs` to `241313f4`; the refreshed closure passes Qt, `pyqtgraph` and wksmod-path import checks. (this commit msg was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
d85e57334c |
Rebuild stale `uv` envs after flake updates
`uv sync` accepts an existing same-minor Python even when its Nix store path belongs to an older closure. That can leave a glibc 2.40 interpreter loading Qt built against glibc 2.42. - derive the Python package once from `cpython` - clear `py313` when its interpreter target differs from the flake - ignore inherited `VIRTUAL_ENV` before syncing (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
6c8d17da75 |
Fix `flake.nix` dev-shell install
The refreshed Nix closure no longer supplies `libz.so.1` to the `uv` NumPy wheel, and leaves the synced `py313` env off `PATH`. - add Nix `zlib` to `LD_LIBRARY_PATH` for native Python deps - activate `py313` after `uv sync` so `pyqtgraph`, `piker` and `xonsh` resolve from the locked env (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
|
|
|
1976f6a5de |
Bump `flake.lock` to avoid nix warnings..
However this breaks `pyqtgraph` due to missing `PyQtX` libs?? |