A labeling agent on a public
repo reaches for
pull_request_target
because the
pull_request
GITHUB_TOKEN on a
fork lacks write. That token
choice is the bug. The target
event runs the workflow file
from the base branch, in the
base repository, with access
to that repository's secrets.
A step that checks out the
pull request head then runs
the fork's code in that
context.
Evaluate mode is the current
state of GitHub's default
rule. It records the runs it
would block, and the workflow
still executes. December 2,
2026 is when the same rule
blocks the event in public
repositories on GitHub Free,
GitHub Team, and GitHub
Enterprise Cloud, unless an
Actions event policy allows
it. Workflow file targeting
can limit that allow to one
path. Private and internal
repositories stay outside the
rule. GitHub Enterprise Server
stays outside it too.
The calendar has two
rehearsals. November 9 and
November 16, each 16:00–18:00
UTC. During a window, a
blocked attempt creates a
failed run with an error
annotation, and the workflow
stays unexecuted. After the
window, evaluate mode returns
and the run proceeds with
warnings. Enforcement had been
set for November 2 and moved
to December 2. The slip is a
date change. The rule is still
the rule.
-
Print the listeners:
rg -n 'pull_request_target:' .github/workflows.
Every path is a file for
Insights before 16:00 UTC on
November 9.
-
A labeling job can live on
the
pull_request
event, keep the script in
the base workflow, and take
the pull request number as
an input.
actions/checkout
stays on the base ref.
-
A job that must keep
pull_request_target
gets one line in an Actions
event policy, targeted at
that workflow file. The
settings page is
control workflow execution.
-
Treat a green run this week
as evaluate mode. The
November 9 window is the
pass. A failed run in that
window carries an error
annotation. That annotation
is the list you still owe a
policy line.
-
If the agent also shells
out through GitHub Desktop,
the token in that session
stays until the next
sign-in on Desktop 3.6.10.
A fresh sign-in is the swap,
once the rollout has reached
that install.
Before 16:00 UTC on November
9, every
pull_request_target
file is either gone from the
on: key or named
in an Actions event policy.
The note this sits on is
GitHub's
2 November changelog.