본문으로 건너뛰기
cccskills
무료GitHub에 공개

cmux-test-bisect

Trace failing cmux Swift package tests to the commits that introduced them by running older revisions in CI, the automated testing environment. It helps distinguish outdated expectations, code regressions, and intermittent failures, then guides focused fixes and verification.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Find when and why tests broke on main: bisect a Swift package suite on CI across old commits, read the failure matrix, and decide per test whether the test went stale or the code regressed. Use when a suite is red on main, when PR CI only ran filtered tests and the full suite has drifted, or when asked which PR broke a test.

연동 도구GitHub
설치 방법 보기

이럴 때 유용합니다

  • Investigating a package suite failing on main
  • Finding the PR that first broke a test
  • Distinguishing outdated tests from code regressions
  • Separating intermittent failures from consistent failures

포함된 파일(2)

  • SKILL.md5.8 KB
  • agents/openai.yaml330 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

cmux test bisect

PR CI runs selected tests, so a package suite can stay red on main for weeks with nobody noticing. This skill finds the commit behind each failure on CI, never on the Mac (no full cmux builds on laptops).

App-host (cmuxTests) failures on main have their own automatic bisect (#14510). Use this skill for the SwiftPM package suites under Packages/iOS and Packages/Shared that test-ios.yml can run (CMUXMobileCore, CmuxSyncStore, CmuxMobilePairedMac, CmuxMobileChanges, CmuxMobileShell, CmuxMobileShellModel).

Before you start

  1. Get today's failing set from the red run: gh run view <run> --repo manaflow-ai/cmux --log-failed, then grep ✘ Test .* failed after. Run the full suite twice if you have not already. A test that appears in only one run is a flake candidate, not a regression.
  2. Search for an existing fix: gh search prs --repo manaflow-ai/cmux --state open '<test name>'.
  3. Work in your own worktree from upstream/main. If git log stops at a recent commit, the checkout is shallow: git fetch --shallow-since=<date> upstream main.

Run the bisect

T=scripts/ci/package_bisect.py
python3 $T --package CmuxMobileShell start --points 6 <old-sha>..upstream/main
python3 $T --package CmuxMobileShell status --wait     # up to 45 min
python3 $T --package CmuxMobileShell next --dispatch   # split each break window
python3 $T --package CmuxMobileShell cleanup           # delete probe branches
  • Each probe pushes bisect/<name>/<sha10> (the name defaults to the package): the old commit with today's iOS CI files laid over it and the package-lint gate dropped. Old commits carry old CI scripts, which is why a plain -f ref=<sha> dispatch fails early.
  • Probes leave the runner on auto (idle owned mini first, Blacksmith overflow). Do not pin a runner.
  • adopt <sha> <run-id> counts a test-ios.yml run with swift_package=<pkg> that already exists (a dispatch on main, or a probe run whose id start could not read) without dispatching again. A ci.yml run has no package job to read.
  • --filter <regex> narrows the suite once you are chasing a few tests; --paths changes which commits count as midpoint candidates (default: the iOS and Shared packages).
  • --patch <sha> (repeatable) applies a fix commit to every probe. Use it when older commits hang or fail to build for a reason you already know: bisect the question you have, not the known break.
  • --bisect <name> keeps a second experiment (for example the same commits with a --patch) beside the first. --package and --bisect go before the subcommand, and every later command for that bisect needs them too.
  • State is shared by every worktree of the checkout, in <git-common-dir>/package-bisect/<name>.json. Finished job logs are cached beside it per run attempt, so status --refetch costs one run lookup per probe and downloads only logs it has not seen.

Read the matrix

status prints one row per test and one column per probe, oldest first: X failed, . passed, - never ran at that probe, ? pending, E no test ran at all (compile or runner failure; check the log, rerun the run, then status --refetch; a rerun is a new attempt, so its log is read fresh).

Check the probe list first. A probe marked INCOMPLETE never printed its "Test run with" summary: the hung-test watchdog killed it or the job timed out, so every test after that point shows -. A - is never a pass: a suite that hangs early makes a whole cluster look like it "broke" at the commit that fixed the hang. Probe those commits again in a second bisect with the hang fix applied: python3 $T --package <pkg> --bisect <pkg>-patched start --patch <hang fix> <shas>.

VerdictMeaningNext
broken by <sha>Passed at the probe before, failed from here onRead that PR's diff against the test
broken in a..b (n watched commits)Window not yet one commit widenext --dispatch
failing at the oldest probeOlder than the bisectStart again further back, or trace with git log -S '<symbol>'
fixed by / fixed inFailed, then something fixed itUsually ignore; next --fixed splits these too
flakyPasses between failuresTreat as a flake; confirm with a focused rerun before fixing

Tests that break in the same window usually share one cause. Fix the cluster together.

Stale test or regression

Read the culprit PR, then decide per test:

  • Stale test: the PR changed behavior on purpose and says so (PR body, code comments, or other tests it updated in the same direction). Fix the test to express its original intent under the new behavior. Do not delete the assertion. If the old fixture now models the other case, keep a test for each.
  • Regression: the test's intent still holds and nothing in the PR argues it away. Fix the code, and keep the test as it was.
  • When unsure, prefer the reading that keeps the test's name true, and say which reading you chose in the PR.

Land it

  • One small PR per culprit or cluster, pushed to the org remote (git push mf <branch>, gh pr create --head <branch>).
  • Credit the PR that changed the behavior (link it, and mention its author).
  • Prove it with the focused suites: gh workflow run test-ios.yml --repo manaflow-ai/cmux --ref <branch> -f swift_package=<pkg> -f test_filter='<SuiteA|SuiteB>'. Finish with one full-suite run on the last PR.
  • Run cleanup so no bisect/ branches stay on the org remote.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

cmux

무료

Organize cmux windows, workspaces, and split panes so an agent can target the right terminal reliably. Create terminals with startup commands, move or reorder panels, change focus, and flash a panel to identify it.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Arrange terminals for several tasks
  • Start a development command in a new split
  • Move or reorder panels
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

Guide substantial Swift changes in cmux with rules for package boundaries, dependency direction, state management, concurrency, and API documentation. Structure code so public package types can be tested without launching the app.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Extracting a large app feature into Swift Packages
  • Reviewing dependencies between UI, domain models, and services
  • Restructuring state management and Swift 6 concurrency
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

Guide cmux backend changes with consistent rules for Effect, a TypeScript library for structured error handling. Covers Cloud VM state, database migrations, provider integrations, and authentication and payment checks so changes follow the intended architecture.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Implementing API error handling
  • Updating Cloud VM lifecycle logic
  • Preparing database migrations
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

Maintain cmux billing code with guidance on Stripe checkout, pricing, subscriptions, and access rights. It maps the relevant services and provides workflows for testing purchases, handling payment events, and rolling out billing changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Debugging checkout and subscription records
  • Updating prices and plan switching
  • Checking paid access and Cloud VM limits
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

Automate browsing in cmux panels without taking focus away from current work. Target a specific panel to open pages, fill forms, click controls, wait for page changes, extract content, and inspect download history.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Open and inspect sites without changing focus
  • Fill forms and check the result
  • Extract page text or HTML
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

Capture cmux windows as screenshots or video clips from the CLI. Create visual evidence for pull requests and bug reports, with region selection and captions to explain drags, animations, or layout changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Attaching screenshots of visual changes to a pull request
  • Recording drags and animations for a bug report
  • Capturing a specific window region with explanatory captions
manaflow-ai/cmux2.8만2026년 10월 20일 업데이트

manaflow-ai의 스킬 모두 보기

이 스킬의 문제 신고