Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/swarm-review-classifier
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas 3f5f348270 review classifier: truncate an over-long reason instead of dropping the verdict
An answer whose reason ran past 500 characters was rejected whole, so the
verdict was lost and the one error row turned the review into no_verdict.
The reason is cut to the cap, ending in an ellipsis; verdict and certainty
are kept.
2026-10-13 21:23:03 +02:00
..
src review classifier: truncate an over-long reason instead of dropping the verdict 2026-10-13 21:23:03 +02:00
tests swarm-review-classifier: claude's environment is an allowlist, not the daemon's 2026-10-12 13:11:21 +02:00
Cargo.toml swarm-review-classifier: answer a try-out with one claude run per classification 2026-10-12 13:11:21 +02:00
README.md review classifier: truncate an over-long reason instead of dropping the verdict 2026-10-13 21:23:03 +02:00

swarm-review-classifier

The review classifier's try-out service, in the swarm-review-classifier container on the host that sets deploy.review-classifier.enable. The design is docs/swarm/review-classifier.md.

swarm-controller reads a PR (its head commit, its commits and its diff) and sends it, with the operator's classifications, as a request on the queue. This service asks a small model one classification at a time and answers with the result table and the overall verdict. It writes nothing to the forge and holds no forge credential.

What a run is

  • The shared context first: a system prompt, the PR's commits with their full messages, and the diff with lockfiles collapsed as hive-forge diff does. Every classification's prompt starts with the same bytes.
  • One claude --print per classification, with no session, no tools (--tools ""), no MCP server, its own empty directory and ANTHROPIC_API_KEY in its environment only.
  • An answer is a JSON object with a verdict, a certainty and a reason; a reason over 500 characters is cut to 500, ending in …. A failed run, a timeout or an answer that doesn't validate leaves that row without a verdict, and it doesn't count.
  • A run with no API key, or with no classification answered, fails as a whole: the caller sees an error, never a verdict.

Credentials

The container holds one credential: its own store certificate, which nspawn hands in at start without a copy on disk. With it the service reads its queue client secret at start and the API key at every run, so a key written or removed in the store takes effect on the next run. Its store role reads exactly those two paths.