Skip to content

Commit 33e0ca6

Browse files
docs: remove references to the private arb/ consumer repo
Strip mentions of the private `arb/` repo and the NautilusTrader reference consumer from public-facing docs and source comments ahead of open-sourcing: README, PROTOCOL.md, CLAUDE.md, and module doc comments now describe only the engine-agnostic WebSocket contract and the public edge-feed-spec. Add .github/CODEOWNERS (@juan-malbeclabs, @ben-dz) for review routing.
1 parent 563892a commit 33e0ca6

8 files changed

Lines changed: 20 additions & 21 deletions

File tree

.github/CODEOWNERS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Default owners for everything in the repo. Listed owners are requested for
2+
# review on every PR (enforced once branch protection requires CODEOWNERS review).
3+
* @juan-malbeclabs @ben-dz

CLAUDE.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ sibling protocols, each selected per feed by `FeedKind` in `src/ingest/feeds.rs`
1212
`midpoint`), and **Market-by-Order** (magic `0x4444`; the bridge reconstructs the L3 book and
1313
re-serves it as full-state `depth`). Each feed maps to one venue. The input (multicast/binary) is
1414
an implementation detail; the *only* external contract is the WebSocket output, fully specified in
15-
**PROTOCOL.md** (v1). NautilusTrader (`arb/adapters/bridge/`, a separate repo) is the reference
16-
consumer but is not part of the protocol.
15+
**PROTOCOL.md** (v1). Any engine that speaks WebSocket + JSON consumes it via a thin adapter; the
16+
consumer is not part of the protocol.
1717

1818
## Commands
1919

@@ -68,8 +68,7 @@ Modules are grouped by role under `src/`:
6868
little-endian fixed-size frames, all built on `ingest/codec_common.rs` (shared 24B frame header, 4B
6969
message header, LE readers, `cstr`, and the generic `decode_frame_with(magic, ...)` walker).
7070
**`codec.rs` (TOB) offsets are validated byte-for-byte** against the authoritative Go decoder in
71-
`edge-multicast-ref` and mirror `arb/feeds/dz_edge/codec.py`**do not change them without
72-
re-validating**. ⚠️ **`codec_midpoint.rs`/`codec_mbo.rs` offsets come from the edge-feed-spec
71+
`edge-multicast-ref`**do not change them without re-validating**. ⚠️ **`codec_midpoint.rs`/`codec_mbo.rs` offsets come from the edge-feed-spec
7372
draft and are NOT reference-validated**; their round-trip tests only pin self-consistency, so
7473
validate against a live frame hexdump before trusting their output (see "Conventions" below).
7574
- **`ingest/book.rs`**`BookState`: per-instrument L3 order book + the MBO snapshot+delta recovery state
@@ -82,7 +81,7 @@ Modules are grouped by role under `src/`:
8281
per instrument, not on `ready()`**: a processor emits as soon as `definition(id)` resolves, so
8382
consumers never see a price before its precision, but a single symbol flows without waiting for
8483
the full set (an all-or-nothing gate could wedge the feed on a startup/reset race). Uses
85-
wraparound-safe u16 sequence comparison (`is_later`). Mirrors `arb/feeds/dz_edge/subscriber.py`.
84+
wraparound-safe u16 sequence comparison (`is_later`).
8685
- **`sinks/ws.rs`** — fans the broadcast out to clients (on by default; disable with an empty
8786
`--ws-bind`). On connect it replays the instrument snapshot (precision first) **then the latest
8887
`depth` per symbol** (full state), then streams quotes/trades/midpoints/depth. Implements the

PROTOCOL.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ An **engine-agnostic** WebSocket protocol for streaming normalized two-sided top
55
plain JSON, and is independent of any trading framework.
66

77
`doublezero-edge-connect` is the **reference producer** (it ingests the DoubleZero Edge binary multicast feed
8-
and re-serves it in this format), and the NautilusTrader adapter is the **reference consumer**
9-
- but neither is part of the protocol. Any engine that can open a WebSocket and parse JSON can
8+
and re-serves it in this format) - but it is not part of the protocol. Any engine that can open a WebSocket and parse JSON can
109
consume it by writing a thin (~50-100 line) adapter to its own internal types. The producer's
1110
*input* (multicast, binary, etc.) is an implementation detail; only the *output* below is the
1211
contract.
@@ -317,12 +316,11 @@ on connect:
317316
reply Pong to Ping; reconnect on close.
318317
```
319318

320-
### Reference consumers
319+
### Writing a consumer
321320

322-
- **NautilusTrader** - `arb/adapters/bridge/` (Python): maps `instrument` -> `CryptoPerpetual`
323-
and `quote` -> `QuoteTick`. ~100 lines; all the framework coupling lives there, none on the wire.
324-
- **Any other engine** (Freqtrade, Hummingbot, a custom bot in Rust/Go/Python): implement the
325-
loop above against your engine's instrument/quote types.
321+
- **Any engine** (Freqtrade, Hummingbot, a custom bot in Rust/Go/Python): implement the loop
322+
above against your engine's instrument/quote types. ~100 lines; all the framework coupling
323+
lives in the adapter, none on the wire.
326324

327325
## Conventions
328326

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ UDP ports, gated by a reference-data state machine. Great for latency, painful t
4545

4646
```
4747
DZ Edge sources ──multicast──▶ doublezero-edge-connect ──WebSocket (JSON)──▶ your engine
48-
(binary, 2 ports/venue) (decode · normalize) ws://host:8081 (NautilusTrader, …)
48+
(binary, 2 ports/venue) (decode · normalize) ws://host:8081 (any WS+JSON engine)
4949
```
5050

5151
The binary multicast, the two-port split, the manifest/precision handshake: all of it stays on this
@@ -89,8 +89,7 @@ On connect you first get the current instrument definitions (precision), then a
8989
```
9090

9191
Any engine that speaks WebSocket + JSON consumes it with a thin (~50-100 line) adapter, see
92-
[PROTOCOL.md → Consuming the feed](PROTOCOL.md#consuming-the-feed-any-engine). **NautilusTrader** is
93-
the reference consumer (`arb/adapters/bridge/`).
92+
[PROTOCOL.md → Consuming the feed](PROTOCOL.md#consuming-the-feed-any-engine).
9493

9594
---
9695

src/ingest/codec.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Decoder for the DoubleZero Edge Top-of-Book & Trades feed (schema v1).
22
//!
3-
//! Little-endian, fixed-size binary frames. Mirrors the Python codec in
4-
//! `arb/feeds/dz_edge/codec.py`. See https://github.com/malbeclabs/edge-feed-spec. The frame
3+
//! Little-endian, fixed-size binary frames, defined by the edge-feed-spec
4+
//! (https://github.com/malbeclabs/edge-feed-spec). The frame
55
//! header, message header, little-endian readers and the generic frame-walker are shared with
66
//! the sibling protocols in [`crate::ingest::codec_common`].
77

src/ingest/codec_midpoint.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
//! `Midpoint` message.
99
//!
1010
//! ⚠️ Byte offsets below come from the edge-feed-spec draft, **not** a byte-validated reference
11-
//! codec (unlike Top-of-Book, which is validated against `arb/feeds/dz_edge/codec.py`). They must
11+
//! codec (unlike Top-of-Book, which is byte-validated against a reference codec). They must
1212
//! be confirmed against a live frame hexdump before this decoder's output is trusted in
1313
//! production - the round-trip test here only pins internal self-consistency.
1414

src/ingest/subscriber.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Reference-data subscriber state machine (DoubleZero Edge reference-data supplement).
22
//!
3-
//! Mirrors `arb/feeds/dz_edge/subscriber.py`: collect instrument definitions tagged with
4-
//! the latest `ManifestSummary` sequence, decide `ready()`, and reset on a channel reset.
3+
//! Collects instrument definitions tagged with the latest `ManifestSummary` sequence,
4+
//! decides `ready()`, and resets on a channel reset.
55
//!
66
//! The state machine is identical across the edge-feed-spec protocols (Top-of-Book, Midpoint,
77
//! Market-by-Order), which differ only in their instrument-definition *layout*, so it is generic

src/model.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Normalized feed messages re-served over WebSocket to any trading engine.
2-
//! Wire format is engine-agnostic JSON - see PROTOCOL.md. NautilusTrader is one consumer.
2+
//! Wire format is engine-agnostic JSON - see PROTOCOL.md.
33
44
use std::{
55
collections::HashMap,

0 commit comments

Comments
 (0)