Solutions

Engineering

“Fix it and raise a PR” — and a draft PR arrives.

#paymentspublic channel2 tool calls

A flaky test, a plain request, and a draft pull request at the end of it. The brief is held for a Confirm that names the repository and the change; then a separate container clones the branch, runs the tests, makes the change, runs them again, and opens the PR with the evidence.

payments

Priya10:05 AM

@attest_tag fix the flaky retry-budget test so it stops depending on wall-clock time, and raise a PR

attest_tagApp10:05 AM

  • read_thread · 12 messages · the failing run and the test name
  • start_fix_job · acme/payments · base main · draft PR

Fix job queued — needs your Confirm (buttons below, expire in 5 min).

  • Repo: acme/payments, base branch main
  • Change: move the retry-budget test onto an injectable clock instead of real sleeps and elapsed-time assertions, keeping the same coverage
  • Acceptance: the suite passes ten runs in a row
  • Rule: one new branch, one draft PR. Never a merge, never a push to main.

Waiting on a human

Start a fix job against main

One new branch, one draft pull request. The worker runs the tests before and after; it never merges.
github · acme/paymentsJOB fix/retry-budget-clock → draft PR

Confirmed by Priya. clone ✓ · tests baseline ✓ (1 flaky) · fix ✓ · tests ✓ (10/10) · pull request ✓ — draft PR #421 opened; the body carries the brief, the evidence, and the results before and after.

google/gemini-flash5.2k in460 out$0.0031Configure

Names, figures, repositories and customers are changed; token counts and cost are illustrative. The ask, and the shape of the answer, are as they were.

How the turn went

A brief from the thread, a container with one token, a draft PR.

  1. 01

    The brief is written from the thread

    What to change, the evidence gathered — the failing run, the test name, the lines — and what done looks like. It is held like any write, and the card states repository, base branch, change and the rule the worker runs under.

  2. 02

    A container that holds only a token

    The worker’s environment carries the job id, the bot’s URL and a single-use token. It claims the spec and the repository token over the API, clones with the token in a header, runs the tests, makes the change, runs them again.

  3. 03

    A draft PR, and one message edited in place

    The checklist in the thread is one message, edited as events arrive. The PR body carries the brief, the evidence, the files changed and the tests before and after — with an honest note on top when the tests still fail or none were found.

  4. 04

    Stopping it

    stop in the thread, !job cancel, or Cancel in the console end the job; the worker pushes nothing further. Jobs survive a restart, because their state is in the database.

What it needs

The setup, in the console.

Connection
A repository connection whose token may push a branch and open a pull request. The channel's default repository is what “the repo” means; name another and it uses that.
The worker
A container image the deployment runs — a Cloud Run job, plain Docker, or a Kubernetes job — with a budget and a timeout per job.
Test command
Optional, per repository. Leave it empty and the worker detects one.

What it will not do

Enforced outside the model.

  • It never merges and never pushes to the base branch. One branch, one draft PR, whatever the brief says.

  • The repository token is never in argv, the remote URL or on disk inside the worker, and the single-use token expires with the job.

  • A job starts on a Confirm from a person in the thread — or on an allow rule an admin wrote that clearly covers it, and the reply says which.

Try it

Say it in a channel it is in.

The sentence as it was typed. It works in any channel the bot has been invited to that carries the connection above — no command syntax, no form, and follow-ups in the thread need no mention.

@attest_tag fix the flaky retry-budget test so it stops depending on wall-clock time, and raise a PR

  • GitHub
  • start_fix_job

Bring the channel this would live in.

Sign up, connect the service above in one channel, and type this sentence yourself — or run the same binary on your own infrastructure.

All solutions