An agent that can close a
finding still needs a separate
land gate. The closer proves
one named check. The land gate
proves identity, scope, and
that a person is willing to
merge. Those are different
jobs. Mixing them is how a
green scanner becomes a
silent ship.
Agentic autofix makes the
split concrete. Copilot
explores, proposes, reruns
CodeQL, and opens a draft. The
validation GitHub describes is
that the alert closes. It is
not a claim that the patch is
the smallest safe change, or
that the product should have
that behavior, or that the
account which pushed is the
account you meant. Default-branch
alerts only. Up to 25 alerts
can share one pull request.
That batch is a campaign. A
campaign is a scope decision,
not a convenience. The
enterprise policy has to be on
before the button even
appears, which is the right
shape: the ability to assign
work to an agent is an admin
switch, not a prompt.
Push attribution is the
identity half of the same
gate. Author and committer are
client strings. An agent with
write access can set them to a
human email and produce a
history that looks reviewed.
The pusher is the account
GitHub authenticated. Where
the limited preview is on, the
Committer must match pusher
rule refuses the spoofed
byline. Where it is not on,
you still do not audit the
string. You ask who
authenticated the push, and
you treat a flattering author
line as untrusted input.
HydraFusion is a sketch of the
stop condition inside the
harness, still in research
preview. Drafting stays at
medium effort. Review goes
high, and the critic is
supposed to open the workspace
instead of grading a summary.
Cascade may judge the first
attempt and request a repair
only when needed. That last
clause is the practice. A
reviewer — human or model —
who is told to find every
possible problem will invent
scope. A reviewer who is told
which check must pass, and to
stop when it does, can still
catch a wrong fix. The human
job that remains is taste and
intent: should this alert be
fixed this way, in this pull
request, by this pusher. The
repetitive job is the named
check. Do not hand the first
one to the scanner. Do not
make a person re-run the
second one by eye if CodeQL
already did.
-
Assign autofix only for a
default-branch alert you
would accept a draft for.
A CodeQL rerun is not a
merge.
-
Cap the batch. Twenty-five
alerts in one pull request
is a campaign. Read the
blast radius before you
leave draft.
-
Read the pusher, not the
author line. Where the
preview is on, require
Committer must match pusher
on repositories agents can
write.
-
If a critic only saw a
summary, it did not review
the workspace. Prefer a
check that opens the files.
-
Name the failing check that
justifies another edit. No
failing check means stop.
More looking is how a fix
becomes a rewrite.
-
Keep product intent with a
person: whether this fix
should exist, and whether
this account may land it.
Let the agent own the
repetitive close, and only
after the policy is enabled.
Close the alert in a draft.
Land it only when the pusher,
the scope, and the check you
named still match.