chore(ci): dispatch ClaudeBox to the v2 webhook (retire abandoned v1 SSH-tunnel path)#23600
Merged
Conversation
ludamad
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The merge-train auto-fix (and every other ClaudeBox CI kickoff) goes through
.github/workflows/claudebox.yml, which SSH-tunneled to the abandoned v1 ClaudeBox server on the private build instance (http://localhost:4001/runviaci.aztec-labs.com). That v1 server is dead — symptom seen in #team-alpha:create_prfailing with "No GitHub access configured" and the analysis link pointing at a non-resolving v1 URL.ClaudeBox v2 runs as a public service at
https://claudebox.work(this is the same bot you get when you@ClaudeBoxin Slack). It exposes the same/runAPI, Bearer-authed withCLAUDEBOX_API_SECRET. The fix is to point CI at the v2 webhook and drop the v1 tunnel.What changed
.github/workflows/claudebox.yml— both jobs nowPOSTto${CLAUDEBOX_URL:-https://claudebox.work}/runinstead of tunneling to the v1 server. Removed theSetup SSH tunnelsteps and the 120-minute synchronous poll loop. Dispatch is now fire-and-forget: v2 reports progress to the bound Slack thread and to the GitHub comment IDs we pass through (comment_id/run_comment_id), so the/claudeboxPR-comment UX is preserved.ci3/slack_notify_with_claudebox_kickoff— forwards the Slack channel ID + thread ts it just posted to (-f slack_channel,-f slack_thread_ts). v2 threads its status reply under that kickoff message, restoring the Slack feedback loop for merge-train / nightly / healthcheck kickoffs. This one script backs ~12 kickoff workflows, so they need no individual change.backport.yml/deploy-network.yml— the two directgh workflow run claudebox.ymlcallers now also forwardslack_channel/slack_thread_ts.target_ref(which v1 checked out server-side) is folded into the prompt — v2's/runhas notarget_reffield, so the agent fetches/bases its branch on the ref per the prompt (matches v2's prompt-driven model).claudebox.ymlkeepsCLAUDEBOX_API_SECRETin one place, so no per-workflow secret plumbing was needed.Operator prerequisites (action required)
CLAUDEBOX_API_SECRETGitHub Actions secret in this repo must equal the deployed v2 server'sapi_secret. (POST /runis verified live — it returns 401 without a matching bearer.)#alerts-next-scenario,#backports,#honk-team,#team-bonobos,#team-fairies,#alpha-team, the per-team merge-train channels, and the#alerts-<network>deploy channels) for threaded status. If it isn't, the session still runs — it just won't post back into that thread.CLAUDEBOX_URLto override the default endpoint.Notes
claude-reviewjob is migrated too. v2 also handlesclaude-reviewlabels natively via the GitHub Appworkflow_run/pull_requestwebhook, so that job can be retired in a follow-up once the App is confirmed wired for this repo.AztecProtocol/claudebox) code change is required — v2's/runalready accepts this payload (prompt,user,repo,run_url,link, numericcomment_id/run_comment_id,slack_channel,slack_thread_ts).Testing
bash -non the kickoff script and on everyrun:body inclaudebox.yml(7 steps) — pass.jqpayload construction validated for both the issue-comment case (numericcomment_id/run_comment_idadded) and the workflow_dispatch case (omitted) — produces valid JSON matching the v2RunRequest.POST https://claudebox.work/runconfirmed reachable and auth-protected (401 without bearer). End-to-end with the real secret could not be exercised from this session (the deployed secret is not exposed here).Created by claudebox · group:
slackbot