Problem
The review check has been failing on every open PR — #451, #455, #441 all fail identically, in the swarm's own posting step rather than on any code verdict:
Fetching patch for run <uuid>...
No changes to sync — the workflow did not modify any files.
##[error]Process completed with exit code 1
Reproducible across reruns with fresh swarm ids, so it isn't flaky infrastructure. Because it fails on every PR, it carries no signal: it can neither approve nor block, and in practice it gets merged over. .github/workflows/review-swarm.yml is disabled on pull_request until this is fixed — it still runs on workflow_dispatch.
Why it should move to v2
The swarm is built on RelayFlow v1, which is now deprecated in the CLI. review-swarm.yml drives it through:
response=$(agent-relay cloud run \
../gate-files/workflows/review-swarm.yaml --sync-code --json)
...
agent-relay cloud status "${{ steps.launch.outputs.run_id }}" --json
agent-relay cloud schedule / schedules now warn as deprecated (relay#1783), and the v1 surface is only kept alive because v2 has no hosted scheduling yet. Repairing the v1 wiring would be work spent on a surface we intend to retire.
The failure itself points the same way: the whole design assumes the swarm's product is a patch to sync back, so a review that correctly proposes no code changes ("the workflow did not modify any files") is treated as a failure. A v2 flow can return a structured verdict instead of a diff, which is what a review gate actually wants.
What v2 gives us
- A flow authored in TypeScript with a typed result, rather than a YAML workflow whose only output channel is a patch
f.human for the cases where a reviewer genuinely needs a person — with flows answer to resolve the wait (flows#451)
- The v2 kernel's durable suspension, instead of a 75-minute job polling
cloud status on a 65-minute budget
- One deployed artifact via
flows deploy, instead of the gate-files checkout-from-main dance that exists to keep a PR from editing its own gate
Scope
- Author
review-swarm as a v2 flow (.flow.ts), returning a verdict object rather than a patch
- Deploy it to Cloud and invoke it from CI via the v2 surface (
agent-relay flows ...), not agent-relay cloud run
- Preserve the wrapper-guard invariant: a candidate PR must not be able to weaken the gate that judges it (
review-swarm-wrapper-guard.yml stays on pull_request_target reading from base)
- Re-enable the
pull_request trigger once the v2 path is green
- Retire the v1 workflow and its
swarm-*.sh scripts after the cutover
Context
Found while shipping the mounted product command groups. agent-relay file, agent-relay flows, and agent-relay sessions are live as of @relayfile/sdk@0.10.64, @relayflows/sdk@2.0.19, ai-hist@0.18.1.
🤖 Generated with Claude Code
Problem
The
reviewcheck has been failing on every open PR — #451, #455, #441 all fail identically, in the swarm's own posting step rather than on any code verdict:Reproducible across reruns with fresh swarm ids, so it isn't flaky infrastructure. Because it fails on every PR, it carries no signal: it can neither approve nor block, and in practice it gets merged over.
.github/workflows/review-swarm.ymlis disabled onpull_requestuntil this is fixed — it still runs onworkflow_dispatch.Why it should move to v2
The swarm is built on RelayFlow v1, which is now deprecated in the CLI.
review-swarm.ymldrives it through:agent-relay cloud schedule/schedulesnow warn as deprecated (relay#1783), and the v1 surface is only kept alive because v2 has no hosted scheduling yet. Repairing the v1 wiring would be work spent on a surface we intend to retire.The failure itself points the same way: the whole design assumes the swarm's product is a patch to sync back, so a review that correctly proposes no code changes ("the workflow did not modify any files") is treated as a failure. A v2 flow can return a structured verdict instead of a diff, which is what a review gate actually wants.
What v2 gives us
f.humanfor the cases where a reviewer genuinely needs a person — withflows answerto resolve the wait (flows#451)cloud statuson a 65-minute budgetflows deploy, instead of thegate-filescheckout-from-main dance that exists to keep a PR from editing its own gateScope
review-swarmas a v2 flow (.flow.ts), returning a verdict object rather than a patchagent-relay flows ...), notagent-relay cloud runreview-swarm-wrapper-guard.ymlstays onpull_request_targetreading from base)pull_requesttrigger once the v2 path is greenswarm-*.shscripts after the cutoverContext
Found while shipping the mounted product command groups.
agent-relay file,agent-relay flows, andagent-relay sessionsare live as of@relayfile/sdk@0.10.64,@relayflows/sdk@2.0.19,ai-hist@0.18.1.🤖 Generated with Claude Code