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
..