mm-worktree-task: --base flag + set -e safe returns (uncommitted WIP)
Committing work found uncommitted in the checkout: --base lets a unit be based on a branch other than main (used throughout the M32 cut-over session for u6-tests and hatchmate-migration bases), and the bare 'return' statements become 'return 0' so they cannot abort under set -e when the preceding test is false. Per the project agent-safety rule: untracked/uncommitted work that matters gets committed the day it is found, so local loss cannot take it. Claude-Session: https://claude.ai/code/session_014KNyfHmHpMbdMrHZXDRkAp
This commit is contained in:
@@ -25,6 +25,8 @@ Arguments:
|
||||
|
||||
Options:
|
||||
--slug <slug> Worktree/branch suffix (default: first 8 chars of uuid)
|
||||
--base <ref> Branch/commit the worktree is created from and that
|
||||
--collect diffs against (default: main)
|
||||
--focus "<line>" One-line focus appended to the task frame
|
||||
--brief <file> Use this file as the task body instead of/in addition
|
||||
to the fetched item
|
||||
@@ -56,6 +58,7 @@ UUID=""
|
||||
SLUG=""
|
||||
FOCUS=""
|
||||
BRIEF=""
|
||||
BASE="main"
|
||||
DOCS="recent"
|
||||
EXTRA_TOOLS=""
|
||||
TIMEOUT=1800
|
||||
@@ -69,6 +72,7 @@ while [[ $# -gt 0 ]]; do
|
||||
--slug) SLUG="$2"; shift 2 ;;
|
||||
--focus) FOCUS="$2"; shift 2 ;;
|
||||
--brief) BRIEF="$2"; shift 2 ;;
|
||||
--base) BASE="$2"; shift 2 ;;
|
||||
--docs) DOCS="$2"; shift 2 ;;
|
||||
--tools) EXTRA_TOOLS="$2"; shift 2 ;;
|
||||
--timeout) TIMEOUT="$2"; shift 2 ;;
|
||||
@@ -171,11 +175,11 @@ if [[ $COLLECT -eq 1 ]]; then
|
||||
err "no worktree found for slug '${SLUG}' (${WORKTREE})"
|
||||
exit 1
|
||||
fi
|
||||
info "git log --oneline main..HEAD"
|
||||
git -C "$WORKTREE" log --oneline main..HEAD || true
|
||||
info "git log --oneline ${BASE}..HEAD"
|
||||
git -C "$WORKTREE" log --oneline "${BASE}..HEAD" || true
|
||||
echo
|
||||
info "git diff --stat main...HEAD"
|
||||
git -C "$WORKTREE" diff --stat main...HEAD || true
|
||||
info "git diff --stat ${BASE}...HEAD"
|
||||
git -C "$WORKTREE" diff --stat "${BASE}...HEAD" || true
|
||||
echo
|
||||
if [[ -f "$RESULT_FILE" ]]; then
|
||||
info "report: $RESULT_FILE"
|
||||
@@ -223,15 +227,15 @@ fetch_item() {
|
||||
}
|
||||
|
||||
fetch_docs() {
|
||||
[[ "$DOCS" == "none" ]] && return
|
||||
[[ "$DOCS" == "none" ]] && return 0
|
||||
local list_json
|
||||
if [[ -n "${MM_WORKTREE_TASK_FAKE_DOCS_DIR:-}" ]]; then
|
||||
[[ -f "${MM_WORKTREE_TASK_FAKE_DOCS_DIR}/list.json" ]] || return
|
||||
[[ -f "${MM_WORKTREE_TASK_FAKE_DOCS_DIR}/list.json" ]] || return 0
|
||||
list_json="$(cat "${MM_WORKTREE_TASK_FAKE_DOCS_DIR}/list.json")"
|
||||
elif [[ -n "$UUID" ]]; then
|
||||
list_json="$(cp_cli planner items documents list "$UUID" --json 2>/dev/null || echo '{"documents":[]}')"
|
||||
else
|
||||
return
|
||||
return 0
|
||||
fi
|
||||
|
||||
while IFS=$'\t' read -r name updated; do
|
||||
@@ -368,6 +372,7 @@ if [[ $DRYRUN -eq 1 ]]; then
|
||||
echo " cp-cli from: ${CP_CLI_DIR:-<not found>}"
|
||||
echo " cp-cli ctx: ${CP_CONTEXT:-<cp-cli default>}"
|
||||
echo " Slug: ${SLUG}"
|
||||
echo " Base: ${BASE}"
|
||||
echo " UUID: ${UUID:-(none, --brief only)}"
|
||||
echo " Worktree: ${WORKTREE}"
|
||||
echo " Branch: ${BRANCH}"
|
||||
@@ -399,7 +404,7 @@ if [[ -d "$WORKTREE" ]] || git -C "$REPO_ROOT" show-ref --verify --quiet "refs/h
|
||||
fi
|
||||
|
||||
info "creating worktree ${WORKTREE} on branch ${BRANCH}"
|
||||
git -C "$REPO_ROOT" worktree add "$WORKTREE" -b "$BRANCH" main
|
||||
git -C "$REPO_ROOT" worktree add "$WORKTREE" -b "$BRANCH" "$BASE"
|
||||
|
||||
info "launching ask-minimax-run (detached, timeout ${TIMEOUT}s)"
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user