Start with a request like this
Validate the change on my branch before I ask for review. Find the targets it affects, run their tests with coverage on the exact commit, and tell me what passed, what failed, what was replayed from cache and what could not run. Ask before starting anything that uses a QA agent or a model.
Choose where the checks run
Two connections can run checks. Use whichever your assistant has; they are not interchangeable. Local RBS MCP (rbs mcp serve) checks your local workspace, with files
as they are now:
rbs_affected— the targets and tests a set of changed files affectsrbs_build,rbs_test,rbs_coverage— build, test and coverage; each answers when it finishes
start_branch_execution— build, test or coverage (mode) of exact targetsbranch_execution_status— follow it (wait_secondsto wait); it shows only the log’s tailget_branch_execution_log— a finished run’s whole log, one page at a time, for the person who started itstart_ci_run,ci_status,get_ci_run,get_ci_run_log— CIissue_evidence— the evidence linked to an issue
The workflow
- Pin what is being checked.
- Managed: name the branch and the full commit hash. The run checks exactly that commit.
- Local: the tools check the working files, not a commit. Record
HEADand whether the working tree is clean before and after the run. Call a result evidence for that commit only if the tree was clean and unchanged throughout; otherwise call it evidence for the workspace with its uncommitted changes. Never stash, revert, stage or commit someone’s work just to get a clean tree.
- Choose bounded checks. Locally, give
rbs_affectedthe files the change touched: it returns what to rebuild and which tests to run, and lists any file no target owns separately, so you know the graph did not cover it. Run those tests, not the whole workspace. - Run them.
- Locally:
rbs_testorrbs_coveragewith those targets. Coverage uses the same floors asrbs coverage; an unmet floor fails the check.rbs_testtakes afilterto re-run one case; a filtered run is never cached. Both tools takerunner_args, a list of arguments for the test runner (for Go,["-count=2", "-v"]). A run with runner arguments requires exactly one test in its resolved dependency closure and is never cached. Runner arguments can start other programs, so the local server offers them only when started with--allow-writeor--tools full; get the person’s authorization to run commands if it is not already in scope. - Managed:
start_branch_executionwith the full commit hash, the targets and arequest_keyyou make up, such asissue-12-test-1. Then follow it withbranch_execution_status.
- Locally:
- Read the outcome per check, then report each one as exactly one of:
- Passed — the test process ran on this revision and succeeded.
- Replayed from cache — reported as
cached pass from <time>; test process not run. It is a pass recorded for identical inputs, not a new run; say so. - Failed — include the failing test’s log, or for coverage the unmet floor.
- Skipped — a CI job or test that did not run by design, such as a job the change did not affect. It is not a pass.
- Not run — the server was not open, a service was unavailable, the target did not build, or you were not allowed to run it. Say which.
- Unknown — the run’s outcome could not be confirmed (see below).
- Link the evidence. On a managed project,
issue_evidenceshows each CI run and execution judged against the issue’s linked change: current (at its head) or stale (at an older commit).
Approval points
Builds, tests and coverage on the person’s own branch use their existing permissions. Ask first before:- starting a QA run, which uses QA workers and a model;
- re-running CI for someone else’s change;
- anything that merges, deploys or changes settings — validation never does.
When things go wrong
- A new commit lands. Every earlier result is now stale for the change. Re-run the affected checks on the new commit, or report them as stale; a pass on an older commit does not verify a later one.
- The answer to a start is lost (a timeout or dropped connection). Ask
branch_execution_status, or resend the same request with the samerequest_key: the first attempt is answered and nothing new runs. Never retry with a new key; that can run the work twice. - You cancel a run. One that had not started is cancelled. One already
running is asked to stop and often ends
unknown, because a stopped command cannot confirm what it did. Report it as unknown, not passed or failed. - A log is long.
branch_execution_statusshows only the tail. Before saying you read a whole execution log, followget_branch_execution_log’snext_fromuntil there is none.get_ci_run_logstarts at the last page, where failures usually are;source_truncatedmeans the stored log lost its beginning.
Limits today
- This page describes the current tools. A hosted deployment may run an earlier build: use the tools your connection actually offers, and report a missing one rather than working around it.
-
Runner arguments need a local server started with
--allow-writeor--tools full, and a build of rbs that includes them. A default connection does not showrunner_argsat all. The command-line equivalent,rbs coverage //t -- -count=2, needs the same authorization to run commands. - Affected-target discovery is a local tool; the managed connection has no equivalent yet.
- A green check is evidence about source, not about what is deployed: a passing run, a merge or a tag does not show which version is running.