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 f4f459f0b2 move stored_secret from swarm-queue-client to swarm-secret-client
The module is a rename (97% similar); everything else in the diff follows
from the move:

- stored_secret.rs: private `chain()` helper, the 8-line copy of the queue
  crate's `chain` the module called as `crate::chain`; the queue crate's
  public `chain` stays.
- stored_secret.rs: `Duration::from_mins(5)` in `MAX_REREAD_DELAY` is
  unchanged moved code, not a new use.
- swarm-secret-client Cargo.toml: gains futures-util, tokio and tracing as
  dependencies and tokio `test-util` plus tracing-subscriber as dev
  dependencies; the module and its tests use them.
- swarm-queue-client Cargo.toml: drops futures-util and the tracing-subscriber
  dev dependency, which only the moved module used; its tokio dev comment is
  reworded to the tests that remain.
- Cargo.lock: the same dependency moves, nothing else.
- swarm-queue-client lib.rs: imports `swarm_secret_client::stored_secret`,
  and its tests use a small local `Store` in place of the moved module's
  test-only `Fake`, which is no longer reachable.
- callers (hive-c0re, swarm-builder, swarm-ci-metrics, swarm-claude-login,
  swarm-controller, swarm-nats-auth, swarm-review-classifier): import path
  only; no re-export is left behind.
2026-10-18 09:00:08 +02:00
..
src move stored_secret from swarm-queue-client to swarm-secret-client 2026-10-18 09:00:08 +02:00
tests review classifier: run on ACP when the swarm settings choose it 2026-10-14 10:14:36 +02:00
Cargo.toml swarm-review-classifier: test that Otel::record exports the run's cost 2026-10-14 10:14:36 +02:00
README.md review-classifier: ask a check once more when its answer isn't valid JSON 2026-10-16 16:55:07 +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, and claude gets that part as a content block of its own, with a cache breakpoint at its end.
  • 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; the prompt asks for a reason under 350 characters, and the classifier truncates one over the 500 cap to 499 plus …. A failed run, a timeout or an answer that doesn't validate leaves that row without a verdict, and it doesn't count. An answer that doesn't validate is asked for once more first, with a reminder to reply with the JSON object alone, within the same three minutes.
  • 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.