| Filename | Latest commit message | Latest commit date |
|---|---|---|
The rustls provider install is process setup every swarm binary runs, and swarm-secret-client depends on no other swarm crate, so a binary that only needs the provider and the store no longer links the queue client. - swarm-secret-client/src/lib.rs, Cargo.toml: the function, its test, a `//!` line on why it lives there, and the rustls dependency; rustls `ring` as a dev-dependency feature, so the test builds both providers as the binaries do and fails if the install is dropped. - swarm-queue-client/src/lib.rs, Cargo.toml: function and test removed; `connect()` calls the secret client's; rustls dropped (no other use), swarm-secret-client added. - swarm-metrics-auth/Cargo.toml: drop swarm-queue-client, whose only use was the provider; the binary no longer links async-nats. - swarm-logs-auth, swarm-logs, swarm-metrics, swarm-ci-metrics Cargo.toml: the dep comment no longer names the provider (they keep the dep for agent_token / the OIDC mint). - Cargo.toml: the rustls comment names the provider's new home. - 14 call sites (hive-agent, hive-c0re, hive-subagent-mcp x2, swarm-builder, swarm-ci-metrics, swarm-claude-login, swarm-controller, swarm-logs-auth, swarm-logs, swarm-metrics-auth, swarm-metrics, swarm-nats-auth, swarm-review-classifier): one-line path change. - Cargo.lock: the dependency edges above. |
||
| .. | ||
| src | ||
| tests | ||
| Cargo.toml | ||
| README.md | ||
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 diffdoes. Every classification's prompt starts with the same bytes, andclaudegets that part as a content block of its own, with a cache breakpoint at its end. - One
claude --printper classification, with no session, no tools (--tools ""), no MCP server, its own empty directory andANTHROPIC_API_KEYin 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.