Status: done # 03 — Tracker: node registration + route selection ## What to build Replace the hardcoded two-node route from issue 02 with a real tracker. Nodes register themselves with the tracker on startup (endpoint, shard range, hardware profile, node score). The gateway queries the tracker for an inference route for a given model preset instead of using a static list. The tracker returns an ordered list of node endpoints whose shards collectively cover all layers. The tracker runs as a lightweight HTTP service. Node score is initially a simple placeholder (e.g. fixed value or random) — real throughput/latency scoring comes later. The tracker must correctly reject route requests when no registered nodes cover a required shard range and return an appropriate error. This issue establishes the tracker's registration and routing API contract, which issues 04 (node startup) and 05 (OpenAI gateway) both depend on. ## Acceptance criteria - [ ] A node can register with the tracker via HTTP, providing its endpoint, shard range, and a hardware profile - [ ] The gateway queries the tracker with a model preset name and receives an ordered list of node endpoints forming a complete inference route - [ ] The end-to-end integration test from issue 02 still passes with the tracker now in the loop (no hardcoded routes) - [ ] The tracker returns a clear error response when no route is available for a requested model preset - [ ] Nodes that fail to heartbeat within a configurable window are removed from the registry - [ ] The tracker's registration and route-selection HTTP API is defined (paths, request/response shapes) in the tracker package ## Blocked by - `02-two-node-shard-pipeline.md`