feat: harden node placement and partial model loading
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Distributed Inference Network",
|
||||
"description": "Distributed inference network: base program US-001…US-035 complete; post-alpha friends-test and LAN-serving arc US-036…US-047 tracked here. Active scratch features (alpha hardening, NCA, distributed GGUF) have separate prd.json files under .scratch/.",
|
||||
"description": "Distributed inference network: base program US-001…US-035 complete; friends-test arc US-036…US-049; capacity/placement US-048/050. Scratch features (alpha hardening AH-001…AH-025, NCA, distributed GGUF, Qwen demand) have separate prd.json files under .scratch/.",
|
||||
"branchName": "ralph/distributed-inference-network",
|
||||
"userStories": [
|
||||
{
|
||||
@@ -851,11 +851,12 @@
|
||||
"python -m pytest passes from repo root"
|
||||
],
|
||||
"priority": 37,
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"notes": "Source issue: docs/issues/37-relay-bridge-concurrency.md. Critical for public friends-test; blocks concurrent head + hop on same node.",
|
||||
"dependsOn": [
|
||||
"US-036"
|
||||
]
|
||||
],
|
||||
"completionNotes": "ThreadPoolExecutor dispatch in relay_bridge.py; per-frame WS send lock; test_relay_bridge_serves_concurrent_requests; --relay-concurrency CLI flag sets MESHNET_RELAY_CONCURRENCY."
|
||||
},
|
||||
{
|
||||
"id": "US-038",
|
||||
@@ -890,12 +891,13 @@
|
||||
"python -m pytest passes from repo root"
|
||||
],
|
||||
"priority": 39,
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"notes": "Source issue: docs/issues/39-caller-credit-account-keys.md. Critical for friends-test inference.",
|
||||
"dependsOn": [
|
||||
"US-031",
|
||||
"US-035"
|
||||
]
|
||||
],
|
||||
"completionNotes": "Caller credit granted once per account on first API key via deterministic event id; tests/test_accounts.py covers grant, revoke, and invented-bearer rejection."
|
||||
},
|
||||
{
|
||||
"id": "US-040",
|
||||
@@ -908,11 +910,12 @@
|
||||
"python -m pytest passes from repo root"
|
||||
],
|
||||
"priority": 40,
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"notes": "Source issue: docs/issues/40-devnet-dashboard-topup.md. Mainnet deployments set --devnet-topup 0.",
|
||||
"dependsOn": [
|
||||
"US-039"
|
||||
]
|
||||
],
|
||||
"completionNotes": "POST /v1/account/topup with session auth and flag gating; tests/test_accounts.py covers flag off/on, own-account credit, and cross-account 403."
|
||||
},
|
||||
{
|
||||
"id": "US-041",
|
||||
@@ -946,7 +949,7 @@
|
||||
],
|
||||
"priority": 42,
|
||||
"status": "in-design",
|
||||
"notes": "Source issue: docs/issues/42-gguf-llamacpp-node-backend.md. Distributed native path: ADR-0024. Sequencing: phase C before A/B investigation.",
|
||||
"notes": "Source issue: docs/issues/42-gguf-llamacpp-node-backend.md. Phase C before ADR-0024 distributed worker; see runtime sequencing in issue file.",
|
||||
"dependsOn": [
|
||||
"US-036"
|
||||
]
|
||||
@@ -984,12 +987,12 @@
|
||||
],
|
||||
"priority": 44,
|
||||
"status": "in-progress",
|
||||
"notes": "Source issue: docs/issues/44-tracker-shard-source-partial-download.md. Download path largely implemented 2026-07-06; partial LOAD (meta-device materialization) and two-machine acceptance remain.",
|
||||
"notes": "Source issue: docs/issues/44-tracker-shard-source-partial-download.md. Download path and partial LOAD implemented; live two-machine LAN verification remains.",
|
||||
"dependsOn": [
|
||||
"US-004",
|
||||
"US-012"
|
||||
],
|
||||
"completionNotes": "Tracker models-dir indexing, layer-scoped tar stream, HF allow_patterns client-side from remote index, per-file download API with retries, symlink dereference in tar writers. Remaining: true partial model load and live two-machine verification."
|
||||
"completionNotes": "Tracker models-dir indexing, layer-scoped tar stream, HF allow_patterns client-side from remote index, per-file download API with retries, symlink dereference in tar writers. Partial LOAD via init_empty_weights + layer-scoped safetensors materialization; memory-scaling and checksum fallback tests pass. Remaining: live two-machine test (machine B receives only assigned files from A, no HF)."
|
||||
},
|
||||
{
|
||||
"id": "US-045",
|
||||
@@ -1072,10 +1075,46 @@
|
||||
"US-033",
|
||||
"US-039"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "US-048",
|
||||
"title": "48 — Memory budget, shard slots, and dropout relocation hardening",
|
||||
"description": "Harden the capacity contract around US-013 coverage-first assignment: enforce memory budget and max_loaded_shards in rebalance/dropout relocation, and decide whether one node may host multiple concurrent shard backends or max_loaded_shards remains metadata until runtime support lands.",
|
||||
"acceptanceCriteria": [
|
||||
"Assignment/rebalance never exceeds memory budget or max_loaded_shards",
|
||||
"Dropout test restores full coverage without violating capacity limits",
|
||||
"CLI --memory and --max-shards reflected in registration payload",
|
||||
"python -m pytest tests/test_tracker_routing.py tests/test_node_startup.py passes"
|
||||
],
|
||||
"priority": 48,
|
||||
"status": "open",
|
||||
"notes": "Source issue: docs/issues/48-memory-budget-shard-slots-and-dropout-relocation.md. Renumbered from duplicate slot 20. Enables spare shard slots for ADR-0026 managed placement.",
|
||||
"dependsOn": [
|
||||
"US-013"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "US-050",
|
||||
"title": "50 — Qwen3.6-27B demand-driven managed placement",
|
||||
"description": "Offer pinned Qwen/Qwen3.6-27B as a recommended text-only chat model. Valid chat requests prove demand; when spare fleet capacity exists, the tracker assigns managed nodes to reach complete coverage. Pinned startup assignments remain immutable per ADR-0026; NCA admission required before routable.",
|
||||
"acceptanceCriteria": [
|
||||
"First valid request for an uncovered variant queues demand and returns 503 model_loading until complete validated coverage exists",
|
||||
"Managed assignments use only spare capacity and carry managed: true",
|
||||
"Pinned startup assignments are never silently retargeted",
|
||||
"Optional quantization field (bfloat16/int8/nf4) with coverage-vote UI semantics per scratch PRD",
|
||||
"python -m pytest passes from repo root"
|
||||
],
|
||||
"priority": 50,
|
||||
"status": "in-design",
|
||||
"notes": "Source: .scratch/qwen3.6-27b-demand-placement/PRD.md and docs/issues/50-qwen3.6-27b-demand-placement.md. Reconciled with ADR-0026 and ADR-0023.",
|
||||
"dependsOn": [
|
||||
"US-035",
|
||||
"US-048"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"updatedAt": "2026-07-13T16:40:00.000Z",
|
||||
"updatedAt": "2026-07-13T17:00:00.000Z",
|
||||
"statusVocabulary": {
|
||||
"open": "Not started",
|
||||
"in-design": "Decisions pending before implementation can begin",
|
||||
|
||||
Reference in New Issue
Block a user