Watch
0
0
Fork
You've already forked hyperhive
0

agents: define the work dir name once and test its creation

This commit is contained in:
atlas 2026-10-05 13:10:18 +02:00
commit 6ff348d88b
5 changed files with 18 additions and 3 deletions

View file

@ -1135,7 +1135,7 @@ impl Coordinator {
/// destroy/recreate. A sibling of `state/` rather than inside it, so a
/// claude started under `work/` never walks up into `state/CLAUDE.md`.
pub fn agent_work_dir(name: &hive_types::Ident) -> PathBuf {
crate::paths::agent_state_dir(name).join("work")
crate::paths::agent_state_dir(name).join(crate::paths::WORK_SUBDIR)
}
/// Per-agent harness-internal state dir. Bind-mounted RW into the

View file

@ -198,7 +198,7 @@ fn bind_own_agent_dirs(agent_name: &str, notes_dir: &Path, binds: &mut Vec<BindM
read_only: false,
});
if let Some(state_parent) = notes_dir.parent() {
for sub in ["harness", "work"] {
for sub in ["harness", crate::paths::WORK_SUBDIR] {
let dir = state_parent.join(sub);
if !dir.exists() {
let _ = std::fs::create_dir_all(&dir);

View file

@ -218,7 +218,7 @@ pub fn ensure_state_dir(notes_dir: &Path) -> Result<()> {
}
// Harness and work dirs are siblings of the agent-visible state dir.
if let Some(parent) = notes_dir.parent() {
for sibling in ["harness", "work"] {
for sibling in ["harness", crate::paths::WORK_SUBDIR] {
let dir = parent.join(sibling);
if !dir.exists() {
std::fs::create_dir_all(&dir)

View file

@ -410,3 +410,14 @@ async fn a_prebuild_inside_its_limit_returns_its_status() {
.expect("a fast child must not time out");
assert_eq!(status.code(), Some(3));
}
/// The setup path creates the agent's `work/` dir beside `state/`, so the
/// bind source exists before nspawn starts the container.
#[test]
fn ensure_state_dir_creates_the_work_dir() {
let root = tempfile::tempdir().expect("tempdir");
let notes_dir = root.path().join("state");
ensure_state_dir(&notes_dir).expect("ensure_state_dir");
assert!(notes_dir.is_dir());
assert!(root.path().join(crate::paths::WORK_SUBDIR).is_dir());
}

View file

@ -30,6 +30,10 @@ use std::path::{Path, PathBuf};
// its own callsites.
pub use hive_host_sock::{AGENTS_ROOT, GATEWAY_HTPASSWD, HOST_SOCKET, agent_state_dir};
/// Name of the per-agent working dir under `agents/<name>/`, a sibling of
/// `state/`. Bound RW into the container at `/agents/<name>/work`.
pub const WORK_SUBDIR: &str = "work";
/// Root of all hive-c0re persistent state.
// nix: the same literal is written in `nix/host-modules/hive-c0re/default.nix` — must match.
// Not option-driven: there is no `statePath` option, the path is hardcoded both sides.