Files
Stephen M AbbottandClaude Fable 5 9e995a4dcc Tests + CI, rate limiting, karma v1, owner tools, instant realtime, deploy guide
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>
2026-07-25 12:40:55 -07:00

22 lines
1.1 KiB
Plaintext

MIT License
Copyright (c) 2026 SpareCycles contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.