PINK: E2E trace analysis — Pass 22 serde round-trip/mock fidelity/protocol (Y1-Y14)
Twenty-second pass: asyncio.sleep(0.8) in ~295 generated test bodies flaky (Y5 Critical), MockVenueAdapter no rate_limit flag RATE_LIMITED path untested (Y6 High), reconcile() returns [] always late fills untestable (Y7 High), emits one fill per submit multi-partial-fill untestable (Y8 High), no connect() runtime error if protocol gains it (Y9 High), exit_leg_ratios serde default [] vs struct default vec[1.0] wrong ratio on restore (Y1 Medium), libc dead dep (Y10 Medium), no close() (Y11 Medium), synchronous fills masks timing bugs (Y12 Medium), _slot_from_payload duplicated two files different behavior (Y14 Medium). 389 total flaws across 22 passes. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
This commit is contained in:
@@ -55,7 +55,8 @@
|
||||
| V | Pass 19 (Lifecycle/Rust Subtleties/Test Infra) | 14 | 5 | 2 | 4 | 3 | 0 |
|
||||
| W | Pass 20 (Config/Math Signs/BingX Protocol) | 14 | 4 | 7 | 3 | 0 | 0 |
|
||||
| X | Pass 21 (Rust Build/Deps/Python Packaging/Shared Mem) | 14 | 3 | 5 | 6 | 0 | 0 |
|
||||
| **Total** | | **375** | **42** | **113** | **109** | **64** | **37** |
|
||||
| Y | Pass 22 (Serde Round-Trip/Mock Fidelity/Protocol) | 14 | 1 | 4 | 5 | 4 | 0 |
|
||||
| **Total** | | **389** | **43** | **117** | **114** | **64** | **37** |
|
||||
|
||||
---
|
||||
|
||||
@@ -372,6 +373,12 @@
|
||||
| V2 — `BingxVenueAdapter` no `close()` | `8d9762c` | `close()` added; shuts down class-level `ThreadPoolExecutor` + delegates to `backend.close()` |
|
||||
| V3 — `seen_event_ids` not cleared on slot reuse | `8d9762c` | `slot.seen_event_ids.clear()` added to ENTER handler in Rust kernel; fill dedup no longer pollutes across trades |
|
||||
|
||||
### Fixes applied (2026-06-02 pass 4)
|
||||
|
||||
| Flaw | Commit | What changed |
|
||||
|------|--------|--------------|
|
||||
| W10 — `BingxHttpError` blindly mapped to "REJECTED" | `e90d542` | `_http_error_status()` helper: 429/5xx/transport → RATE_LIMITED; 4xx → REJECTED |
|
||||
|
||||
---
|
||||
|
||||
## O-Series: Sync/Async Wider Scope (Launcher, Generators, Streams, FFI, Tests) (Pass 12)
|
||||
@@ -565,7 +572,7 @@
|
||||
| W7 | No fill history fetched during WS reconnect gap-backfill — fills permanently lost | Venue | **High** |
|
||||
| W8 | Rate limit detection fails on HTTP 429 without matching message — returns 0 instant retry | Venue | **High** |
|
||||
| W9 | `CONTROL_PLANE=REAL_ZINC` silently falls back to in-memory — no persistence | Config | **High** |
|
||||
| W10 | All `BingxHttpError` mapped to "REJECTED" — can't distinguish errors from real rejections | Venue | **High** |
|
||||
| W10 | All `BingxHttpError` mapped to "REJECTED" — can't distinguish errors from real rejections — **✅ FIXED `e90d542`** | Venue | **High** |
|
||||
| W11 | `os.environ["KEY"]` bracket access in tests vs `.get()` in launcher — inconsistent | Test | **High** |
|
||||
| W12 | `MockVenueScenario` no `rate_limit` flag — RATE_LIMITED path untested in CI | Test | Medium |
|
||||
| W13 | Rate-limit regex uses English phrase `"unblocked after"` — non-portable | Venue | Medium |
|
||||
@@ -596,6 +603,29 @@
|
||||
|
||||
---
|
||||
|
||||
## Y-Series: Serde Round-Trip, Mock Fidelity, Protocol Consistency (Pass 22)
|
||||
|
||||
*Full detail in TRACE doc under "PASS 22 — SERDE FIELD-BY-FIELD ROUND-TRIP, MOCK VENUE FIDELITY GAPS, PROTOCOL CONSISTENCY."*
|
||||
|
||||
| # | Flaw | Layer | Severity |
|
||||
|---|------|-------|----------|
|
||||
| Y1 | `exit_leg_ratios` serde default `[]` vs struct default `vec![1.0]` — wrong ratio on restore | Rust | Medium |
|
||||
| Y2 | `KernelIntent.slot_id` is `i64` — inconsistent with `TradeSlot`/`KernelTransition` `usize` | Rust | Low |
|
||||
| Y3 | `KernelIntent.stage` serde default `IDLE` vs Python default `INTENT_CREATED` | Rust | Low |
|
||||
| Y4 | `AccountState` injects `"k_net_fees"` as duplicate of serde's `k_fees_paid` | Rust | Low |
|
||||
| Y5 | `asyncio.sleep(0.8)` in ~295 generated test bodies — timing-dependent flaky | Test | **Critical** |
|
||||
| Y6 | MockVenueAdapter no `rate_limit` flag — RATE_LIMITED path untested | Test | **High** |
|
||||
| Y7 | MockVenueAdapter `reconcile()` returns `[]` always — late fills untestable | Test | **High** |
|
||||
| Y8 | MockVenueAdapter emits one fill per submit — multi-partial-fill untestable | Test | **High** |
|
||||
| Y9 | MockVenueAdapter no `connect()` — runtime error if protocol gains it | Test | **High** |
|
||||
| Y10 | `libc` declared in `Cargo.toml` but never used — dead dependency | Rust | Medium |
|
||||
| Y11 | MockVenueAdapter no `close()` — lifecycle cleanup untestable | Test | Medium |
|
||||
| Y12 | MockVenueAdapter fills synchronous — masks async timing bugs | Test | Medium |
|
||||
| Y13 | `IndexSet` JSON array doesn't encode LRU semantics — fragile on manual edit | Rust | Low |
|
||||
| Y14 | `_slot_from_payload()` duplicated in two files with different behavior | Bridge | Medium |
|
||||
|
||||
---
|
||||
|
||||
## H-Series: Edge Domains — Dependencies, Error Handling, Types, Contracts (Pass 5)
|
||||
|
||||
*Full detail in TRACE doc under "PASS 5 — EDGE DOMAINS."*
|
||||
|
||||
Reference in New Issue
Block a user