xai-org/grok-build · warning
unmounted dest {} has grove metadata without a worktree id;
Error message
unmounted dest {} has grove metadata without a worktree id; retaining pin and dest What it means
After a successful verified unmount, remove_nfs_worktree reads the grove metadata from the dest to find the worktree id needed to delete the daemon-side pin. If metadata exists but has no worktree id, the pin cannot be identified, so it bails and retains both the pin and the dest rather than leaking an orphan pin.
Source
Thrown at crates/codegen/xai-fast-worktree/src/nfs/remove.rs:65
if lookup_from_markers(worktree_path).is_none() {
bail!(
"{} is still a mountpoint without a grove marker; refusing umount/rm",
worktree_path.display()
);
}
plain_umount(worktree_path)?;
}
if !super::dest_is_known_unmounted(worktree_path) {
bail!(
"unmount of {} could not be verified (still mounted or mount table \
inconclusive); retaining backing and pin",
worktree_path.display()
);
}
let meta = lookup_nfs_meta(worktree_path);
if let Some(m) = meta.as_ref() {
let Some(id) = m.worktree_id.as_deref() else {
bail!(
"unmounted dest {} has grove metadata without a worktree id; \
retaining pin and dest",
worktree_path.display()
);
};
if !is_safe_worktree_id(id) {
bail!(
"unmounted dest {} has unsafe worktree id {id:?}; retaining pin and dest",
worktree_path.display()
);
}
if let Some(src) = m.source.as_ref() {
{
let _ = src;
bail!("pin delete requires grove");
}
}
if let Some(data_dir) = m.data_dir.as_ref() {View on GitHub (pinned to bc7f02eddd)
Solutions
- Patch the nfs meta file to include the correct worktree_id, then retry try_nfs_remove
- Look up the pin manually (grove daemon/DB) via source path or dest and delete it with the admin path
- If the pin is truly orphaned, remove the dest and the meta manually and clean orphan pins via gc_orphan_pins on a grove-enabled build
Example fix
// before
let meta = lookup_nfs_meta(&dest).unwrap(); // meta lacks worktree_id
remove_pin_for(&dest)?;
// after
let mut meta = lookup_nfs_meta(&dest).expect("meta");
meta.worktree_id = Some(id_from_daemon_or_db); // repair metadata
write_nfs_meta(&dest, &meta)?;
try_nfs_remove(&dest)?; Defensive patterns
Strategy: validation
Validate before calling
if let Some(m) = lookup_nfs_meta(&dest) {
if m.worktree_id.as_deref().map_or(true, |id| !is_safe_worktree_id(id)) {
eprintln!("dest meta lacks a usable worktree_id; repair metadata before removal");
}
} Prevention
- Never hand-edit or truncate nfs meta files
- Ensure upgrades migrate meta to the current schema (with worktree_id)
- Record the worktree id elsewhere (DB) as a backup for pin cleanup
When it happens
Trigger: Calling try_nfs_remove on an unmounted dest whose nfs meta file records grove metadata but lacks worktree_id — meta written by an older tool version, partially-written/corrupted meta, or hand-edited metadata.
Common situations: Upgrading from a version that didn't store worktree_id in nfs meta; meta file truncated by a crash; user copied the meta file from another dest.
Related errors
- pin delete requires grove
- invalid worktree id from dest: {worktree_id}
- invalid worktree id {:?}
- mount table inconclusive for {}; refusing remove
- daemon RemoveWorktree failed: {e}
AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31).
Data as JSON: /api/errors/e6205acfa294f842.
Report an issue: GitHub.