Files
neuron-tai/.claude/memory/project-status.md
2026-07-07 14:53:37 +02:00

5.2 KiB
Raw Blame History

name, description, metadata
name description metadata
project-status Current state of neuron-tai development as of 2026-07-02
node_type type
memory project

Project Status (2026-07-02)

All 35 user stories in docs/prd.json are done (35/35), including the reward-system arc US-030…US-035 completed 2026-07-02:

  • BillingLedger (packages/tracker/meshnet_tracker/billing.py): event-sourced USDT ledger, gossip-replicated across the hive (id-deduped events), SQLite-persisted. 90/10 split by work units, per-model per-1K-token pricing, 402 before routing.
  • Solana custodial adapter (packages/contracts/meshnet_contracts/solana_adapter.py): urllib JSON-RPC + solders signing. NOTE: installed solana-py 0.40 has NO sync client — don't import solana.rpc.api / spl.token.client.
  • scripts/devnet_setup.py: creates mock-USDT mint + treasury, writes .env.devnet; --mint-to funds test clients.
  • TrackerServer threads: deposit watcher (exactly-once via deposit- event ids) + leader-only settlement loop (threshold OR max-period, dust floor, resend-by-settlement-id → no double-pay).
  • Forfeiture penalty: validator forfeits pending balance + strike; 3 strikes ban; probation redirects shares to protocol cut. Math in packages/validator/README.md.
  • Web dashboard: GET /dashboard on any tracker, embedded dashboard.html, 4s polling.
  • Observed routing throughput: tracker records rolling observed tokens/sec per (node_id, model) from completed proxied inference requests, exposes it via /v1/stats and /v1/network/map, shows it on the dashboard, and prefers observed per-model TPS over startup benchmark for routing when samples exist.

Suite: 222 passed, 3 skipped (openai/langchain packages missing in .venv — pre-existing).

Why: design locked in ADR-0015 (USDT custodial settlement; TAI deferred, protocol cut = future TAI liquidity). How to apply: next steps are live devnet verification (run devnet_setup.py, start tracker with --solana-rpc-url/--usdt-mint/--treasury-keypair --billing-db), then the TAI mint when volume justifies it. Work not yet committed to git as of session end — check git status.

Alpha hardening (2026-07-05)

Implementation complete for alpha-scoped blockers in .scratch/alpha-hardening/: 16/22 issues are done, including auth/gossip/service-token, persisted strike/ban/reputation, zero starting credit + spend cap, tracker-authoritative accounting, wallet binding proof, TOPLOC audit primitive, hop bisection, reputation scoring/routing, adaptive audits, and penalty wiring. Remaining 6/22 are ready-for-human / post-alpha or ops-gated: 1215 multi-tracker money/Raft ordering hardening, 17 duplicate US-020 renumbering approval, and 21 honest-noise calibration corpus before production audit thresholds. Current verification: uv run pytest -k 'not test_legacy_start_without_port_uses_next_available_port' passes 316, skips 3; full uv run pytest has one environmental failure while local meshnet-node PID 1263451 occupies port 7000.

Historical handoff note: /mnt/c/Users/popov/Downloads/neuron-tai-alpha-handoff-2026-07-04.md is useful for navigation and original audit context, but it predates the completed .scratch/alpha-hardening/ planning artifacts. Treat its "missing ADR/issues/README" statements as stale; prefer .scratch/alpha-hardening/README.md and .scratch/alpha-hardening/handoff.md for current task order.

Windows CUDA node (working as of 2026-07-01)

  • miniforge3 base env, torch 2.7.1+cu118, torchvision 0.22.x+cu118
  • RTX 4060 Laptop GPU, 8 GB VRAM, benchmark index ~11,200
  • Run: meshnet-node start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-0.5B-Instruct
  • Known: tracker registration fails with http:// — must use https://
  • pynvml deprecation warning is harmless (use nvidia-ml-py to silence it)

Model cache layout (2026-07-07)

  • Node downloads now cache files directly under <download_dir>/<model>/, not <model>/layers_<start>-<end>/, so a wider cached layer assignment can satisfy a later narrower assignment without duplicate shard folders.
  • Downloader checks tracker-advertised files + file_sizes before peer/HF download; complete local files return immediately and preserve any extra files already in the model folder.
  • Verification: downloader/startup targeted subset passes (pytest tests/test_node_startup.py -k "download_shard or same_shard"). Full tests/test_node_startup.py has 46 passed and 4 unrelated Windows chmod/path separator failures.
  • Live Windows confirmation: meshnet-node start --tracker http://192.168.0.179:8080 --model Qwen3.6-35B-A3B reuses F:\_STORAGE\models\qwen3.6-35b-a3b, prints Cached at, registers, and reaches ready as node 5gMLrmyB-26b1f8a4204a.
  • Follow-up fix: preset-model startup now starts the heartbeat thread after registration; without this, the node appeared briefly on the dashboard and was purged on first inference/route after heartbeat expiry. Tracker dashboard now has a "Console output" panel backed by /v1/console for node register/expiry, routing failures, and proxy events.
  • Qwen3.6-35B-A3B reserve-based split is expected: an 79 GB CPU node may be assigned layers 0-36, and a second node fills 37-39. Do not "fix" this by bypassing the 20% assignment reserve unless the shard-planning policy changes.