agent-control-plane 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +6 -0
  2. package/npm/bin/agent-control-plane.js +149 -5
  3. package/package.json +2 -3
  4. package/tools/vendor/codex-quota/README.md +8 -16
  5. package/tools/vendor/codex-quota/lib/claude-accounts.js +2 -68
  6. package/tools/vendor/codex-quota/lib/claude-usage.js +76 -667
  7. package/tools/vendor/codex-quota/lib/display.js +6 -14
  8. package/tools/vendor/codex-quota/lib/handlers.js +32 -117
  9. package/tools/vendor/codex-quota/lib/sync.js +9 -14
  10. package/tools/tests/test-agent-control-plane-npm-cli.sh +0 -280
  11. package/tools/tests/test-agent-github-update-labels-falls-back-to-repository-id.sh +0 -56
  12. package/tools/tests/test-agent-project-claude-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -89
  13. package/tools/tests/test-agent-project-claude-session-wrapper-does-not-retry-provider-quota.sh +0 -82
  14. package/tools/tests/test-agent-project-claude-session-wrapper-retries-transient-failures.sh +0 -90
  15. package/tools/tests/test-agent-project-claude-session-wrapper-times-out.sh +0 -73
  16. package/tools/tests/test-agent-project-claude-session-wrapper.sh +0 -103
  17. package/tools/tests/test-agent-project-cleanup-session-orphan-fallback.sh +0 -90
  18. package/tools/tests/test-agent-project-cleanup-session-skip-worktree-cleanup.sh +0 -90
  19. package/tools/tests/test-agent-project-codex-live-thread-persist.sh +0 -76
  20. package/tools/tests/test-agent-project-codex-recovery.sh +0 -731
  21. package/tools/tests/test-agent-project-codex-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -105
  22. package/tools/tests/test-agent-project-codex-session-wrapper.sh +0 -97
  23. package/tools/tests/test-agent-project-open-pr-worktree-config-prefix.sh +0 -81
  24. package/tools/tests/test-agent-project-openclaw-session-wrapper-clears-stale-sandbox-artifacts.sh +0 -109
  25. package/tools/tests/test-agent-project-openclaw-session-wrapper-infers-blocked-result-contract.sh +0 -89
  26. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-literal-env-artifacts.sh +0 -113
  27. package/tools/tests/test-agent-project-openclaw-session-wrapper-recovers-version-mismatch.sh +0 -135
  28. package/tools/tests/test-agent-project-openclaw-session-wrapper-resident.sh +0 -179
  29. package/tools/tests/test-agent-project-openclaw-session-wrapper-reuses-existing-agent-after-add-race.sh +0 -119
  30. package/tools/tests/test-agent-project-openclaw-session-wrapper-terminates-rate-limit-hang.sh +0 -91
  31. package/tools/tests/test-agent-project-openclaw-session-wrapper.sh +0 -117
  32. package/tools/tests/test-agent-project-publish-issue-pr-prunes-stale-worktree-entry.sh +0 -148
  33. package/tools/tests/test-agent-project-publish-issue-pr-reads-archived-session.sh +0 -146
  34. package/tools/tests/test-agent-project-publish-issue-pr-recovers-final-head.sh +0 -145
  35. package/tools/tests/test-agent-project-publish-issue-pr-reuses-existing-worktree.sh +0 -147
  36. package/tools/tests/test-agent-project-reconcile-failure-reason.sh +0 -456
  37. package/tools/tests/test-agent-project-reconcile-issue-archived-session-fallback.sh +0 -96
  38. package/tools/tests/test-agent-project-reconcile-issue-before-blocked.sh +0 -90
  39. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery-uses-recovered-worktree.sh +0 -212
  40. package/tools/tests/test-agent-project-reconcile-issue-host-verification-recovery.sh +0 -207
  41. package/tools/tests/test-agent-project-reconcile-issue-provider-quota-schedules-provider-cooldown.sh +0 -101
  42. package/tools/tests/test-agent-project-reconcile-issue-session-backfills-lane-metadata-from-worker-key.sh +0 -113
  43. package/tools/tests/test-agent-project-reconcile-issue-session-clears-stale-failed-summary.sh +0 -117
  44. package/tools/tests/test-agent-project-reconcile-issue-session-initializes-shared-agent-home.sh +0 -55
  45. package/tools/tests/test-agent-project-reconcile-issue-session-normalizes-runner-state.sh +0 -125
  46. package/tools/tests/test-agent-project-reconcile-issue-session-records-invalid-contract-summary.sh +0 -118
  47. package/tools/tests/test-agent-project-reconcile-issue-session-skips-duplicate-blocked-comment.sh +0 -144
  48. package/tools/tests/test-agent-project-reconcile-issue-session-standardizes-no-commits-blocker.sh +0 -145
  49. package/tools/tests/test-agent-project-reconcile-issue-session-synthesizes-blocked-comment.sh +0 -139
  50. package/tools/tests/test-agent-project-reconcile-pr-blocked-host-recovery.sh +0 -242
  51. package/tools/tests/test-agent-project-reconcile-pr-guard-blocked-no-commit.sh +0 -142
  52. package/tools/tests/test-agent-project-reconcile-pr-provider-quota-schedules-provider-cooldown.sh +0 -106
  53. package/tools/tests/test-agent-project-reconcile-pr-session-initializes-shared-agent-home.sh +0 -66
  54. package/tools/tests/test-agent-project-reconcile-pr-updated-branch-noop.sh +0 -129
  55. package/tools/tests/test-audit-agent-worktrees-active-launch-skips-git-inspection.sh +0 -69
  56. package/tools/tests/test-audit-agent-worktrees-broken-worktree.sh +0 -43
  57. package/tools/tests/test-audit-agent-worktrees-pending-launch-owner.sh +0 -46
  58. package/tools/tests/test-audit-agent-worktrees-unreconciled-owner.sh +0 -79
  59. package/tools/tests/test-audit-issue-routing-managed-branch-globs.sh +0 -56
  60. package/tools/tests/test-branch-verification-guard-generated-artifacts.sh +0 -72
  61. package/tools/tests/test-branch-verification-guard-targeted-coverage.sh +0 -125
  62. package/tools/tests/test-codex-quota-manager-failure-driven-rotation.sh +0 -178
  63. package/tools/tests/test-codex-quota-wrapper.sh +0 -37
  64. package/tools/tests/test-contribution-docs.sh +0 -18
  65. package/tools/tests/test-control-plane-dashboard-runtime-smoke.sh +0 -343
  66. package/tools/tests/test-create-follow-up-issue.sh +0 -73
  67. package/tools/tests/test-dashboard-launchd-bootstrap.sh +0 -55
  68. package/tools/tests/test-flow-export-execution-env-exports-repo-id.sh +0 -30
  69. package/tools/tests/test-flow-export-github-cli-auth-env-prefers-git-credential.sh +0 -48
  70. package/tools/tests/test-flow-github-api-repo-fallback-preserves-input.sh +0 -85
  71. package/tools/tests/test-flow-github-api-repo-prefers-explicit-repository-id.sh +0 -60
  72. package/tools/tests/test-flow-github-issue-list-falls-back-to-repository-id.sh +0 -64
  73. package/tools/tests/test-flow-github-pr-list-falls-back-to-repository-id.sh +0 -77
  74. package/tools/tests/test-flow-resident-can-reuse-does-not-leak-metadata.sh +0 -52
  75. package/tools/tests/test-flow-resident-reap-stale-controllers.sh +0 -63
  76. package/tools/tests/test-flow-resolve-codex-quota-tools.sh +0 -104
  77. package/tools/tests/test-flow-runtime-doctor-profile-selection.sh +0 -27
  78. package/tools/tests/test-heartbeat-codex-pr-linked-issue-exclusion.sh +0 -79
  79. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-idle-controller.sh +0 -115
  80. package/tools/tests/test-heartbeat-hooks-enqueue-resident-issue-for-live-lane-controller.sh +0 -117
  81. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-claude.sh +0 -96
  82. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop-codex.sh +0 -96
  83. package/tools/tests/test-heartbeat-hooks-start-resident-issue-loop.sh +0 -96
  84. package/tools/tests/test-heartbeat-loop-auth-wait-does-not-consume-capacity.sh +0 -170
  85. package/tools/tests/test-heartbeat-loop-blocked-recovery-lane.sh +0 -201
  86. package/tools/tests/test-heartbeat-loop-blocked-recovery-vs-pr-reservation.sh +0 -201
  87. package/tools/tests/test-heartbeat-loop-idle-resident-controller-does-not-block-launches.sh +0 -160
  88. package/tools/tests/test-heartbeat-loop-pr-launch-dedup.sh +0 -133
  89. package/tools/tests/test-heartbeat-loop-provider-cooldown-suppresses-launches.sh +0 -157
  90. package/tools/tests/test-heartbeat-loop-reaps-stale-resident-controller.sh +0 -181
  91. package/tools/tests/test-heartbeat-loop-waiting-provider-resident-controller-does-not-block-launches.sh +0 -160
  92. package/tools/tests/test-heartbeat-ready-issues-blocked-recovery.sh +0 -134
  93. package/tools/tests/test-heartbeat-safe-auto-dynamic-concurrency.sh +0 -162
  94. package/tools/tests/test-heartbeat-safe-auto-no-tmux-sessions.sh +0 -136
  95. package/tools/tests/test-heartbeat-safe-auto-openclaw-skips-codex-quota.sh +0 -139
  96. package/tools/tests/test-heartbeat-safe-auto-quota-health-signal.sh +0 -119
  97. package/tools/tests/test-heartbeat-safe-auto-stale-shared-loop-pid-does-not-skip.sh +0 -140
  98. package/tools/tests/test-heartbeat-safe-auto-static-capacity-without-quota-cache.sh +0 -142
  99. package/tools/tests/test-heartbeat-safe-auto-zero-healthy-pools.sh +0 -141
  100. package/tools/tests/test-heartbeat-sync-issue-labels-empty-schedule.sh +0 -65
  101. package/tools/tests/test-heartbeat-sync-open-agent-prs-terminal-clears-running.sh +0 -179
  102. package/tools/tests/test-install-dashboard-launchd.sh +0 -78
  103. package/tools/tests/test-install-project-launchd-adds-tool-paths.sh +0 -87
  104. package/tools/tests/test-install-project-launchd.sh +0 -110
  105. package/tools/tests/test-issue-local-workspace-install-policy.sh +0 -81
  106. package/tools/tests/test-issue-publish-scope-guard-docs-signal.sh +0 -70
  107. package/tools/tests/test-issue-reconcile-hooks-success-clears-blocked.sh +0 -36
  108. package/tools/tests/test-kick-scheduler-requires-explicit-profile.sh +0 -47
  109. package/tools/tests/test-label-follow-up-issues-falls-back-to-repository-id.sh +0 -132
  110. package/tools/tests/test-manual-operator-entrypoints-require-explicit-profile.sh +0 -64
  111. package/tools/tests/test-package-funding-metadata.sh +0 -21
  112. package/tools/tests/test-package-public-metadata.sh +0 -62
  113. package/tools/tests/test-placeholder-worker-adapters.sh +0 -38
  114. package/tools/tests/test-pr-reconcile-hooks-refreshes-recurring-issue-checklist.sh +0 -110
  115. package/tools/tests/test-pr-risk-cohesive-mobile-locale-scope.sh +0 -70
  116. package/tools/tests/test-pr-risk-fix-label-semantics.sh +0 -114
  117. package/tools/tests/test-pr-risk-local-first-no-checks.sh +0 -70
  118. package/tools/tests/test-prepare-worktree-simple-repo-baseline.sh +0 -67
  119. package/tools/tests/test-profile-activate.sh +0 -33
  120. package/tools/tests/test-profile-adopt-allow-missing-repo.sh +0 -68
  121. package/tools/tests/test-profile-adopt-skip-workspace-sync-missing-file.sh +0 -61
  122. package/tools/tests/test-profile-adopt-syncs-anchor-and-workspace.sh +0 -90
  123. package/tools/tests/test-profile-smoke-collision.sh +0 -44
  124. package/tools/tests/test-profile-smoke-invalid-claude-config.sh +0 -31
  125. package/tools/tests/test-profile-smoke-invalid-provider-pool.sh +0 -68
  126. package/tools/tests/test-profile-smoke-repo-slug-mismatch.sh +0 -36
  127. package/tools/tests/test-profile-smoke.sh +0 -45
  128. package/tools/tests/test-project-init-force-and-skip-sync.sh +0 -61
  129. package/tools/tests/test-project-init-repo-slug-mismatch.sh +0 -29
  130. package/tools/tests/test-project-init.sh +0 -66
  131. package/tools/tests/test-project-launchd-bootstrap.sh +0 -66
  132. package/tools/tests/test-project-remove.sh +0 -150
  133. package/tools/tests/test-project-runtime-supervisor.sh +0 -47
  134. package/tools/tests/test-project-runtimectl-launchd.sh +0 -115
  135. package/tools/tests/test-project-runtimectl-missing-profile.sh +0 -54
  136. package/tools/tests/test-project-runtimectl-start-falls-back-to-bootstrap.sh +0 -108
  137. package/tools/tests/test-project-runtimectl-status-reports-supervisor-as-heartbeat-parent.sh +0 -95
  138. package/tools/tests/test-project-runtimectl-status-supervisor-running.sh +0 -59
  139. package/tools/tests/test-project-runtimectl-stop-cancels-pending-kick.sh +0 -85
  140. package/tools/tests/test-project-runtimectl-stop-clears-running-labels.sh +0 -78
  141. package/tools/tests/test-project-runtimectl.sh +0 -212
  142. package/tools/tests/test-provider-cooldown-state-prefers-runtime-worker-context.sh +0 -39
  143. package/tools/tests/test-provider-cooldown-state.sh +0 -59
  144. package/tools/tests/test-public-repo-docs.sh +0 -160
  145. package/tools/tests/test-reconcile-pr-worker-acp-config-routing.sh +0 -75
  146. package/tools/tests/test-render-dashboard-snapshot.sh +0 -149
  147. package/tools/tests/test-render-flow-config-demo-profile.sh +0 -36
  148. package/tools/tests/test-render-flow-config-provider-pool-fallback.sh +0 -81
  149. package/tools/tests/test-render-flow-config.sh +0 -52
  150. package/tools/tests/test-run-codex-task-claude-routing.sh +0 -125
  151. package/tools/tests/test-run-codex-task-codex-resident-routing.sh +0 -108
  152. package/tools/tests/test-run-codex-task-kilo-routing.sh +0 -98
  153. package/tools/tests/test-run-codex-task-openclaw-resident-routing.sh +0 -117
  154. package/tools/tests/test-run-codex-task-openclaw-routing.sh +0 -113
  155. package/tools/tests/test-run-codex-task-opencode-routing.sh +0 -98
  156. package/tools/tests/test-run-codex-task-provider-pool-fallback-routing.sh +0 -146
  157. package/tools/tests/test-scaffold-profile.sh +0 -108
  158. package/tools/tests/test-serve-dashboard.sh +0 -93
  159. package/tools/tests/test-start-issue-worker-blocked-context.sh +0 -129
  160. package/tools/tests/test-start-issue-worker-blocks-complete-recurring-checklist.sh +0 -189
  161. package/tools/tests/test-start-issue-worker-local-install-routing.sh +0 -157
  162. package/tools/tests/test-start-issue-worker-profile-template-routing.sh +0 -149
  163. package/tools/tests/test-start-issue-worker-recurring-resident-reuse-codex.sh +0 -212
  164. package/tools/tests/test-start-issue-worker-recurring-resident-reuse.sh +0 -219
  165. package/tools/tests/test-start-issue-worker-renders-verification-snippet.sh +0 -155
  166. package/tools/tests/test-start-issue-worker-resident-reuse-falls-back-to-new-worktree.sh +0 -199
  167. package/tools/tests/test-start-pr-fix-worker-host-blocker-context.sh +0 -275
  168. package/tools/tests/test-start-resident-issue-loop-adopts-next-recurring-issue.sh +0 -185
  169. package/tools/tests/test-start-resident-issue-loop-clears-pending-while-waiting-due.sh +0 -152
  170. package/tools/tests/test-start-resident-issue-loop-consumes-queued-lease.sh +0 -186
  171. package/tools/tests/test-start-resident-issue-loop-fails-over-provider-pool.sh +0 -212
  172. package/tools/tests/test-start-resident-issue-loop-immediate-cycles.sh +0 -148
  173. package/tools/tests/test-start-resident-issue-loop-waits-for-provider.sh +0 -194
  174. package/tools/tests/test-start-resident-issue-loop-waits-for-terminal-reconcile-status.sh +0 -198
  175. package/tools/tests/test-start-resident-issue-loop-yields-to-live-lane-controller.sh +0 -145
  176. package/tools/tests/test-sync-pr-labels-fix-lane-uses-repair-queued.sh +0 -67
  177. package/tools/tests/test-sync-recurring-issue-checklist-backfills-workflow-complete-blocker.sh +0 -70
  178. package/tools/tests/test-sync-recurring-issue-checklist.sh +0 -95
  179. package/tools/tests/test-sync-shared-agent-home-local-source-root.sh +0 -66
  180. package/tools/tests/test-sync-shared-agent-home-preserves-unrelated-workflow-catalog-skill.sh +0 -47
  181. package/tools/tests/test-test-smoke.sh +0 -86
  182. package/tools/tests/test-uninstall-project-launchd.sh +0 -37
  183. package/tools/tests/test-update-github-labels-prefers-sibling-helper.sh +0 -49
  184. package/tools/tests/test-workflow-catalog.sh +0 -43
@@ -1,106 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SCRIPT="${FLOW_ROOT}/tools/bin/agent-project-reconcile-pr-session"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- shared_home="$tmpdir/shared-home"
11
- shared_bin="$shared_home/tools/bin"
12
- runs_root="$tmpdir/runs"
13
- history_root="$tmpdir/history"
14
- repo_root="$tmpdir/repo"
15
- bin_dir="$tmpdir/bin"
16
- hook_file="$tmpdir/hooks.sh"
17
- provider_log="$tmpdir/provider.log"
18
- retry_reason_file="$tmpdir/retry-reason.txt"
19
- failed_flag="$tmpdir/failed.flag"
20
-
21
- mkdir -p "$shared_bin" "$runs_root/fl-pr-88" "$history_root" "$repo_root" "$bin_dir"
22
- git -C "$repo_root" init -b main >/dev/null 2>&1
23
-
24
- cat >"$runs_root/fl-pr-88/run.env" <<'EOF'
25
- PR_NUMBER=88
26
- SESSION=fl-pr-88
27
- CODING_WORKER=claude
28
- CLAUDE_MODEL=sonnet
29
- WORKTREE=/tmp/mock-pr-worktree
30
- EOF
31
-
32
- cat >"$shared_bin/agent-project-worker-status" <<EOF
33
- #!/usr/bin/env bash
34
- set -euo pipefail
35
- cat <<OUT
36
- STATUS=FAILED
37
- FAILURE_REASON=provider-quota-limit
38
- META_FILE=${runs_root}/fl-pr-88/run.env
39
- OUT
40
- EOF
41
-
42
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF'
43
- #!/usr/bin/env bash
44
- set -euo pipefail
45
- exit 0
46
- EOF
47
-
48
- cat >"$shared_bin/provider-cooldown-state.sh" <<EOF
49
- #!/usr/bin/env bash
50
- set -euo pipefail
51
- printf '%s\n' "\$*" >>"${provider_log}"
52
- printf 'READY=no\n'
53
- EOF
54
-
55
- cat >"$shared_bin/branch-verification-guard.sh" <<'EOF'
56
- #!/usr/bin/env bash
57
- set -euo pipefail
58
- exit 0
59
- EOF
60
-
61
- cat >"$hook_file" <<EOF
62
- pr_schedule_retry() {
63
- printf '%s\n' "\$1" >"${retry_reason_file}"
64
- }
65
- pr_after_failed() {
66
- : >"${failed_flag}"
67
- }
68
- pr_after_reconciled() { :; }
69
- EOF
70
-
71
- cat >"$bin_dir/gh" <<'EOF'
72
- #!/usr/bin/env bash
73
- set -euo pipefail
74
- if [[ "${1:-}" == "pr" && "${2:-}" == "view" ]]; then
75
- printf '{"state":"OPEN","baseRefName":"main"}\n'
76
- exit 0
77
- fi
78
- exit 0
79
- EOF
80
-
81
- chmod +x \
82
- "$shared_bin/agent-project-worker-status" \
83
- "$shared_bin/agent-project-cleanup-session" \
84
- "$shared_bin/provider-cooldown-state.sh" \
85
- "$shared_bin/branch-verification-guard.sh" \
86
- "$bin_dir/gh"
87
-
88
- output="$(
89
- PATH="$bin_dir:$PATH" \
90
- SHARED_AGENT_HOME="$shared_home" \
91
- bash "$SCRIPT" \
92
- --session fl-pr-88 \
93
- --repo-slug example/repo \
94
- --repo-root "$repo_root" \
95
- --runs-root "$runs_root" \
96
- --history-root "$history_root" \
97
- --hook-file "$hook_file"
98
- )"
99
-
100
- grep -q '^schedule provider-quota-limit$' "$provider_log"
101
- test "$(cat "$retry_reason_file")" = "provider-quota-limit"
102
- test -f "$failed_flag"
103
- grep -q '^STATUS=FAILED$' <<<"$output"
104
- grep -q '^FAILURE_REASON=provider-quota-limit$' <<<"$output"
105
-
106
- echo "pr reconcile provider cooldown scheduling test passed"
@@ -1,66 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- tmpdir="$(mktemp -d)"
5
- trap 'rm -rf "$tmpdir"' EXIT
6
-
7
- shared_agent_home="$tmpdir/shared-agent-home"
8
- shared_bin="$shared_agent_home/tools/bin"
9
- shared_assets="$shared_agent_home/assets"
10
- runs_root="$tmpdir/runs"
11
- history_root="$tmpdir/history"
12
- repo_root="$tmpdir/repo-root"
13
- bin_dir="$tmpdir/bin"
14
-
15
- mkdir -p "$shared_bin" "$shared_assets" "$runs_root/fl-pr-999" "$history_root" "$repo_root" "$bin_dir"
16
- printf '{}\n' >"$shared_assets/workflow-catalog.json"
17
-
18
- cp tools/bin/agent-project-reconcile-pr-session "$shared_bin/agent-project-reconcile-pr-session"
19
- cp tools/bin/flow-shell-lib.sh "$shared_bin/flow-shell-lib.sh"
20
- cp tools/bin/flow-config-lib.sh "$shared_bin/flow-config-lib.sh"
21
-
22
- cat >"$shared_bin/agent-project-worker-status" <<EOF
23
- #!/usr/bin/env bash
24
- set -euo pipefail
25
- printf 'SESSION=fl-pr-999\n'
26
- printf 'STATUS=RUNNING\n'
27
- printf 'META_FILE=%s\n' "$runs_root/fl-pr-999/run.env"
28
- EOF
29
-
30
- cat >"$bin_dir/gh" <<'EOF'
31
- #!/usr/bin/env bash
32
- set -euo pipefail
33
-
34
- if [[ "${1:-}" == "pr" && "${2:-}" == "view" ]]; then
35
- printf '{"state":"OPEN","baseRefName":"main"}\n'
36
- exit 0
37
- fi
38
-
39
- echo "unexpected gh invocation: $*" >&2
40
- exit 1
41
- EOF
42
-
43
- chmod +x \
44
- "$shared_bin/agent-project-reconcile-pr-session" \
45
- "$shared_bin/flow-shell-lib.sh" \
46
- "$shared_bin/flow-config-lib.sh" \
47
- "$shared_bin/agent-project-worker-status" \
48
- "$bin_dir/gh"
49
-
50
- cat >"$runs_root/fl-pr-999/run.env" <<EOF
51
- PR_NUMBER=999
52
- WORKTREE=$tmpdir/pr-worktree
53
- EOF
54
-
55
- output="$(
56
- AGENT_CONTROL_PLANE_ROOT="$shared_agent_home" \
57
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
58
- bash "$shared_bin/agent-project-reconcile-pr-session" \
59
- --session fl-pr-999 \
60
- --repo-slug example/repo \
61
- --repo-root "$repo_root" \
62
- --runs-root "$runs_root" \
63
- --history-root "$history_root"
64
- )"
65
-
66
- [[ "$output" == *"STATUS=RUNNING"* ]]
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- PR_RECONCILE_SRC="${FLOW_ROOT}/tools/bin/agent-project-reconcile-pr-session"
6
- FLOW_SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
7
- FLOW_CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
8
-
9
- tmpdir="$(mktemp -d)"
10
- trap 'rm -rf "$tmpdir"' EXIT
11
-
12
- shared_agent_home="$tmpdir/shared-agent-home"
13
- shared_bin="$shared_agent_home/tools/bin"
14
- runs_root="$tmpdir/runs"
15
- history_root="$tmpdir/history"
16
- bin_dir="$tmpdir/bin"
17
- origin_repo="$tmpdir/origin.git"
18
- repo_root="$tmpdir/repo-root"
19
- pr_worktree="$tmpdir/pr-worktree"
20
-
21
- mkdir -p "$shared_bin" "$runs_root/fl-pr-200" "$history_root" "$bin_dir"
22
-
23
- cp "$PR_RECONCILE_SRC" "$shared_bin/agent-project-reconcile-pr-session"
24
- cp "$FLOW_SHELL_LIB" "$shared_bin/flow-shell-lib.sh"
25
- cp "$FLOW_CONFIG_LIB" "$shared_bin/flow-config-lib.sh"
26
-
27
- git init --bare "$origin_repo" >/dev/null 2>&1
28
- git clone "$origin_repo" "$repo_root" >/dev/null 2>&1
29
- printf 'hello\n' >"$repo_root/README.md"
30
- git -C "$repo_root" add README.md
31
- git -C "$repo_root" -c user.name=Test -c user.email=test@example.com commit -m "init" >/dev/null
32
- git -C "$repo_root" branch -M main >/dev/null 2>&1
33
- git -C "$repo_root" push origin main >/dev/null 2>&1
34
- git -C "$repo_root" checkout -b codex/pr-200-noop >/dev/null 2>&1
35
- git -C "$repo_root" push origin codex/pr-200-noop >/dev/null 2>&1
36
-
37
- git clone "$origin_repo" "$pr_worktree" >/dev/null 2>&1
38
- git -C "$pr_worktree" checkout codex/pr-200-noop >/dev/null 2>&1
39
-
40
- cat >"$shared_bin/agent-project-worker-status" <<EOF
41
- #!/usr/bin/env bash
42
- set -euo pipefail
43
- printf 'SESSION=fl-pr-200\n'
44
- printf 'STATUS=SUCCEEDED\n'
45
- printf 'META_FILE=%s\n' "$runs_root/fl-pr-200/run.env"
46
- EOF
47
-
48
- cat >"$shared_bin/agent-project-cleanup-session" <<'EOF'
49
- #!/usr/bin/env bash
50
- set -euo pipefail
51
- exit 0
52
- EOF
53
-
54
- cat >"$shared_bin/branch-verification-guard.sh" <<'EOF'
55
- #!/usr/bin/env bash
56
- set -euo pipefail
57
- exit 0
58
- EOF
59
-
60
- cat >"$bin_dir/gh" <<'EOF'
61
- #!/usr/bin/env bash
62
- set -euo pipefail
63
-
64
- if [[ "${1:-}" == "pr" && "${2:-}" == "view" ]]; then
65
- printf '{"state":"OPEN","baseRefName":"main"}\n'
66
- exit 0
67
- fi
68
-
69
- echo "unexpected gh invocation: $*" >&2
70
- exit 1
71
- EOF
72
-
73
- chmod +x \
74
- "$shared_bin/agent-project-reconcile-pr-session" \
75
- "$shared_bin/flow-shell-lib.sh" \
76
- "$shared_bin/flow-config-lib.sh" \
77
- "$shared_bin/agent-project-worker-status" \
78
- "$shared_bin/agent-project-cleanup-session" \
79
- "$shared_bin/branch-verification-guard.sh" \
80
- "$bin_dir/gh"
81
-
82
- cat >"$runs_root/fl-pr-200/run.env" <<EOF
83
- PR_NUMBER=200
84
- WORKTREE=$pr_worktree
85
- PR_HEAD_REF=codex/pr-200-noop
86
- EOF
87
-
88
- cat >"$runs_root/fl-pr-200/result.env" <<'EOF'
89
- OUTCOME=updated-branch
90
- ACTION=host-push-pr-branch
91
- EOF
92
-
93
- pr_reason_file="$tmpdir/pr-retry-reason.txt"
94
- pr_blocked_file="$tmpdir/pr-blocked.txt"
95
- pr_hook="$tmpdir/pr-hook.sh"
96
-
97
- cat >"$pr_hook" <<EOF
98
- #!/usr/bin/env bash
99
- set -euo pipefail
100
- pr_schedule_retry() {
101
- printf '%s\n' "\$1" >"$pr_reason_file"
102
- }
103
- pr_after_blocked() {
104
- : >"$pr_blocked_file"
105
- }
106
- pr_after_reconciled() { :; }
107
- EOF
108
-
109
- chmod +x "$pr_hook"
110
-
111
- pr_out="$(
112
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
113
- bash "$shared_bin/agent-project-reconcile-pr-session" \
114
- --session fl-pr-200 \
115
- --repo-slug example/repo \
116
- --repo-root "$repo_root" \
117
- --runs-root "$runs_root" \
118
- --history-root "$history_root" \
119
- --hook-file "$pr_hook"
120
- )"
121
-
122
- test "$(cat "$pr_reason_file")" = "updated-branch-no-commits-ahead"
123
- test -f "$pr_blocked_file"
124
- grep -q '^STATUS=SUCCEEDED$' <<<"$pr_out"
125
- grep -q '^OUTCOME=blocked$' <<<"$pr_out"
126
- grep -q '^ACTION=host-noop-updated-branch$' <<<"$pr_out"
127
- grep -q '^FAILURE_REASON=updated-branch-no-commits-ahead$' <<<"$pr_out"
128
-
129
- echo "agent-project reconcile PR updated-branch noop test passed"
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- AUDIT_SCRIPT="${FLOW_ROOT}/tools/bin/audit-agent-worktrees.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- repo_root="$tmpdir/repo"
11
- worktree_root="$tmpdir/worktrees"
12
- agent_root="$tmpdir/agent"
13
- shim_dir="$tmpdir/shim"
14
-
15
- mkdir -p "$repo_root" "$worktree_root" "$agent_root/runs" "$agent_root/state/pending-launches" "$shim_dir"
16
- repo_root="$(cd "$repo_root" && pwd -P)"
17
- worktree_root="$(cd "$worktree_root" && pwd -P)"
18
- agent_root="$(cd "$agent_root" && pwd -P)"
19
- shim_dir="$(cd "$shim_dir" && pwd -P)"
20
-
21
- git -C "$repo_root" init -b main >/dev/null 2>&1
22
- git -C "$repo_root" config user.name "Codex"
23
- git -C "$repo_root" config user.email "codex@example.com"
24
- printf 'root\n' >"$repo_root/README.md"
25
- git -C "$repo_root" add README.md
26
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
27
-
28
- worktree_path="$worktree_root/issue-360-active-launch-skip"
29
- git -C "$repo_root" worktree add -b "agent/alpha/issue-360-active-launch-skip" "$worktree_path" main >/dev/null 2>&1
30
- worktree_path="$(cd "$worktree_path" && pwd -P)"
31
-
32
- sleep 60 &
33
- pending_pid=$!
34
- printf '%s\n' "$pending_pid" >"$agent_root/state/pending-launches/issue-360.pid"
35
-
36
- cat >"$shim_dir/git" <<EOF
37
- #!/usr/bin/env bash
38
- set -euo pipefail
39
- real_git="$(command -v git)"
40
- protected_worktree="${worktree_path}"
41
-
42
- if [[ "\${1:-}" == "-C" && "\${2:-}" == "\$protected_worktree" ]]; then
43
- case "\${3:-}" in
44
- rev-parse|status)
45
- echo "unexpected git inspection for active-launch worktree" >&2
46
- exit 99
47
- ;;
48
- esac
49
- fi
50
-
51
- exec "\$real_git" "\$@"
52
- EOF
53
- chmod +x "$shim_dir/git"
54
-
55
- output="$(
56
- PATH="$shim_dir:$PATH" \
57
- F_LOSNING_AGENT_REPO_ROOT="$repo_root" \
58
- F_LOSNING_WORKTREE_ROOT="$worktree_root" \
59
- F_LOSNING_AGENT_ROOT="$agent_root" \
60
- bash "$AUDIT_SCRIPT" --cleanup
61
- )"
62
-
63
- kill "$pending_pid" >/dev/null 2>&1 || true
64
- wait "$pending_pid" 2>/dev/null || true
65
-
66
- grep -q '^LEGACY_AGENT_WORKTREE_COUNT=0$' <<<"$output"
67
- test -d "$worktree_path"
68
-
69
- echo "audit agent worktrees active-launch inspection skip test passed"
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- AUDIT_SCRIPT="${FLOW_ROOT}/tools/bin/audit-agent-worktrees.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- repo_root="$tmpdir/repo"
11
- worktree_root="$tmpdir/worktrees"
12
- agent_root="$tmpdir/agent"
13
-
14
- mkdir -p "$repo_root" "$worktree_root" "$agent_root/runs"
15
- repo_root="$(cd "$repo_root" && pwd -P)"
16
- worktree_root="$(cd "$worktree_root" && pwd -P)"
17
- agent_root="$(cd "$agent_root" && pwd -P)"
18
-
19
- git -C "$repo_root" init -b main >/dev/null 2>&1
20
- git -C "$repo_root" config user.name "Codex"
21
- git -C "$repo_root" config user.email "codex@example.com"
22
- printf 'root\n' >"$repo_root/README.md"
23
- git -C "$repo_root" add README.md
24
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
25
-
26
- broken_branch="agent/alpha/issue-360-broken-test"
27
- broken_worktree="$worktree_root/issue-360-broken-test"
28
- git -C "$repo_root" worktree add -b "$broken_branch" "$broken_worktree" main >/dev/null 2>&1
29
- rm -f "$broken_worktree/.git"
30
-
31
- output="$(
32
- F_LOSNING_AGENT_REPO_ROOT="$repo_root" \
33
- F_LOSNING_WORKTREE_ROOT="$worktree_root" \
34
- F_LOSNING_AGENT_ROOT="$agent_root" \
35
- bash "$AUDIT_SCRIPT" --cleanup
36
- )"
37
-
38
- grep -q '^BROKEN_WORKTREE=yes$' <<<"$output"
39
- grep -q '^CLEANUP=removed$' <<<"$output"
40
- grep -q '^LEGACY_AGENT_WORKTREE_CLEANED=1$' <<<"$output"
41
- test ! -e "$broken_worktree"
42
-
43
- echo "audit agent worktrees broken-worktree cleanup test passed"
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- AUDIT_SCRIPT="${FLOW_ROOT}/tools/bin/audit-agent-worktrees.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- repo_root="$tmpdir/repo"
11
- worktree_root="$tmpdir/worktrees"
12
- agent_root="$tmpdir/agent"
13
-
14
- mkdir -p "$repo_root" "$worktree_root" "$agent_root/runs" "$agent_root/state/pending-launches"
15
- repo_root="$(cd "$repo_root" && pwd -P)"
16
- worktree_root="$(cd "$worktree_root" && pwd -P)"
17
- agent_root="$(cd "$agent_root" && pwd -P)"
18
-
19
- git -C "$repo_root" init -b main >/dev/null 2>&1
20
- git -C "$repo_root" config user.name "Codex"
21
- git -C "$repo_root" config user.email "codex@example.com"
22
- printf 'root\n' >"$repo_root/README.md"
23
- git -C "$repo_root" add README.md
24
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
25
-
26
- worktree_path="$worktree_root/issue-360-pending-test"
27
- git -C "$repo_root" worktree add -b "agent/alpha/issue-360-pending-test" "$worktree_path" main >/dev/null 2>&1
28
-
29
- sleep 60 &
30
- pending_pid=$!
31
- printf '%s\n' "$pending_pid" >"$agent_root/state/pending-launches/issue-360.pid"
32
-
33
- output="$(
34
- F_LOSNING_AGENT_REPO_ROOT="$repo_root" \
35
- F_LOSNING_WORKTREE_ROOT="$worktree_root" \
36
- F_LOSNING_AGENT_ROOT="$agent_root" \
37
- bash "$AUDIT_SCRIPT" --cleanup
38
- )"
39
-
40
- kill "$pending_pid" >/dev/null 2>&1 || true
41
- wait "$pending_pid" 2>/dev/null || true
42
-
43
- grep -q '^LEGACY_AGENT_WORKTREE_COUNT=0$' <<<"$output"
44
- test -d "$worktree_path"
45
-
46
- echo "audit agent worktrees pending-launch owner test passed"
@@ -1,79 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- AUDIT_SCRIPT="${FLOW_ROOT}/tools/bin/audit-agent-worktrees.sh"
6
- CONFIG_LIB="${FLOW_ROOT}/tools/bin/flow-config-lib.sh"
7
- SHELL_LIB="${FLOW_ROOT}/tools/bin/flow-shell-lib.sh"
8
-
9
- tmpdir="$(mktemp -d)"
10
- cleanup() {
11
- rm -rf "$tmpdir"
12
- }
13
- trap cleanup EXIT
14
-
15
- repo_root="$tmpdir/repo"
16
- worktree_root="$tmpdir/worktrees"
17
- agent_root="$tmpdir/agent"
18
- bin_dir="$tmpdir/bin"
19
-
20
- mkdir -p "$repo_root" "$worktree_root" "$agent_root/runs/fl-issue-250" "$agent_root/state/pending-launches" "$bin_dir"
21
- repo_root="$(cd "$repo_root" && pwd -P)"
22
- worktree_root="$(cd "$worktree_root" && pwd -P)"
23
- agent_root="$(cd "$agent_root" && pwd -P)"
24
- bin_dir="$(cd "$bin_dir" && pwd -P)"
25
-
26
- git -C "$repo_root" init -b main >/dev/null 2>&1
27
- git -C "$repo_root" config user.name "Codex"
28
- git -C "$repo_root" config user.email "codex@example.com"
29
- printf 'root\n' >"$repo_root/README.md"
30
- git -C "$repo_root" add README.md
31
- git -C "$repo_root" commit -m "init" >/dev/null 2>&1
32
-
33
- worktree_path="$worktree_root/issue-250-unreconciled-owner"
34
- git -C "$repo_root" worktree add -b "agent/acp/issue-250-unreconciled-owner" "$worktree_path" main >/dev/null 2>&1
35
- worktree_path="$(cd "$worktree_path" && pwd -P)"
36
-
37
- cp "$AUDIT_SCRIPT" "$bin_dir/audit-agent-worktrees.sh"
38
- cp "$CONFIG_LIB" "$bin_dir/flow-config-lib.sh"
39
- cp "$SHELL_LIB" "$bin_dir/flow-shell-lib.sh"
40
- chmod +x "$bin_dir/audit-agent-worktrees.sh"
41
- chmod +x "$bin_dir/flow-config-lib.sh" "$bin_dir/flow-shell-lib.sh"
42
-
43
- cat >"$bin_dir/agent-project-worker-status" <<'EOF'
44
- #!/usr/bin/env bash
45
- set -euo pipefail
46
- printf 'STATUS=SUCCEEDED\n'
47
- EOF
48
- chmod +x "$bin_dir/agent-project-worker-status"
49
-
50
- cat >"$bin_dir/agent-cleanup-worktree" <<'EOF'
51
- #!/usr/bin/env bash
52
- set -euo pipefail
53
- echo "cleanup should not be called for unreconciled owner" >&2
54
- exit 99
55
- EOF
56
- chmod +x "$bin_dir/agent-cleanup-worktree"
57
-
58
- mkdir -p "$agent_root/runs/acp-issue-250"
59
- cat >"$agent_root/runs/acp-issue-250/run.env" <<EOF
60
- SESSION=acp-issue-250
61
- WORKTREE=$worktree_path
62
- BRANCH=agent/acp/issue-250-unreconciled-owner
63
- EOF
64
-
65
- output="$(
66
- ACP_ISSUE_SESSION_PREFIX="acp-issue-" \
67
- ACP_PR_SESSION_PREFIX="acp-pr-" \
68
- ACP_ISSUE_BRANCH_PREFIX="agent/acp/issue" \
69
- ACP_MANAGED_PR_BRANCH_GLOBS="agent/acp/* codex/* openclaw/*" \
70
- F_LOSNING_AGENT_REPO_ROOT="$repo_root" \
71
- F_LOSNING_WORKTREE_ROOT="$worktree_root" \
72
- F_LOSNING_AGENT_ROOT="$agent_root" \
73
- bash "$bin_dir/audit-agent-worktrees.sh" --cleanup
74
- )"
75
-
76
- grep -q '^LEGACY_AGENT_WORKTREE_COUNT=0$' <<<"$output"
77
- test -d "$worktree_path"
78
-
79
- echo "audit agent worktrees unreconciled owner test passed"
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- SCRIPT="${FLOW_ROOT}/bin/audit-issue-routing.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- bin_dir="$tmpdir/bin"
11
- mkdir -p "$bin_dir"
12
-
13
- cat >"$bin_dir/gh" <<'EOF'
14
- #!/usr/bin/env bash
15
- set -euo pipefail
16
-
17
- if [[ "${1:-}" == "pr" && "${2:-}" == "list" ]]; then
18
- cat <<'JSON'
19
- [
20
- {"headRefName":"agent/acp/issue-501-slice","body":"","labels":[],"comments":[]}
21
- ]
22
- JSON
23
- exit 0
24
- fi
25
-
26
- if [[ "${1:-}" == "issue" && "${2:-}" == "list" ]]; then
27
- cat <<'JSON'
28
- [
29
- {"number":501,"title":"linked issue","createdAt":"2026-03-15T10:00:00Z","updatedAt":"2026-03-15T10:15:00Z","labels":[{"name":"agent-running"}]},
30
- {"number":502,"title":"stale running issue","createdAt":"2026-03-15T10:05:00Z","updatedAt":"2026-03-15T10:20:00Z","labels":[{"name":"agent-running"}]}
31
- ]
32
- JSON
33
- exit 0
34
- fi
35
-
36
- echo "unexpected gh args: $*" >&2
37
- exit 1
38
- EOF
39
-
40
- chmod +x "$bin_dir/gh"
41
-
42
- output="$(
43
- PATH="$bin_dir:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
44
- F_LOSNING_REPO_SLUG="example/repo" \
45
- ACP_MANAGED_PR_BRANCH_GLOBS="agent/acp/* codex/* openclaw/*" \
46
- bash "$SCRIPT" 0
47
- )"
48
-
49
- grep -q $'^502\tstale-agent-running\t' <<<"$output"
50
- if grep -q $'^501\t' <<<"$output"; then
51
- echo "issue linked by custom managed branch unexpectedly remained routable" >&2
52
- printf '%s\n' "$output" >&2
53
- exit 1
54
- fi
55
-
56
- echo "audit issue routing managed branch globs test passed"
@@ -1,72 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- FLOW_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
- GUARD_SCRIPT="${FLOW_ROOT}/tools/bin/branch-verification-guard.sh"
6
-
7
- tmpdir="$(mktemp -d)"
8
- trap 'rm -rf "$tmpdir"' EXIT
9
-
10
- origin_repo="$tmpdir/origin.git"
11
- repo_root="$tmpdir/repo-root"
12
- run_dir="$tmpdir/run"
13
-
14
- mkdir -p "$run_dir"
15
-
16
- git init --bare "$origin_repo" >/dev/null 2>&1
17
- git clone "$origin_repo" "$repo_root" >/dev/null 2>&1
18
- mkdir -p "$repo_root/src"
19
-
20
- cat >"$repo_root/package.json" <<'EOF'
21
- {
22
- "name": "guard-demo",
23
- "private": true,
24
- "scripts": {
25
- "test": "node --test"
26
- }
27
- }
28
- EOF
29
-
30
- cat >"$repo_root/src/index.js" <<'EOF'
31
- export const status = 'ready';
32
- EOF
33
-
34
- git -C "$repo_root" add .
35
- git -C "$repo_root" -c user.name=Test -c user.email=test@example.com commit -m "init" >/dev/null
36
- git -C "$repo_root" branch -M main >/dev/null 2>&1
37
- git -C "$repo_root" push origin main >/dev/null 2>&1
38
-
39
- git -C "$repo_root" checkout -b guard/generated-artifacts >/dev/null 2>&1
40
-
41
- cat >"$repo_root/src/index.js" <<'EOF'
42
- export const status = 'updated';
43
- EOF
44
-
45
- cat >"$repo_root/.agent-session.env" <<'EOF'
46
- export ACP_SESSION='demo-issue-1'
47
- EOF
48
-
49
- cat >"$repo_root/pnpm-lock.yaml" <<'EOF'
50
- lockfileVersion: '9.0'
51
- EOF
52
-
53
- cat >"$run_dir/verification.jsonl" <<'EOF'
54
- {"status":"pass","command":"npm test"}
55
- EOF
56
-
57
- set +e
58
- guard_output="$("$GUARD_SCRIPT" --worktree "$repo_root" --base-ref origin/main --run-dir "$run_dir" 2>&1)"
59
- guard_status=$?
60
- set -e
61
-
62
- test "$guard_status" = "43"
63
- grep -q 'generated agent/session artifacts were included in the branch diff' <<<"$guard_output"
64
- grep -q 'lockfile changes were introduced without dependency manifest changes' <<<"$guard_output"
65
- grep -q '.agent-session.env' <<<"$guard_output"
66
- grep -q 'pnpm-lock.yaml' <<<"$guard_output"
67
-
68
- rm -f "$repo_root/.agent-session.env" "$repo_root/pnpm-lock.yaml"
69
-
70
- "$GUARD_SCRIPT" --worktree "$repo_root" --base-ref origin/main --run-dir "$run_dir" >/dev/null
71
-
72
- echo "branch verification guard generated artifacts test passed"