39 lines
2.9 KiB
Markdown
39 lines
2.9 KiB
Markdown
# RCR-001 — Legacy registration precision fallback
|
|
|
|
Status: ready-for-agent
|
|
Priority: Critical
|
|
|
|
## Problem
|
|
|
|
The tracker now filters proxy and pinned-route candidates through `_quantization_satisfies(node.quantization, requested_quantization)`. A registration produced before the protocol added singular `quantization` is normalized to `quantizations=["bfloat16"]`, but leaves `node.quantization is None`; routing then fails every request, including the default `bfloat16` request.
|
|
|
|
The defect is therefore at protocol normalization: registration correctly records an available plural capability but never chooses a compatible active precision for the legacy entry.
|
|
|
|
This is inconsistent with the explicit capability admission rollout policy: an absent capability report is routable under `compat`. Logs show `capability=absent routable=True`, while `/v1/chat/completions` returns 503 or a pinned route returns 409 because the separate precision gate excludes the same legacy node.
|
|
|
|
## Evidence
|
|
|
|
Representative tight repros fail on current `master`:
|
|
|
|
- `tests/test_billing_ledger.py::test_proxy_chat_bills_credited_client_and_credits_node` → HTTP 503
|
|
- `tests/test_tracker_routing.py::test_tracker_proxy_accepts_hf_model_alias_from_quickstart` → HTTP 503
|
|
- `tests/test_manual_route_benchmark.py::test_pinned_route_uses_named_node` → HTTP 409
|
|
- `tests/test_model_speed_latency.py::test_tracker_records_increasing_hop_latency_for_model_and_hardware` → HTTP 409 for every parameter
|
|
|
|
Each fixture registers a complete, healthy legacy node without `quantization`; tracker registration logs show it as routable under `compat`.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [ ] Legacy nodes omitting the `quantization` field are treated as the historical default precision for compatibility purposes.
|
|
- [ ] Explicit `null`, invalid, or unsupported declared precision never receives that fallback and remains excluded from routing, assignment, and coverage calculations, including after managed shard assignment/rebalancing.
|
|
- [ ] Raft replication preserves singular `quantization` and plural `quantizations`; follower routing has identical precision eligibility to the leader.
|
|
- [ ] `capability_policy=enforce` still excludes absent capability reports regardless of precision fallback.
|
|
- [ ] Automatic proxy routing, pinned routes, benchmark routes, and route-stat sampling use the same compatibility rule.
|
|
- [ ] Add behavior-level tracker HTTP tests for legacy omission and explicit invalid declaration.
|
|
- [ ] Targeted billing, routing, benchmark, model-speed, pricing, forfeiture, and TOPLOC dispatch tests pass.
|
|
- [ ] Run the full suite and document any failures not caused by this issue.
|
|
|
|
## Implementation notes
|
|
|
|
Keep the compatibility decision at the protocol-normalization boundary, not scattered into individual route paths. A normalized legacy default can preserve existing `_quantization_satisfies` semantics while differentiating an omitted field from an explicitly invalid value.
|