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

  1. Patch the nfs meta file to include the correct worktree_id, then retry try_nfs_remove
  2. Look up the pin manually (grove daemon/DB) via source path or dest and delete it with the admin path
  3. 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

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


AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31). Data as JSON: /api/errors/e6205acfa294f842. Report an issue: GitHub.