From 26b3c6f886b19cdb590b194c1988261cd5843a58 Mon Sep 17 00:00:00 2001 From: satyaborg Date: Tue, 16 Jun 2026 11:22:53 +1000 Subject: [PATCH] feat: group loop result output into sections --- devloop | 51 +++++++++++++++++++++++------------------ scripts/devloop_test.sh | 14 ++++++++--- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/devloop b/devloop index cda26ac..3a79a23 100755 --- a/devloop +++ b/devloop @@ -1771,23 +1771,24 @@ next_pass_from_track() { maybe_enter_worktree() { local shell_path old_pwd - if [ "$ENTER_WORKTREE" != true ]; then return; fi - if [ "$USE_TUI" != true ]; then return; fi - if [ ! -t 0 ] || [ ! -t 1 ]; then return; fi - if [ -z "$WORKTREE_REPO" ] || [ -z "$SOURCE_REPO" ]; then return; fi - if [ "$WORKTREE_REPO" = "$SOURCE_REPO" ]; then return; fi - if [ ! -d "$WORKTREE_REPO" ]; then return; fi + if ! will_enter_worktree_shell; then return; fi shell_path="${SHELL:-/bin/sh}" old_pwd="$PWD" - printf '\n' >&2 - ui_status_line "ok" "worktree shell" "$WORKTREE_REPO" - printf '%s\n' "exit the shell to return to devloop's final status" >&2 cd "$WORKTREE_REPO" || return "$shell_path" -i cd "$old_pwd" || return } +will_enter_worktree_shell() { + [ "$ENTER_WORKTREE" = true ] || return 1 + [ "$USE_TUI" = true ] || return 1 + [ -t 0 ] && [ -t 1 ] || return 1 + [ -n "$WORKTREE_REPO" ] && [ -n "$SOURCE_REPO" ] || return 1 + [ "$WORKTREE_REPO" != "$SOURCE_REPO" ] || return 1 + [ -d "$WORKTREE_REPO" ] || return 1 +} + run_command() { local report_format="html" local strict=true @@ -3948,27 +3949,33 @@ title_from_slug() { print_result() { printf '\n' - result_line "result" "$STATUS" - result_line "passes" "$PASSES / $MAX" - result_line "coder" "$(agent_label "$CODER")" - result_line "reviewer" "$(agent_label "$REVIEWER")" - result_line "branch" "$FINAL_BRANCH" - result_line "commit" "${FINAL_COMMIT:-none}" - if [ -n "$PULL_REQUEST" ]; then result_line "pr" "$PULL_REQUEST"; fi - if [ "$WORKTREE_REPO" != "$SOURCE_REPO" ]; then result_line "worktree" "$WORKTREE_REPO"; fi - result_line "report" "$(display_path "$REPORT")" - result_line "track" "$(display_path "$TRACK")" + printf 'devloop %s\n\n' "$STATUS" + result_line "Passes" "$PASSES / $MAX" + result_line "Agents" "$(agent_label "$CODER") -> $(agent_label "$REVIEWER")" + result_line "Branch" "$FINAL_BRANCH" + result_line "Commit" "${FINAL_COMMIT:-none}" + if [ "$WORKTREE_REPO" != "$SOURCE_REPO" ]; then result_line "Worktree" "$WORKTREE_REPO"; fi + printf '\nOpen Next\n' + if [ -n "$PULL_REQUEST" ]; then result_line "PR" "$PULL_REQUEST"; fi + result_line "Report" "$(display_path "$REPORT")" + result_line "Track" "$(display_path "$TRACK")" + if will_enter_worktree_shell; then + printf '\nShell\n' + printf ' Exit the shell to return to devloop.\n' + fi } result_line() { - local label="$1:" + local label="$1" local value="$2" - printf '%-10s%s\n' "$label" "$value" + printf ' %-10s %s\n' "$label" "$value" } display_path() { local file="$1" - if [ "$WORKTREE_REPO" != "$SOURCE_REPO" ]; then + if will_enter_worktree_shell; then + printf '%s\n' "$file" + elif [ "$WORKTREE_REPO" != "$SOURCE_REPO" ]; then printf '%s/%s\n' "$WORKTREE_REPO" "$file" else printf '%s\n' "$file" diff --git a/scripts/devloop_test.sh b/scripts/devloop_test.sh index 4c7ea21..4d4141f 100755 --- a/scripts/devloop_test.sh +++ b/scripts/devloop_test.sh @@ -1451,8 +1451,15 @@ if ! accept_output="$(run_loop "$loop_repo" "e2e-accept" accept 1 2>&1)"; then fail "accept loop failed" fi contains "$accept_output" "accepted" "accept loop" -accept_worktree="$(printf '%s\n' "$accept_output" | sed -nE 's/^worktree:[[:space:]]+//p')" +accept_worktree="$(printf '%s\n' "$accept_output" | sed -nE 's/^[[:space:]]*Worktree[[:space:]]+//p')" [[ -f "$accept_worktree/result.txt" ]] || fail "accept loop did not write result" +contains "$accept_output" "Open Next" "accept loop" +if ! printf '%s\n' "$accept_output" | grep -F "Report" | grep -F "$accept_worktree/.devloop/reports/e2e-accept.html" >/dev/null; then + fail "accept loop missing worktree-qualified report path" +fi +if ! printf '%s\n' "$accept_output" | grep -F "Track" | grep -F "$accept_worktree/.devloop/tracks/e2e-accept.md" >/dev/null; then + fail "accept loop missing worktree-qualified track path" +fi contains "$(cat "$accept_worktree/.devloop/logs/e2e-accept-r1-verify.log")" "verify pass" "verify hook" contains "$(run_repo_main "$loop_repo" status)" "e2e-accept" "status command" contains "$(run_repo_main "$loop_repo" clean --dry-run)" "skip:" "clean skips accepted" @@ -1493,7 +1500,8 @@ if ! pr_accept_output="$(run_loop "$pr_repo" "e2e-pr-accept" accept 1 "--create- fail "PR accept loop failed" fi contains "$pr_accept_output" "accepted" "PR accept loop" -contains "$pr_accept_output" "pr:" "PR accept loop" +contains "$pr_accept_output" "Open Next" "PR accept loop" +contains "$pr_accept_output" "PR https://github.com/satyaborg/devloop/pull/123" "PR accept loop" create_line="$(grep -n 'gh pr create' "$pr_log" | cut -d: -f1 | head -n 1)" review_line="$(grep -n 'agent reviewer 1' "$pr_log" | cut -d: -f1 | head -n 1)" [[ -n "$create_line" && -n "$review_line" && "$create_line" -lt "$review_line" ]] || fail "PR was not created before reviewer pass 1" @@ -1705,7 +1713,7 @@ if ! no_changes_output="$(run_loop "$loop_repo" "e2e-no-changes" no-changes 1 2> fail "no changes loop failed" fi contains "$no_changes_output" "accepted" "no changes loop" -contains "$no_changes_output" "commit: none" "no changes loop" +contains "$no_changes_output" "Commit none" "no changes loop" ok "e2e no changes" loop_repo="$work/loop-dirty"