Project status — 2026-10-10
Where the Astral Project stands, in numbers, diagrams, and gates. Every figure below is derived from the repository itself (commit messages, file birth dates, the test suite); sources are stated per figure so nothing here relies on memory.
Headline numbers
| Metric | Value | Source |
|---|---|---|
| Tests passing | 200, 0 failing | cargo test --workspace, 2026-10-09 |
| Clippy / fmt | zero warnings / clean | same run, -D warnings |
| Crates | 8 (record, book, types, normalize, replay, exec, harness, python) | workspace members + birth dates below |
| Spec/runbook docs | 9, all built to the site | docs/ + website/build.py |
| Research notes published | 1 (negative result) | research/001-* |
| Commits on main | 100+ across 10 active days | git log |
| Live venues verified | Binance + Bybit captures, Coinbase trades/tickers | README verification record |
| Open audit findings | 5 of 13 fully open (+2 post-audit bugs, both fixed) | docs/audit-2026-10-06.md follow-ups |
Growth
Test counts come from commit messages that state them (83 on 09-29, 114 on 10-02, 139 on 10-05, 200 on 10-09) — milestones, not continuous sampling. The slope is real work, not test inflation: each jump arrived with the feature it covers (adversarial fixtures, replay events, exec/harness).
Crate births (first commit touching each manifest — the project's actual assembly order): record + types 09-25, book 09-26, normalize 09-30, replay 10-02, exec 10-06, harness 10-08, python 10-09.
System map
flowchart LR
A[Exchange WebSocket] --> B[raw immutable frames]
B --> C[compressed chunks<br/>2000/chunk · SHA-256 index]
C --> D[normalised Parquet<br/>exact decimals · Hive partitions]
C --> E[deterministic replay<br/>book-top · trade-tally]
E --> G[exec-v1 fills<br/>print-through only]
G --> H[benchmark harness<br/>one replay · N probes]
H --> I[hashed report<br/>registry · verify]
D --> J[research notes<br/>negatives first-class]
classDef done fill:#0d3b34,stroke:#5eead4,color:#e6edf3
classDef partial fill:#3a2f10,stroke:#fbbf24,color:#e6edf3
classDef missing fill:#1a1f2b,stroke:#4b5563,color:#8b949e
class A,B partial
class C,D,E,G,H,I,J done
Gate funnel
flowchart TD
G1[Gate 1 — capture & reconstruct<br/>code complete · evidence pending]
G2[Gate 2 — does it work<br/>exec built · calibration open]
G3[Gate 3 — useful research<br/>1 note · substantive note open]
G4[Gate 4 — others use it<br/>machinery ready · humans missing]
G1 -->|72h soak + 2nd machine| G2
G2 -->|shadow error small| G3
G3 -->|one substantive note| G4
G4 -->|5 users · 2 reproductions| G5[Beyond — defined by Gate 4]
classDef open fill:#3a2f10,stroke:#fbbf24,color:#e6edf3
class G1,G2,G3,G4 open
Each gate has a kill criterion in ROADMAP.md (10 bps model error, 3
fruitless months, 6 userless months). The funnel is honest about what blocks
each step: wall-clock evidence and other humans, both unhurriable by commits.
Audit closure funnel
13 findings entered; closed: overflow guards, soak backoff, manifest trust, schema gate, book errors, all CLI formats, trade sides, reconstruct gaps, sequence breaks, used-dir refusal, gap numbers, fuzz coverage — plus 2 post-audit bugs (decimal range, corrupt fills). Open: soak-scale streaming, behavioral unification leftovers, Bybit snapshots (needs a citable source), null-row divergence (needs normalized-replay), normalize idempotency is documented, tail holes are documented. Full table in the audit doc.
What ends the OSS
Gates 1–3 closed: the soak and second-machine evidence (both need hardware outside this machine), calibration/shadow measurement (weeks of observation), the benchmark/registry/SDK loop (built except maturin packaging), and a substantive research note (needs a data window, e.g. funding carry once perp streams are reachable). Estimated 2–3 calendar months, ~4–6 weeks of it active building. The code is the short pole; evidence is the long one.