Skip to content

fix(merge): gate VESSEL on merge-ready PRs and hold non-submit PRs - #359

Merged
Nexus-AgentFlow merged 7 commits into
developfrom
fix/vessel-merge-ready-gating
Oct 6, 2026
Merged

Nexus-AgentFlow merged 7 commits into
developfrom
fix/vessel-merge-ready-gating

Conversation

@Christiantyemele

@Christiantyemele Christiantyemele commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Only route PRs whose ticket lifecycle is in submit to VESSEL for merge. PRs whose tickets are still in an earlier phase (building, testing, etc.) are held via a new lifecycle Block event instead of stalling the entire queue, so the next assignable ticket can proceed.

This addresses the case where VESSEL repeatedly deferred an approved PR because the lifecycle was not in a merge-ready state, blocking the queue and preventing workspace recycling.

Changes

  • config: add Block lifecycle event — records a reason and feedback, enters blocked (recoverable through planning)
  • config: add KEY_MERGE_READY_PRS shared-store key
  • nexus: pending_prs_ready_for_vessel computes which pending PRs are in submit and holds the rest via Block; persists the merge-ready set
  • vessel: prefer the merge_ready_prs handoff over the raw pending queue in prep
  • forge template: install and auth gh CLI in the workspace so agents open PRs with gh pr create instead of hand-rolling the REST API
  • docker-compose: correct REDIS_URL service host for the controller

Validation

  • cargo check -p agent-nexus -p agent-vessel -p config passes
  • cargo test -p config (74), cargo test -p agent-nexus (144), cargo test -p agent-vessel (44) all pass, including new tests:
    • test_prep_prefers_merge_ready_prs_handoff
    • held_pending_pr_does_not_block_next_assignable_ticket
    • submit_pending_pr_remains_eligible_for_vessel

Test plan

  • PR whose ticket is in submit → passed to VESSEL for merge
  • PR whose ticket is in building/earlier → held with a Block lifecycle record, queue continues
  • Approved PR in a non-merge-ready lifecycle no longer defers the whole controller pass

RetriggerConfidence Score: 5/5

The PR appears safe to merge; the latest changes leave no outstanding review finding.

Summary

The PR gates VESSEL handoff on tickets reaching submit, preserves in-flight ticket progress when withholding other PRs, and updates FORGE GitHub authentication and the controller’s Redis default. The latest changes remove an unused Docker version resolver and its dedicated test job.

Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Pending PRs] --> B[NEXUS checks ticket lifecycle]
    B -->|Submit| C[Merge-ready handoff]
    B -->|Other phase| D[Withhold PR; preserve lifecycle]
    C --> E[VESSEL refreshes against pending queue]
    E --> F[Merge eligibility checks]
Loading

Reviews (6) · Last reviewed commit: "Merge branch 'develop' into fix/vessel-m..."

Only route PRs whose ticket lifecycle is in submit to VESSEL for merge.
PRs whose tickets are still in an earlier phase (building, testing, etc.)
are held via a new lifecycle Block event instead of stalling the whole
queue, so the next assignable ticket can proceed.

- config: add Block lifecycle event (records reason + feedback, enters blocked)
- config: add KEY_MERGE_READY_PRS shared-store key
- nexus: compute merge-ready PRs in pending_prs_ready_for_vessel and persist them
- vessel: prefer the merge-ready handoff over the raw pending queue
- forge template: install and auth gh CLI in the workspace for PR creation
- docker-compose: correct REDIS_URL service host for the controller
@Christiantyemele

Copy link
Copy Markdown
Collaborator Author

@greptileai review

1 similar comment
@Christiantyemele

Copy link
Copy Markdown
Collaborator Author

@greptileai review

Comment thread crates/agent-nexus/src/lib.rs Outdated
Comment thread crates/agent-vessel/src/node.rs
Comment thread crates/coder-client/templates/openflows-forge/main.tf Outdated
Replace the optional gh CLI setup with a required, verified credential
inheritance: workspace startup now fails loudly if the controller-spawner's
inherited GitHub credential is missing, gh cannot be installed or authed, or
the authed identity does not match the inherited token. Sets git author
identity and records the resolved login (never the token).
Comment thread crates/coder-client/templates/openflows-forge/main.tf Outdated
Comment thread crates/coder-client/templates/openflows-forge/main.tf Outdated
Comment thread crates/coder-client/templates/openflows-forge/main.tf Outdated
@Nexus-AgentFlow
Nexus-AgentFlow merged commit 0c9720e into develop Oct 6, 2026
12 checks passed
@Nexus-AgentFlow
Nexus-AgentFlow deleted the fix/vessel-merge-ready-gating branch October 6, 2026 13:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants