mirror of
https://github.com/stevologic/spare-cycles.git
synced 2026-11-06 05:16:38 +00:00
Foundation: - 52-test pytest suite: API flows, queue protocol, model matching, recovery paths, karma ordering, node revocation, plus integration tests that run a real uvicorn process for the OpenAI-compatible round-trip (incl. SSE streaming) and drive the actual node_connector.py script end to end - GitHub Actions CI on ubuntu 3.11/3.12 + windows 3.12; front-end syntax check and byte-compile included; README badge - The suite immediately caught a real bug: empty `messages` on /v1/chat/completions slipped past the prompt guard and hung the request for the full 180s timeout instead of returning 400 - fixed Security & fairness: - Sliding-window rate limits on /api/register and /api/recover (recovery codes were brute-forceable at wire speed before); X-Forwarded-For aware, SPARECYCLES_RATELIMIT=off escape hatch - Karma v1: projects whose owners have completed donations are claimed before non-donors at equal tier - boolean, never starves newcomers. Donor badge on marketplace cards. Operability: - Owner tools: PATCH /api/projects/<slug> (edit everything), rotate inference key, cancel queued jobs from the feed - Node revocation (DELETE /api/nodes/<id>) - token dies instantly, donation attribution is preserved via soft delete - /api/health with real DB round-trip for uptime monitors - DEPLOY.md: droplet + systemd + Caddy/nginx (long-poll timeouts), backups, tunnel alternative, connector-as-a-service - MIT LICENSE (swap if you prefer another) Latency & robustness: - Realtime pipeline now wakes on asyncio.Events when jobs arrive/finish instead of 0.4-1s poll ticks; DB remains source of truth with poll fallback - job pickup and answer delivery are effectively instant - Connector: clean SIGTERM shutdown (systemd/docker), UTF-8 stdout on Windows pipes, model select keeps unlisted current values when editing Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>