From 57834ca8b1ac113fb35940f5c9f1387a05f82bf3 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 23 Jun 2026 08:31:58 -0500 Subject: [PATCH] fix(tools): default AGENT_WORK_ROOT to $HOME/mosaic/agent-work pr-merge.sh and its regression test hardcoded /home/hermes/agent-work as the AGENT_WORK_ROOT fallback, baking in one operator's home dir. Any other user (e.g. jarvis) hit 'mkdir: cannot create directory /home/hermes: Permission denied' on merge, and --skip-queue-guard did not avoid it (the mkdir is in the API/tea-error path, not the guard). Default to ${HOME:-/tmp}/mosaic/agent-work instead: per-user isolated, kept separate from the framework's ~/.config/mosaic config tree, with a /tmp last-ditch fallback for unset-HOME contexts (systemd/CI). An explicit AGENT_WORK_ROOT still overrides. 5 occurrences across 2 files. Co-Authored-By: Claude Opus 4.8 --- packages/mosaic/framework/tools/git/pr-merge.sh | 8 ++++---- .../framework/tools/git/test-pr-merge-gitea-empty-uid.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/mosaic/framework/tools/git/pr-merge.sh b/packages/mosaic/framework/tools/git/pr-merge.sh index be658a8..96cb06f 100755 --- a/packages/mosaic/framework/tools/git/pr-merge.sh +++ b/packages/mosaic/framework/tools/git/pr-merge.sh @@ -128,8 +128,8 @@ PY merge_gitea_with_api() { local host="$1" api_url token basic_auth body_file raw_code payload api_url="https://${host}/api/v1/repos/${OWNER}/${REPO}/pulls/${PR_NUMBER}/merge" - mkdir -p "${AGENT_WORK_ROOT:-/home/hermes/agent-work}" - body_file=$(mktemp "${AGENT_WORK_ROOT:-/home/hermes/agent-work}/pr-merge-api-response.XXXXXX") + mkdir -p "${AGENT_WORK_ROOT:-${HOME:-/tmp}/mosaic/agent-work}" + body_file=$(mktemp "${AGENT_WORK_ROOT:-${HOME:-/tmp}/mosaic/agent-work}/pr-merge-api-response.XXXXXX") payload='{"Do":"squash"}' token=$(get_gitea_token "$host" || true) @@ -214,8 +214,8 @@ case "$PLATFORM" in TEA_LOGIN="$(get_gitea_login_for_host "$HOST" || true)" if [[ -n "$TEA_LOGIN" ]]; then - mkdir -p "${AGENT_WORK_ROOT:-/home/hermes/agent-work}" - TEA_ERROR_FILE=$(mktemp "${AGENT_WORK_ROOT:-/home/hermes/agent-work}/pr-merge-tea-error.XXXXXX") + mkdir -p "${AGENT_WORK_ROOT:-${HOME:-/tmp}/mosaic/agent-work}" + TEA_ERROR_FILE=$(mktemp "${AGENT_WORK_ROOT:-${HOME:-/tmp}/mosaic/agent-work}/pr-merge-tea-error.XXXXXX") if tea pr merge "$PR_NUMBER" --style squash --repo "$OWNER/$REPO" --login "$TEA_LOGIN" 2> "$TEA_ERROR_FILE"; then rm -f "$TEA_ERROR_FILE" elif is_known_tea_empty_identity_failure "$TEA_ERROR_FILE"; then diff --git a/packages/mosaic/framework/tools/git/test-pr-merge-gitea-empty-uid.sh b/packages/mosaic/framework/tools/git/test-pr-merge-gitea-empty-uid.sh index c1aeb27..c642b81 100755 --- a/packages/mosaic/framework/tools/git/test-pr-merge-gitea-empty-uid.sh +++ b/packages/mosaic/framework/tools/git/test-pr-merge-gitea-empty-uid.sh @@ -4,7 +4,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -WORK_ROOT="${AGENT_WORK_ROOT:-/home/hermes/agent-work}" +WORK_ROOT="${AGENT_WORK_ROOT:-${HOME:-/tmp}/mosaic/agent-work}" SANDBOX="$WORK_ROOT/pr-merge-empty-uid-test-$$" MOCK_BIN="$SANDBOX/bin" REPO_DIR="$SANDBOX/repo"