Insider · Optimus

Falcon PR QA

The QA half of Optimus — an autonomous QA runner for falcon backend PRs, built into Claude Code.

You run /falcon-pr-test 1158 and step away. It reads the PR and its Jira ticket, boots that exact branch in an isolated docker stack, injects the PR's configs, and derives a test plan from the handler code itself — not from imagination. Then it fires every scenario against the real upstream, asserts the response and what was written to Redis, and leaves a masked, ready-to-send QA comment on the ticket. Merged PRs get the same treatment again — this time against production.

useinsider/aio-plugin-marketplace · falcon-pr-qa

25
falcon tickets in the evidence archive
41
recorded runs, full evidence each
310+
scenarios executed on the wire
0
mock servers — always the real upstream
autonomous step human gate pass block / bail

QA Pipeline

Hit Play: control moves along the line, every station runs, and the pipeline stops at each human gate.

/falcon-pr-test · sample run
OPT-236114 · idle
READY

Start the run

Use Play or Step to drive the pipeline.
  • Every station is either an autonomous phase or a human gate.
  • Machine steps glow teal, human gates glow amber.
  • At a human gate the pipeline halts — no step can skip its approval.
telemetry— idle
note: This is an illustrative walkthrough — not a live job tail. The stations map one-to-one onto the real phases in SKILL.md, and the sample verdicts are from a real recorded run.

Where Humans Hold the Line

Autonomous, but not unsupervised — and it runs on the developer's own machine, so the guardrails are structural.

awaiting-trigger

1 · Trigger

Nothing runs on its own. A developer starts every run; in CI only a reviewer with write access can trigger it, by comment. Anyone else gets a polite reply, not a run.

awaiting-signal

2 · Teardown

After the verdict, the stack stays up for the developer to poke at. Cleanup runs only on their explicit signal — and removes only what the run created.

verdict-downgrade

3 · Discrepancy Brake

When the PR's description and the handler code disagree, the verdict is held down to WARN and the mismatch is spelled out — never silently reconciled.

bail

+ Scope Bail

Not an HTTP handler PR? AWS-coupled handler it can't exercise? The run bails with an explicit stub verdict instead of guessing its way through.


Coverage

Where Falcon PR QA sits against falcon's code surface — 882 Go files across four entry-point types (measured 2026-07-30).

71%
of the surface — HTTP handlers, in scope today
16%
tasks — next candidate domain
12%
schedules — future skill
2
modes on every PR: LOCAL pre-merge, LIVE post-merge
70.7%
16%
12.5%
HTTP handlers — running today Tasks — next Schedules — future skill Consumers — future skill
Entry point Go files Share Today How it grows
HTTP handlers 62470.7% coveredfull pipeline, LOCAL + LIVE deepeningAWS-coupled handlers still bail
Tasks 14116.0% bails with stub verdict nextseparate skill, shared harness
Schedules 11012.5% bails with stub verdict future skill
Consumers 70.8% bails with stub verdict future skill
Total 882100% 70.7%of the surface in scope 86.7%once tasks land
How these numbers are built. Share is measured by Go file count under falcon's four entry-point directories — a proxy for where PRs land, not a PR-by-PR census. Out-of-scope PRs are not silently skipped: they get an explicit BAIL_OUT_OF_SCOPE verdict, so nobody mistakes "not tested" for "passed".
One pipeline, two checkpoints. The same scenario set runs LOCAL (isolated docker boot of the PR branch, pre-merge) and LIVE (production, post-merge, comment-triggered in CI). Coverage is identical in both modes — which is what makes the parity check below possible at all.

Real Runs

Every falcon ticket the runner has touched — 25 tickets, 41 recorded runs, full evidence folder behind every verdict.

Ticket Mode Scenarios Verdict What it showed
OPT-187521 LOCALPASS_WITH_WARN Side-effects, not just status codes: the value the handler wrote was read back from UCD and verified.
OPT-226244 LIVE8ALL_PASS Merged PR re-verified against production, side-effect absence proven for the negative cases.
OPT-227886 LIVE9PASS_WITH_WARN Prod pass with warnings surfaced instead of swallowed.
OPT-227950 0BAIL_OUT_OF_SCOPE A non-handler PR was refused with an explicit stub verdict — the scope guard working as designed.
OPT-228110 LOCAL8PARTIAL Boot, config inject and plan synthesis completed; stack handed to the developer before an execution verdict was recorded.
OPT-228967 staging Staging-deploy verification (pods + field state), not a full QA run.
OPT-229081 staging ×2 Staging-deploy verification, not a full QA run.
OPT-229286 LOCAL + LIVE12ALL_PASS Same 12-scenario plan green pre-merge and on production.
OPT-229941 LOCAL ×2 + LIVE12PARTIAL → ALL_PASS 12 scenarios: 10 PASS — and the two that didn't were both test-data problems, not code and not the runner. One test identity was already enrolled on the partner's UAT before the test ran (the handler correctly took the already-member branch), and the happy-path identity wasn't registered on the partner's prod side at all. The verdict said exactly that instead of faking green; a clean-data re-run went 10/10 and the LIVE run confirmed it.
OPT-230055 staging Staging-deploy verification, not a full QA run.
OPT-230440 LOCAL ×217WARN All 17 scenarios pass on the wire — the handler works. The WARN exists because the PR's own cURL examples wrap the payload in {"body":{"params":{…}}} while the handler actually reads a flat shape: anyone copying those examples into an integration gets it wrong. A documentation bug inside the PR — not a code bug, not a runner failure — flagged loudly instead of silently reconciled. This is the discrepancy brake doing its job.
OPT-230702 LIVE27ALL_PASS Largest single plan to date — 27 scenarios against production.
OPT-231123 LOCAL10ALL_PASS Pre-merge isolated boot, full pass.
OPT-231958 LOCAL + LIVE8ALL_PASS Pre-merge pass confirmed on production after merge.
OPT-232074 LOCAL + LIVE7ALL_PASS Pre-merge pass confirmed on production after merge.
OPT-232075 LOCAL7ALL_PASS Pre-merge isolated boot, full pass.
OPT-233659 Schedule-job trace investigation — outside v1 handler scope, evidence archived anyway.
OPT-233698 LOCAL ×2 + LIVE7ALL_PASS Two alternative config options each got their own isolated run before the LIVE confirmation.
OPT-235343 LIVE13ALL_PASS Verdict derived independently from code + this run only — pre-existing QA in Jira deliberately not used as input.
OPT-235603 LOCAL16ALL_PASS Pre-merge isolated boot, full pass.
OPT-235741 staging Staging-deploy + test-environment verification, not a full QA run.
OPT-236114 LOCAL ×2 + LIVE14–18ALL_PASS Parity proof: production responses byte-identical to the local run across all 12 comparable scenarios.
OPT-236399 LIVE6ALL_PASS Run from a developer machine over zero-trust egress — same pipeline, different seat.
OPT-237515 LOCAL + LIVE ×224BLOCKED — external 24/24 green locally. The LIVE re-check then isolated the blocker with three separate proofs: the prod config exists (no config-not-found), the code is deployed and correct (10/10 validation scenarios byte-identical to the LOCAL run), and falcon's own IP whitelist passed. What remains is on the partner's side: their IP allowlist doesn't cover falcon's prod egress, so the upstream sign-in returns 403 — re-checked an hour later, still 403. Entirely external — not a PR bug, not a missing config, and not a runner failure. The action item (whitelist falcon's prod egress IPs) went to the right party, with evidence attached.
OPT-237769 LOCAL + LIVE9 / 8ALL_PASS Pre-merge pass confirmed on production after merge.

The highlighted rows are the point. A QA runner that only ever says ALL_PASS is a rubber stamp. Note what the three non-green verdicts have in common: none of them is a failure of the runner itself. Stale test data, a documentation bug inside the PR, a partner-side allowlist gap — in every case the runner's contribution was to isolate where the failure lives and say it plainly, with evidence, instead of reporting a vague red or a dishonest green.


In the Wild — the CI Flow on a Real PR

The comment-triggered LIVE flow, exactly as it ran on falcon PR #1709: a reviewer comments falcon-qa-live → GitHub Actions runs the pipeline against production → the bot posts the verdict. Partner identifiers are redacted in these captures.

falcon-qa-live trigger comment followed by the github-actions bot QA comment with ALL_PASS verdict on PR 1709
The trigger and the verdict: falcon-qa-live by a write-access reviewer, then the github-actions[bot] QA comment — 🟢 ALL_PASS, 12/12 scenarios, LIVE post-merge verification in 10m 9s.
Plain-language test results overview table from the same QA comment: 12 checks, all passed
The same comment's plain-language overview — written so a reviewer without backend context can still judge the run: what was tried, and whether it worked.

What That Buys Us

Four classes of bug it has already caught in real PRs — each one evidence-backed, not hypothetical.

doc-vs-code drift

The PR lies, the code doesn't

cURL examples with the wrong payload shape, typo'd field names the handler silently ignores — flagged by the live typo review even when the handler shares the typo.

merged ≠ live

Green merge, dead prod

The LIVE re-check runs the same plan against production. On one merged PR it proved the code was deployed and configured — and that the real blocker was the partner's own IP allowlist. External blockers get named, not absorbed as failures.

side-effects

Status 200 isn't proof

What the handler wrote to Redis and UCD is read back and compared. A handler that answers politely and writes garbage still fails.

parity

LOCAL ↔ LIVE, byte for byte

Because both modes run the identical plan, prod responses can be diffed against the pre-merge run — 12/12 comparable scenarios byte-identical on the last check.

And every finding ships with receipts. The QA comment carries reproducible, secret-free cURLs for every executed request — a reviewer can replay the whole run verbatim.


Next Steps — CI, Vision & Beyond

Open work, not accepted limits. The CI and test-environment tracks are the two big ones.

01 · CI

LIVE in GitHub Actions — done

Post-merge QA already runs in CI: a reviewer with write access comments falcon-qa-live on a merged PR and the pipeline runs against production from the org runner. Comment-triggered by design — never auto-fired.

02 · CI

LOCAL in CI — one blocker left

Pre-merge (docker-boot) QA in CI is close: the runner's cross-account image pull is already proven. The one open piece is a safe config-secret source for the runner. Until it lands, pre-merge runs happen on the developer's machine.

03 · Vision MCP

Ephemeral test environments

On-demand falcon environments via the internal Vision MCP are built — currently blocked on a DevOps-side pod fix (a service-env collision that crashes falcon's redis boot). Meanwhile the lightweight path is proven: the existing runner does functional UCD read+write against the test environment for config-less and UCD-only handlers.

04 · CI

Deploy-aware LIVE gating

Merged ≠ deployed. Next: wire the internal release-data MCP into Phase 0 so a LIVE run fires only after the change has actually reached production — today that gap is handled by judgment.

05

AWS-coupled handlers

Handlers that talk to AWS services mid-request can't be exercised in the isolated stack yet — they bail to manual testing with an explicit verdict instead of pretending.

06

Handlers only (v1)

Tasks, schedules and consumers — 29% of the surface — bail out today. Each becomes its own skill on the shared harness (Jira posting, evidence layout, masking) rather than bloating this one; prod-side side-effect verification rides the same track once a prod-VPC runner exists.