Skip to content

ci: pin the blocking psmux gate to one release and add a latest-release canary - #899

Merged
pbean merged 2 commits into
bmad-code-org:mainfrom
dracic:ci/pin-psmux-gate
Oct 13, 2026
Merged

pbean merged 2 commits into
bmad-code-org:mainfrom
dracic:ci/pin-psmux-gate

Conversation

@dracic

@dracic dracic commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

psmux v3.4.0 was released today. It fixes upstream defects that bmad-loop works around (psmux/psmux#583, #599, #622, #773 and #775). The live psmux gate's test_premise_* rows are tripwires: each one turns red by design when a psmux release fixes the defect it pins. The gate installed releases/latest, so five rows went red on the day 3.4.0 shipped. That took down both psmux gate jobs and, through the aggregator, test (windows, …) on every PR and on main, whatever the PR changed.

The root cause is that a required check depended on an unpinned external release. This PR pins it, and keeps the early warning as a separate, non-required check.

Changes

  • .github/actions/ensure-psmux (new composite action): the existing install step moved here unchanged, except that it takes a version input, either a release tag or latest. The floor assertion through PsmuxMultiplexer.available() stays.
  • ci.yml: the blocking gate installs the pinned v3.3.8 through the action. Moving this pin becomes a deliberate PR that also raises _LAST_UNSUPPORTED and retires the workarounds the tripwires name, so the gate stays green across the bump.
  • psmux-canary.yml (new, not a required check): runs the same gate against the latest psmux release every Monday and on workflow_dispatch. A red test_premise_* row there means an upgrade is due. Any other red row is a psmux regression to report upstream before moving the pin.
  • docs/testing.md: documents the pin and the canary.

Follow-up

A separate PR raises the floor to 3.4.0, moves this pin to v3.4.0, and retires the five workarounds behind it (tracked in #660, #733, #754 and #879).

Verification

  • prettier 3.8.4 is clean, and yamllint, actionlint and zizmor report no new issue.
  • v3.3.8 publishes the psmux-v3.3.8-windows-x64.zip asset the action selects.
  • This PR's own psmux gate runs on 3.3.8, which is its end-to-end check.

Summary by CodeRabbit

  • Testing
    • Windows live checks now use a pinned psmux release, keeping their behavior consistent between runs.
    • A separate weekly or manually triggered check tests the same live scenarios against the latest psmux release and verifies the resulting performance data.
    • These checks help identify compatibility changes in new psmux releases without changing the version used by the regular Windows live checks.

…se canary

The live gate's test_premise_* rows turn red by design when a psmux release
fixes what they pin. With the gate installing releases/latest, psmux 3.4.0
turned every PR red on the day it shipped. The blocking gate now installs a
pinned release (v3.3.8) through a shared composite action, and a non-required
weekly psmux-canary workflow runs the same gate against the latest release, so
an upstream release is noticed without blocking anyone. Moving the pin is a
deliberate PR that also moves the version floor and retires the workarounds.
@dracic

dracic commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6a06541a-c7ac-4245-acf4-c101ccecc660
📥 Commits

Reviewing files that changed from the base of the PR and between faa54b4 and 6c85428.

📒 Files selected for processing (1)
  • .github/workflows/psmux-canary.yml

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review.

Walkthrough

The pull request adds a composite action to install and validate psmux. Windows CI uses a pinned release. A scheduled or manually triggered workflow runs the live tests against the latest release and verifies the resulting metrics.

Changes

Windows psmux CI

Layer / File(s) Summary
Install and validate psmux
.github/actions/ensure-psmux/action.yml
The composite action resolves a release, downloads and extracts its Windows asset, adds the executable directory to PATH, and checks the installed version.
Use a pinned release in CI
.github/workflows/ci.yml
The Windows live-gate setup calls the action with version v3.3.8. The step retains its six-minute timeout.
Run the latest-release canary
.github/workflows/psmux-canary.yml, docs/testing.md
The new workflow runs manually or weekly. It installs the project and latest psmux release, runs the live tests, and verifies the generated metrics. The documentation describes the pinned CI release and canary.

Priority: ⬆️ High

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant PsmuxCanaryWorkflow
  participant PsmuxRelease
  participant BenchmarkRunner
  participant LivePsmuxTests
  participant PerfReport
  PsmuxCanaryWorkflow->>PsmuxRelease: Install latest release
  PsmuxCanaryWorkflow->>BenchmarkRunner: Run live test command
  BenchmarkRunner->>LivePsmuxTests: Execute tests
  BenchmarkRunner-->>PsmuxCanaryWorkflow: Write metrics and JUnit output
  PsmuxCanaryWorkflow->>PerfReport: Verify executed tests from metrics
Loading
Merge Risk: ⚪ Minimal · up to 6c854

The blocking Windows gate uses the pinned release, while the canary checks the latest release and fails when live tests are skipped or not executed. No actionable merge-blocking risk remains.

Pre-merge checks · Passed 5
Passed Passed checks (5 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title accurately summarizes the main changes: pinning the blocking psmux gate to one release and adding a latest-release canary.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the psmux trail
A pinned release guards the rail
The latest hops through Monday's gate
Live tests record each measured state
Metrics pass beneath the moon
The rabbit files its report soon

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-13T16:35:13.187045Z faa54b4 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: faa54b4c6b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/psmux-canary.yml Outdated
pytest exits 0 when a live-gate row skips, but a skip means that behaviour was
never exercised. Run the canary through the blocking gate's benchmark runner
and check its metrics with perf_report.py verify-executed, as ci.yml's
aggregator does.
@pbean
pbean merged commit 158c1d4 into bmad-code-org:main Oct 13, 2026
15 of 17 checks passed
@dracic
dracic deleted the ci/pin-psmux-gate branch October 13, 2026 19:25
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