piker/.taken/current.org

652 lines
29 KiB
Org Mode

# vim: et sw=2 ts=2
#+TITLE: piker project store
#+TODO: TODO(t) WIP(w!) WAIT(a@) | DONE(d!) NOPE(n@)
# Checkbox states: [ ] open, [-] partial, [x] complete
* piker
:PROPERTIES:
:CATEGORY: piker
:END:
** TODO prs
:PROPERTIES:
:CREATED: [2026-07-15]
:CARRIED: 29
:END:
- [ ] move the below into *** todos with pr/branch links
* [ ] DPI-aware font scaling + manual kb bindings.
* [ ] gap_annotator for time gaps.
* [ ] moar `claude`-y skills,
* [ ] /lint with ruff
* [ ] /run-tests
*** WIP qualify known-FQME history backfill
:PROPERTIES:
:CREATED: [2026-07-24]
:CARRIED: 21
:REPO: /home/goodboy/repos/piker
:END:
- [x] preserve the dirty `flake_update` main checkout before
switching branches
- [x] check out `backfiller_deep_fixes` in the main checkout and
verify every process imports it
- [ ] complete the below qualification plan
* [ ] select one known-problem provider, FQME, timeframe, date range,
and original symptom
* [ ] preserve and checksum any known-bad parquet
* [ ] bootstrap `pikerd` with disposable config and NativeDB storage
* [ ] record baseline timestamps, rows, uniqueness, nulls,
ordering,
indexes, gaps, and readability
* [ ] reproduce fresh-backfill, restart, and append behavior for
only
the selected case
* [ ] convert each reproduced failure into a failing deterministic
test before fixing it
* [ ] rerun the exact manual lifecycle after every production
correction
* [ ] add deterministic subprocess coverage for process death and
cross-process locking
* [ ] exercise Ctrl-C, SIGTERM, SIGKILL, provider interruption, and
restart recovery
* [ ] qualify MarketStore and actual sampler backpressure separately
* [ ] expand to other timeframes and providers only after the
selected FQME passes
**** TODO fixed-FQME-case backfill qualify
:PROPERTIES:
:CREATED: [2026-07-29]
:CARRIED: 17
:REPO: piker/
:END:
- [ ] follow through using both new files,
* ./docs/manual_backfill_qualification.rst
* ./snippets/nativedb_backfill_audit.xsh
- [ ] choose and record one known-problem FQME, timeframe, UTC range,
and original chart symptom
- [ ] source `snippets/nativedb_backfill_audit.xsh` and initialize a
private disposable root with only the required provider config
- [ ] run repository and environment preflight at commit `0846cbd4`
- [ ] seed and audit the known-bad baseline, then replay repair and run
`bfq_compare()` without losing original timestamps
- [ ] clear only the disposable Parquet and qualify a fresh backfill
- [ ] restart against fresh storage and compare `fresh` to `restart`
- [ ] leave one subsequent run active long enough to append, then compare
`restart` to `append` with `require_newer=True`
- [ ] restart QQQ 1s on fresh datad SHM and verify the former 653-row
zero-time reservation does not recur
- [ ] preserve chart logs, audit JSON, Parquet snapshots, and exact UTC
gap endpoints for review
**** TODO review ^qualify^ evidence and close follow-ups
:PROPERTIES:
:CREATED: [2026-07-29]
:CARRIED: 17
:REPO: /piker
:END:
- [ ] verify every qualification process imports commit `0846cbd4`
- [ ] review baseline, repair, fresh, restart, and append reports for
structural, timestamp, endpoint, and gap regressions
- [ ] distinguish durable Parquet gaps from SHM hydration or chart-only
gaps using the runbook triage table
- [ ] convert each reproduced failure into a deterministic regression
before changing production code
- [ ] prepare the final qualification summary and any required patch,
PR, or worktree-lifecycle follow-ups
*** TODO cross-harness AI skill integration
:PROPERTIES:
:CREATED: [2026-07-21]
:CARRIED: 24
:REPO: /home/goodboy/repos/piker
:ISSUE: https://www.pikers.dev/pikers/piker/issues/79
:END:
- [ ] review and land the portable piker skill and OpenCode docs patch
- [ ] reconcile the active global `commit-msg` override with the
repo-local shared skill and style guide
- [ ] verify skill and command discovery after restarting Claude Code
and OpenCode
- [ ] fold remaining skill-content review into the canonical trackers:
* [ ] https://www.pikers.dev/pikers/piker/issues/69
* [ ] https://www.pikers.dev/pikers/piker/issues/79
*** TODO vectorize `gap_annotator` client spec building
:PROPERTIES:
:CREATED: [2026-07-21]
:CARRIED: 24
:REPO: /home/goodboy/repos/piker
:END:
- [ ] replace per-row Polars slicing and filtering in
`piker/tsp/_annotate.py:139` with extracted columns and batched
lookups
- [ ] preserve missing-prior-row, epoch-skip, direction, label, and
batch-payload behavior
- [ ] benchmark the 1285-gap case against the handoff in
`notes_to_self/claudy/gapsannotator_sesh.md`
- [ ] add focused correctness coverage for generated rectangle, arrow,
and text specs
*** TODO integrate the piker `ruff` lint skill
:PROPERTIES:
:CREATED: [2026-07-21]
:CARRIED: 24
:REPO: /home/goodboy/repos/piker
:END:
- [ ] review the clean but unmerged `claudy_writes_ruff_conf` branch
- [ ] validate its `ruff.toml` policy and staged-file checker against
the current tree
- [ ] port the `/lint` skill to shared Agent Skills frontmatter with
thin harness-specific commands
- [ ] rebase and prepare the accepted lint/config changes for landing
*** TODO reconcile stale Claude plans and worktrees
:PROPERTIES:
:CREATED: [2026-07-21]
:CARRIED: 24
:REPO: /home/goodboy/repos/piker
:END:
- [ ] reconcile `ai/claude-code/plans/shm_port.md` with the implemented
`tractor.ipc._shm` shim
- [ ] classify `datad_service.md` as an architecture record rather than
an active implementation plan
- [ ] inspect generated state before retiring the merged
`wkt/flake_update` and `worktree-ngi0_submission` worktrees
- [ ] preserve the unmerged lint worktree until its branch is reviewed
** TODO chart-local gap overlay follow-ups
:PROPERTIES:
:CREATED: [2026-08-14]
:CARRIED: 7
:REPO: /home/goodboy/repos/piker
:END:
- [ ] trigger `GapOverlayMngr.refresh()` from an explicit history
revision/publication event after repair or prepend
- [ ] expose gap-overlay UX through UI config
* [ ] startup visibility and enabled timeframes
* [ ] default `Ctrl+G` key binding
- [ ] live-qualify chart-local overlay behavior
* [ ] actor startup and focused 1s/60s toggling
* [ ] multi-symbol and duplicate-FQME cached charts
* [ ] secondary-`Viz` placement and backfill repositioning
* [ ] remote disconnect and owner-scoped graphics cleanup
- [ ] add focused Qt/actor regressions for the qualified lifecycle
** TODO factor typed chart annotation IPC dialogs
:PROPERTIES:
:CREATED: [2026-08-14]
:CARRIED: 7
:REPO: /home/goodboy/repos/piker
:END:
- [ ] exercise the strict `SetGapOverlay`/`GapOverlay`
dialog under a live Tractor context
* [ ] wrong-direction and unrelated payload rejection
* [ ] timeout, cancellation, stale reply, and disconnect recovery
- [ ] factor keyed send/receive locking, fresh request IDs, and stale
response correlation into a generic IPC dialog helper after a
second typed consumer establishes the interface
- [ ] migrate legacy `remote_annotate()` dict commands to tagged
request/response message types
- [ ] decide whether to fold `remote_gap_overlays()` into the general
annotation endpoint after the legacy protocol is typed
** proj_mgmt
:PROPERTIES:
:CATEGORY: project
:END:
*** TODO ngi0 aug01 funding submit!
DEADLINE: <2026-08-01 Sat>
:PROPERTIES:
:CREATED: [2026-06-01]
:CARRIED: 33
:END:
- [ ] wip pr: https://github.com/goodboy/tractor/pull/431
https://nlnet.nl/propose/
https://nlnet.nl/foundation/policies/generativeAI/
https://nlnet.nl/commonsfund/
*** TODO MEETING(s)
:PROPERTIES:
:CREATED: [2026-05-21]
:CARRIED: 33
:END:
** ui
:PROPERTIES:
:CATEGORY: piker.ui
:END:
*** TODO dpi_auto_calc
:PROPERTIES:
:CREATED: [2026-07-15]
:CARRIED: 29
:END:
- [ ] PUT PRs here
** brokers
:PROPERTIES:
:CATEGORY: piker.brokers
:END:
*** TODO IB: follow-up for search results bs!
:PROPERTIES:
:CREATED: [2026-05-21]
:CARRIED: 33
:END:
* https://www.pikers.dev/pikers/piker/issues/85
- [X] fix the `si.expiry..ib` search result?
- [ ] introspect why `Client.search_symbols()` is returning the
empty `.<venue>` case!
- presumably by something weird in the server-side endpoint?
- [ ] figure out better tuning of client side fuzzy-filter versus
server-side versus UI final display pass!
*** TODO ish for port to `uv`,
:PROPERTIES:
:CREATED: [2026-05-21]
:CARRIED: 33
:END:
* https://github.com/ib-api-reloaded/ib_async/issues/204
- [ ] mention to track in #68
*** TODO profiling: try newer libs,
:PROPERTIES:
:CREATED: [2026-05-21]
:CARRIED: 33
:END:
- [ ] https://github.com/pikers/piker/issues/337
** perf/tooling
:PROPERTIES:
:CATEGORY: piker.profile
:END:
- [ ] link existing GH issues for trying new
libs!
** FSP backfill: branch work
*** TODO review and commit FSP backfill synchronization
:PROPERTIES:
:ID: piker-fsp-backfill-sync-review-and-commit
:CREATED: [2026-09-03]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker/wkts/fsp_backfill_sync
:END:
- [ ] review committed token-targeted history graphics change
(`fadab3d2`)
- [ ] review and commit the FSP stream-contract boundary
* yo yo yo
* `piker/data/__init__.py`
* `piker/data/ticktools.py`
* `piker/fsp/_api.py`
* `piker/fsp/_momo.py`
* staged portion of `piker/fsp/_volume.py`
- [ ] review and commit the synchronization and live-volume boundary
* explicit `Flume` RT/history cadence
* immutable history snapshots and absolute SHM-bound synchronization
* relevant backfill filtering and non-duplicating destination steps
* nonnegative sampled and derived volume
* M4 graphics-cache invalidation and unchanged-update suppression
* FSP synchronization regressions and Prompt-IO provenance
- [ ] review and commit the `piker-fsp-expert` skill boundary
- [ ] run boundary checks and the final test suite
- [ ] inspect each staged diff and commit message before committing
*** TODO add cumulative M4 downsampling for volume curves
:PROPERTIES:
:ID: piker-cumulative-m4-volume-downsampling
:CREATED: [2026-09-03]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker/wkts/fsp_backfill_sync
:END:
- [ ] define cumulative bucket semantics for step-style data
* sum all source values represented by each pixel bucket
* preserve bucket time/index placement and zero-volume gaps
- [ ] add a sum-reducer variant alongside price min/max M4
- [ ] route unit and dollar-volume curves through cumulative downsampling
- [ ] keep price, OHLC, and non-cumulative signal curves on min/max M4
- [ ] preserve incremental appends, view changes, and cache invalidation
- [ ] test sum conservation across zoom levels and partial edge buckets
- [ ] profile the cumulative path against the existing M4 implementation
** TODO review and save the Trend Calculus prototype
:PROPERTIES:
:ID: piker-trend-calculus-prototype-review
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:ISSUE: https://github.com/pikers/piker/issues/187
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Regenerate and review six Trend Calculus behavior boundaries
on trend_calc_on_jev after workflow commit f148fbcc on
moar_ai_skillz lands; retain source/test pairs and inspect every
message before saving.
- [ ] Run each boundary check from the pinned package and the final
safe regression sequence; the working-tree offline suite passed 253
tests.
- [ ] Qualify one selected live source through startup, quiet bars,
skipped wakeups, history repair, replay and owner cancellation.
- [ ] Coordinate inherited stream/backfill work with
[[id:piker-fsp-backfill-sync-review-and-commit][the existing FSP synchronization task]].
*** TODO split draft TC commit after upstream history is settled
:PROPERTIES:
:ID: piker-trend-calculus-draft-commit-split
:CREATED: [2026-10-06]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:TAKEN_APPEND_OP: 85c6bdbe-7655-4323-b366-2732ac86e16c
:TAKEN_APPEND_REQUEST: 10de3a5f301761e43ba80988385d9eb180d41fc3025ed1cd66255f80e3c9fa98
:AI_DLOG: 01a109d6-d0ec-70d3-b2cf-2112a6780aa3
:AI_WKT: /home/goodboy/repos/piker
:END:
Draft snapshot: =e815fd77cfbf89b241bfabf19bda7b1c5f25c784=.
- [ ] Wait until upstream branches and their landing order are
settled; preserve a reference to the draft snapshot.
- [ ] Reset/unpack draft commit e815fd77 while retaining the full TC
changeset and preserving unrelated working-tree and staged work.
- [ ] Prepare a proper commit plan for that changeset with coherent
behavior boundaries, matching tests, docs and provenance.
- [ ] Run each boundary's checks and review its diff and message
before recommitting.
** TODO qualify Jev regime judgments against real responses
:PROPERTIES:
:ID: piker-jev-live-regime-qualification
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Once TYPESAFE_API_KEY is available and a live request is
authorized, send one small synthetic multi-timeframe request
through the HTTPX/Trio client.
- [ ] Verify the documented request/response schema, model identity,
distributions, usage, errors and measured end-to-end latency.
- [ ] Evaluate useful regime labels and confidence on held-out trend
snapshots, including flat, reversing, aligned and conflicting
timeframes.
- [ ] Measure sustained pacing, coalescing, source freshness and cost
before enabling realtime judgments.
- [ ] Consider an SDK AnyIO port or Trio backend only after the
direct HTTP prototype demonstrates useful classifications.
** TODO connect finalized trends to the Jev provider-service
:PROPERTIES:
:ID: piker-jev-provider-service-integration
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Obtain the separate system-1 provider-service repository or
interface and identify its input, output, lifecycle and ownership
contracts.
- [ ] Adapt serve_regimes and RegimeClassifier to the service nursery
and typed publication interface without mixing model labels into
deterministic trend state.
- [ ] Configure market, periods, model, credentials, request pacing,
evidence retention and freshness limits explicitly.
- [ ] Verify reconnect, revision/gap invalidation, backpressure,
stale-response rejection and shutdown with the actual service.
** TODO recover Pine source and check Trend Calculus parity
:PROPERTIES:
:ID: piker-trend-calculus-pine-parity
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:ISSUE: https://github.com/pikers/piker/issues/103
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Recover the human's Pine implementation and record its
provenance/version alongside the pinned Lua and Scala research.
- [ ] Compare startup seeding, extrema ties, FHLS splitting, opposing
pivots and recursive reversal orders.
- [ ] Add independent fixtures for meaningful semantic differences;
distinguish extremum time from confirmation time and mutable-bar
previews.
** TODO qualify multitimeframe pivots and regime annotations
:PROPERTIES:
:ID: piker-trend-regime-chart-qualification
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Inspect actual 1/5/15-second layers and hover information on a
selected live market; compare confirmed pivots and regime
boundaries to finalized source evidence.
- [ ] Verify chart-axis placement, gaps, revisions, hidden charts,
duplicate cached feeds and owner-scoped cleanup.
- [ ] Qualify model rectangles at response receipt and expiry,
including stale classifications and source-segment changes.
- [ ] Measure quiet-bar display delay before deciding whether
publication needs an explicit output notification.
- [ ] Coordinate shared history-overlay lifecycle with the existing
chart-local gap overlay follow-ups; route any annotation IPC
factoring to the existing typed-dialog task.
** TODO qualify a native subsecond source for trend regimes
:PROPERTIES:
:ID: piker-trend-native-subsecond-sampling
:CREATED: [2026-10-05]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker
:AI_BRANCH: trend_calc_on_jev
:END:
[[file:/home/goodboy/repos/piker/docs/trend_calculus.rst][Research and prototype guide]]
- [ ] Define the required high-frequency periods and producer
contract; the numeric/MTF APIs accept fractional periods but the
current native clock uses whole seconds.
- [ ] Extend or select the source/sampler time grid before enabling
subsecond chart/service periods; retain strictly increasing
coordinates and complete aligned buckets.
- [ ] Measure compute, SHM publication, service latency and chart
refresh under the selected cadence, including gaps, replay and
cancellation.
** TODO migrate clearing to strict typed messaging
:PROPERTIES:
:ID: piker-typed-clearing-migration
:CREATED: [2026-10-06]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:AI_HARNESS: codex
:AI_WORKTREE: /home/goodboy/repos/piker/wkts/typed_clearing_protocol
:AI_BRANCH: wkt/typed_clearing_protocol
:END:
[[file:/home/goodboy/repos/piker/wkts/typed_clearing_protocol/plans/opencode/typed-ems-messaging.md::823][Migration plan and commit boundaries]]
Foundation evidence: plan commit 1793b47c and implementation commit
7fee9b86; human reports both pushed. Strict schemas, validation,
directional stream helpers and the pure OrderState reducer are
implemented. Prior qualification: 65 offline tests and eight IPC
tests passed. Production endpoints still use the legacy protocol.
- [ ] Port paper and its paired EMS consumer together.
* [ ] Typed startup, requests, events and open-order completion.
* [ ] Deterministic synthetic ticks and distinct execution IDs.
- [ ] Port Binance, Kraken and IB individually with paired EMS handling.
* [ ] Shared offline conformance and provider translation fixtures.
* [ ] Preserve execution identity, signed positions and account mapping.
- [ ] Integrate OrderState into EMS routing and broker-event handling.
* [ ] Bound pre-ack buffering by age in its asynchronous owner.
* [ ] Preserve cancel intent, fill deduplication and late-event handling.
- [ ] Migrate client/EMS startup, local queues and UI consumers together.
* [ ] Replace wire snapshot mutation and dictionary reconstruction.
- [ ] Enforce each migrated endpoint pair with Tractor payload specs.
* [ ] Narrow receive sets; validate startup, RPC arguments and results.
* [ ] Reject malformed, wrong-direction and wrong-phase messages.
- [ ] Qualify real adapter and actor behavior offline.
* [ ] Cancel-before-ack; early, duplicate and late fills.
* [ ] Empty/populated startup snapshots and two-client order isolation.
* [ ] Abrupt transport EOF, cancellation and bounded failure teardown.
* [ ] Repeated lifecycle tests under supported spawn methods.
- [ ] Resolve the duplicate pytest --ll option before a Tractor pin upgrade.
- [ ] Document the position-broadcast isolation limitation and policy.
- [ ] Remove legacy IPC paths after all paired migrations qualify.
- [ ] Propose a reviewable commit plan for each qualified implementation.
* TODO Qualify chart disconnect and reattach with independent service ownership
:PROPERTIES:
:ID: piker-chart-disconnect-reattach-e2e
:CREATED: [2026-10-20]
:CARRIED: 0
:REPO: /home/goodboy/repos/piker
:CATEGORY: piker.testing
:AI_HARNESS: opencode
:TAKEN_APPEND_OP: piker-chart-disconnect-reattach-e2e-20261020-v2
:TAKEN_APPEND_REQUEST: 5963b29d2e6372c8864831fdee8945a3e064f5084d9abf0331f92c0b5171647c
:END:
Build process-isolated chart journeys that distinguish surviving shared
services and consumers from clean chart exit. Preserve original errors
and deterministic phase evidence; do not declare a journey green merely
because another chart remains usable.
Next action: reconcile the current testing and evaluation branches and
their actual Piker/Tractor imports, then implement a suite-owned pikerd
with independent chart processes. No implementation has started for this
handoff as of this entry; source/state inspection is recorded below.
Context:
Human-directed assignment to e2e_qa_mngr from proj_super. The source
handoff describes proposed tests, not existing runnable nodes:
[[file:/home/goodboy/repos/piker/wkts/ib_downstream_pin_eval/ai/plans/20261019-chart-disconnect-e2e-handoff.md][Chart disconnect and reattach specification and manual evidence]]
Existing foundations, inspected 2026-10-20:
- wkt/live_chart_qtractor at 4ab49082: structured lifecycle 1a2d4893,
prerequisite fixes 5c17419c, opt-in Kraken reproducer 4ab49082.
Application/test work is committed; only local workflow configuration
remains dirty. Use this as the initial working candidate, not proof
that the evaluation fixes are integrated.
- wkt/human_iface_e2e at aadfd1cf is clean and supplies the headless
QApplication isolation foundation.
- wkt/replay_provider_e2e at 06fee700 is clean. Its real feed/control
fixture has acknowledged sequence barriers. The observed disconnect
races justify narrow controlled input, not a replay-first rewrite.
- wkt/ib_downstream_pin_eval remains at eed58566 with dirty dependency,
logger, daemon and EMS compatibility changes.
- wkt/ib_disconnect_integration at c0dae89a contains committed IB
disconnect work; its provenance/tooling state remains dirty.
- Tractor wkt/ctx_final_return_disconnect in address_logging_levels is
at 0553fcf8 with dirty final-Return guard and regression changes.
Read them as candidate evidence, not an already-landed fix.
Reuse tests/ui/conftest.py, the Qtractor lifecycle regression,
tests/conftest.py open_test_pikerd and owned config propagation, and
the replay branch's acknowledged feed controls where applicable.
[[file:/home/goodboy/repos/piker/wkts/live_chart_qtractor/tests/ui/test_live_chart.py][Committed live-chart reproducer]]
[[file:/home/goodboy/repos/piker/wkts/replay_provider_e2e/plans/opencode/live-backend-chart-e2e-review.md][Live-provider-first roadmap]]
The current sanitized live_chart_qtractor interpreter resolves Piker
from that worktree but Tractor from its py313 site-packages; installed
Trio is 0.32.0 and PyQt6 is 6.10.1. This is not the manual evaluation's
Tractor checkout or PyQt6 6.11.0 environment. Resolve exact versions and
module paths again before any comparison. Inspect the duplicate pytest
--ll registration blocker before selecting the evaluation environment.
Concerns and authority:
This assignment does not authorize commits, history changes, live IB
connections, any orders, or attachment to the human's running daemon.
Order journeys may be designed and implemented as gated tests; do not
execute them without explicit authorization. Live-provider qualification
requires explicit selection and applicable human permission.
The existing Kraken run reached history and paper EMS but readiness
preceded rt_linked.mode, Qt reported abstract paint calls, and teardown
left a paperboi child. That exact orphan was subsequently stopped by
human-authorized SIGINT. Guest completion did not prove descendant exit.
Manual IB trials demonstrate daemon/survivor continuity, not clean exit.
Cancellation-only groups, DebugRequestError, hard-reaping and SIGSEGV
remain unresolved. Do not suppress any of these to make E2E green.
Canonical native-crash investigation, separate from this test assignment:
[[id:piker-qt6-chart-teardown-sigsegv][Diagnose Qt6 chart teardown SIGSEGV with native backtraces]]
[[file:../ai/diagnostics/20261019-chart-253598/README.md][SIP wrapper access during PyQt atexit: diagnostics and limits]]
The core locates the native fault; it does not establish the underlying
ownership cause. This task records exit evidence without claiming repair.
Coordinate order replay/cancellation assertions with
[[id:piker-typed-clearing-migration][Strict typed clearing migration]];
do not duplicate its protocol migration or infer it has landed.
Execution:
- [ ] Reconcile source revisions and dirty work before integrating; record
the selected branch, reused fixtures, and exact runtime imports.
- [ ] Own registrar/pikerd A independently of chart processes B and C;
give each chart its own QApplication and Tractor root. Separate discovery
from listener addresses, use a test-unique registry and loopback port
zero, and assert actual chart listeners are nonzero and distinct.
- [ ] Isolate config, storage, settings and account state before imports
in every child; never reuse human ports 6116/3333 or human accounts.
- [ ] Provide an external observation/control channel and owned process
handles that outlive charts. Capture actor UUID/name/PID/listeners,
child relations and exact SHM ownership including unpublished child SHM.
- [ ] Establish readiness after feed/history attachment, bound views,
FSP streams, search handlers and EMS entry. Race waits against original
process/session failure, not only timeouts.
- [ ] Implement same-market alternating departures: ready B/C, close B,
prove the SAME C consumes a post-close quote/FSP update, reopen B,
close C, prove replacement B survives, then close/reopen the last chart.
Add the distinct-market variant to prove sibling-feed independence.
- [ ] Implement last-consumer repeated reattachment to the SAME A and
service/client generations. Compare actual window close, structured
shutdown, root-only SIGINT and terminal-equivalent process-group SIGINT
as separate variants, with PID/PGID ownership recorded before signaling.
- [ ] Drive actual search results with QtBot in the chart worker; compare
visible versus normally dismissed results before detach and reattach.
- [ ] Gate startup cancellation with entered/release acknowledgements at
early acquisition, FSP child bootstrap before imports/registration,
history publication and FSP stream establishment. Hold only C's work,
retain B's progress, permit unwind, and prove a new C can start afterward.
- [ ] Repeat gated startup aborts with no other consumer. Include debug
mode during FSP imports; retain the original interruption independently
from a secondary local-actor IPC stdio-lock DebugRequestError.
- [ ] Implement separately selected order continuity journeys for Piker
paper EMS, IB paper-account broker-routed limits, and EMS-held dark
orders. Execution remains blocked pending explicit order authorization.
Include multi-expiry market-specific dialogs and cancellation of both
order types after reattach.
Verification:
- [ ] Report service survival and chart exit as separate outcomes even
when either fails. Collect survivor evidence after departure errors,
then aggregate originals rather than hiding them behind cleanup.
- [ ] Prove fresh service RPCs and post-action provider data in the same
survivor, including FSP consumption. Deterministic inputs need a matched
sequence; live quotes need not change price. Sampler ticks alone fail.
- [ ] Assert stable service/provider generations, owned child exit and
SHM lifetime according to its actual owner. Shared cached feed SHM may
remain with A; endpoint closure alone does not prove PID exit.
- [ ] Fail clean-exit checks for SIGSEGV/abort, stuck children, hard reap,
unexpected debugger entry and cancellation-only application errors.
Do not blanket-suppress TransportClosed or mixed exception groups.
- [ ] Preserve baseline/fixed results, stdout/stderr, return codes,
source versions, phase acknowledgements, actor/RPC/context identities,
cancellation provenance, and available fault-handler/core evidence.
- [ ] For authorized order qualification, verify canonical OID/reqid
continuity, idempotent replay, market routing, working-order counts,
position continuity and terminal cancellation. Repeated status messages
alone do not prove duplicate orders. Cover reqid 5042-style error replies
with oid=None and the unsubmitted-order-None cancellation symptom.
- [ ] Run each selected tier headlessly with bounded ownership-scoped
cleanup. Preserve fresh-process fixture isolation; no broad process
killing, SHM cleanup, or human-daemon access.
Handback:
Return results to source piker, task piker-chart-disconnect-reattach-e2e:
- Selected implementation branch, exact source revisions and reused
fixtures, including any unintegrated prerequisites.
- Exact implemented runnable test node IDs and synchronization gates;
distinguish proposed names from implemented nodes.
- Baseline/fixed results with service survival and chart/process exit
reported independently, including unresolved failures.
- Remaining coverage gaps, required public/live-IB qualification and
order authorization, linked to the separate native-crash concern.
Use guarded store updates for evidence. Preserve all human-owned task
and checkbox states; passing tests and commits are not acceptance.