Context
Observed on 2026-03-19 while retesting repo-assist after the #033 expression fix had already shipped.
This is not the earlier prompt-rendering bug from #21501 / #21624.
On the latest retest with gh-aw v0.62.0, the activation prompt correctly rendered:
Take heed of **instructions**: ""
If 14 is non-empty, this run was dispatched for a specific issue and is bound to issue #14.
So the workflow was correctly compiled and correctly bound to issue #14.
The run still finished success with no PR, but the failure mode was:
- the agent ignored the targeted-dispatch instruction to fetch issue
#14 directly
- it scanned the backlog with
list_issues
- public-repo automatic integrity filtering removed pipeline issues, including
#14
- the agent concluded there were no open implementation issues
- it switched into what it called "Scheduled Mode"
- it triaged unrelated
[aw] workflow-failure issues (#22, #20, #18)
- it emitted
noop: Pipeline complete - No open issues or PRs to implement...
That means a targeted dispatch bound to a real open issue can silently succeed while doing unrelated work.
Problem
For public repositories, gh-aw automatically applies min-integrity: approved when no explicit GitHub guard policy is configured.
Relevant implementation/docs:
pkg/workflow/mcp_github_config.go:413-422 says public repos automatically get min-integrity: approved
docs/src/content/docs/reference/github-tools.md:106-113 defines integrity from author_association, with:
approved = OWNER, MEMBER, COLLABORATOR
none = FIRST_TIMER, NONE
The bound issue in the failing run was:
- issue
#14
- repo:
samuelkahessay/team-standup-tracker
- user:
prd-to-prod-pipeline[bot]
author_association: NONE
Under the current automatic guard model, that issue is filtered.
That filtering may be intentional under the trust model. The bug reported here is narrower:
- targeted dispatch mode was present in the prompt
- the agent still fell back to backlog scanning
- the bound issue was filtered out of that backlog scan
- the run then behaved as if it were an unbound scheduled run
The user-visible failure is not just filtered visibility. It is that a targeted run can lose its target and still exit success.
Why this is a bug
If issue_number=<N> was supplied on workflow_dispatch, that run should remain bound to #N.
It should not:
- substitute a backlog scan for the bound issue
- reclassify itself as "Scheduled Mode"
- triage unrelated issues
- emit a successful noop claiming there is no implementation work
If the bound issue is unreadable because of integrity policy, the run should fail explicitly or surface a clear integrity-filtered status for the bound issue. It should not drift into unrelated work.
Location
The observed behavior spans two layers:
-
Automatic public-repo guard policy
pkg/workflow/mcp_github_config.go:413-422
- public repos get automatic
min-integrity: approved
-
Targeted-dispatch execution path
- the prompt clearly instructs targeted mode
- the agent still called
list_issues and treated the run like general backlog processing
- once
list_issues returned [], the run moved into unrelated [aw] triage and noop success
There are likely two related product gaps here:
- integrity-filtered same-repo automation issues disappear from normal issue listing
- targeted dispatch is not hardened against that disappearance
Reproduction
- Use a public repository.
- Enable GitHub tools without explicitly setting
tools.github.min-integrity or tools.github.lockdown.
- Let gh-aw auto-apply
min-integrity: approved.
- Create an implementation issue through repo automation so the resulting issue author has GitHub
author_association: NONE.
- Run a gh-aw implementation workflow through targeted
workflow_dispatch with issue_number=<that-issue>.
- Observe:
- the prompt says the run is bound to that issue
- the agent still calls
list_issues
- the bound issue is filtered from that result
- the agent concludes there are no open implementation issues
- the run completes successfully without touching the bound issue
Observed concrete repro:
- Public repo:
samuelkahessay/team-standup-tracker
- Open issue
#14, authored by prd-to-prod-pipeline[bot], author_association: NONE
- Compile workflows with
gh-aw v0.62.0
- Dispatch
Pipeline Repo Assist via workflow_dispatch with issue_number=14
- The prompt still says the run is bound to
#14
- The agent calls
list_issues and gets []
- The gateway logs show
#14 was filtered from list_issues
- The agent declares there are no open implementation issues
- The run triages unrelated
[aw] issues and emits noop success
Expected behavior
A targeted dispatch bound to an existing issue should not silently succeed with unrelated work.
Expected outcomes:
- the bound issue is fetched directly and handled
- or, if integrity policy blocks it, the run fails explicitly with a message like:
issue #14 exists but is filtered by min-integrity=approved (author_association: NONE)
It should never degrade into scheduled backlog processing for unrelated issues.
Evidence
Latest failing run: 23293758712
- Date: 2026-03-19
- Workflow:
Pipeline Repo Assist
- Event:
workflow_dispatch
- Branch:
main
- Head SHA:
40122dc96083be9779bcc5b48e1ec83bd09ec2b5
- Workflow compiler version:
gh-aw v0.62.0
- Runtime MCP gateway:
v0.1.19
- Runtime GitHub MCP server:
v0.32.0
The prompt was correctly bound to issue #14
From the activation and agent prompt artifacts:
Take heed of **instructions**: ""
If 14 is non-empty, this run was dispatched for a specific issue and is bound to issue #14.
So this was not an unbound scheduled run.
The agent still scanned the backlog
From agent-stdio.log:
list_issues -> []
- agent reasoning:
Good! The Next.js application exists. Now let me check for open PRs and [aw] issues:
It then proceeded to:
list_pull_requests
search_issues repo:samuelkahessay/team-standup-tracker is:open label:agentic-workflows
actions_get / actions_list for unrelated failed workflows
That is not consistent with the prompt instruction:
Treat issue #14 as the only candidate for Task 1 in this run.
Fetch that issue directly instead of scanning the backlog to choose a task.
The bound issue was filtered out of list_issues
From mcp-logs/github.log:
DIFC-FILTERED on list_issues for issue:samuelkahessay/team-standup-tracker#14
- reason: lower integrity than the agent requires
The same log shows many automation-authored pipeline issues being filtered in the same call.
The bound issue was live during investigation:
- issue
#14 was OPEN
- title:
[Pipeline] Create database schema and initialization
- user:
prd-to-prod-pipeline[bot]
author_association: NONE
The run reclassified itself as scheduled mode
From agent-stdio.log and repo-memory output:
This appears to be a fully complete PRD run.
I should ... Call noop to signal completion since there's no implementation work to do
- it wrote
run-45-status.md with:
Mode: Scheduled (no targeted issue)
Open Issues: 0 pipeline issues
Issue #22, #20, #18 triage summary
So the run lost the dispatch binding entirely, even though the prompt contained it.
Workflow outcome was misleading
The run finished success and emitted:
Pipeline complete - No open issues or PRs to implement. Triaged 3 [aw] infrastructure workflow failures (all non-blocking quality/monitoring tools). Application fully implemented on main.
No PR was created for issue #14.
Earlier related run on v0.61.2
An earlier run on the same repo after the #033 fix shipped, 23292688284, showed a closely related symptom:
- the prompt was also correctly bound to
#14
- the backend fetched
issue_read(#14)
- DIFC filtered the result to
[]
- the agent concluded the issue was missing and emitted noop success
So the underlying integrity-filtering problem remained after #033, and the latest v0.62.0 run still fails, now via a broader targeted-dispatch control-flow bug.
Proposed fix
The minimum product fix is to harden targeted dispatch:
-
When issue_number is supplied, force a direct bound-issue read before any backlog scan
- do not let the run substitute
list_issues candidate selection for the bound issue
-
If the bound issue is filtered by integrity policy, fail explicitly
- do not allow fallback to "scheduled mode"
- do not allow fallback to unrelated issue triage
- surface a clear error for the bound issue instead of
[]
-
Do not allow successful noop completion when a targeted issue was never successfully evaluated
- targeted dispatch should be all-or-nothing with respect to the bound issue
-
Add regression coverage
- public repo
- automatic
min-integrity: approved
- issue authored by same-repo automation with
author_association: NONE
- targeted
workflow_dispatch
- assert the run does not drift into backlog or scheduled-mode behavior
Optional product decision, separate from the core bug:
- Revisit whether same-repo automation-authored issues should remain readable under the automatic public-repo guard
- that may help gh-aw's own issue-driven automation model
- but the targeted-dispatch correctness bug should be fixable even if the trust model stays as-is
Environment
- Latest verified repro version:
gh-aw v0.62.0
- Latest observed run: 23293758712
- Earlier supporting run: 23292688284
- Repository visibility: public
- Target repo:
samuelkahessay/team-standup-tracker
- Runtime GitHub MCP server:
v0.32.0
- Runtime MCP gateway:
v0.1.19
- Affected object type: automation-authored public-repo issues with GitHub
author_association: NONE
Context
Observed on 2026-03-19 while retesting
repo-assistafter the#033expression fix had already shipped.This is not the earlier prompt-rendering bug from
#21501/#21624.On the latest retest with
gh-aw v0.62.0, the activation prompt correctly rendered:Take heed of **instructions**: ""If 14 is non-empty, this run was dispatched for a specific issue and is bound to issue #14.So the workflow was correctly compiled and correctly bound to issue
#14.The run still finished
successwith no PR, but the failure mode was:#14directlylist_issues#14[aw]workflow-failure issues (#22,#20,#18)noop:Pipeline complete - No open issues or PRs to implement...That means a targeted dispatch bound to a real open issue can silently succeed while doing unrelated work.
Problem
For public repositories, gh-aw automatically applies
min-integrity: approvedwhen no explicit GitHub guard policy is configured.Relevant implementation/docs:
pkg/workflow/mcp_github_config.go:413-422says public repos automatically getmin-integrity: approveddocs/src/content/docs/reference/github-tools.md:106-113defines integrity fromauthor_association, with:approved=OWNER,MEMBER,COLLABORATORnone=FIRST_TIMER,NONEThe bound issue in the failing run was:
#14samuelkahessay/team-standup-trackerprd-to-prod-pipeline[bot]author_association: NONEUnder the current automatic guard model, that issue is filtered.
That filtering may be intentional under the trust model. The bug reported here is narrower:
The user-visible failure is not just filtered visibility. It is that a targeted run can lose its target and still exit
success.Why this is a bug
If
issue_number=<N>was supplied onworkflow_dispatch, that run should remain bound to#N.It should not:
If the bound issue is unreadable because of integrity policy, the run should fail explicitly or surface a clear integrity-filtered status for the bound issue. It should not drift into unrelated work.
Location
The observed behavior spans two layers:
Automatic public-repo guard policy
pkg/workflow/mcp_github_config.go:413-422min-integrity: approvedTargeted-dispatch execution path
list_issuesand treated the run like general backlog processinglist_issuesreturned[], the run moved into unrelated[aw]triage and noop successThere are likely two related product gaps here:
Reproduction
tools.github.min-integrityortools.github.lockdown.min-integrity: approved.author_association: NONE.workflow_dispatchwithissue_number=<that-issue>.list_issuesObserved concrete repro:
samuelkahessay/team-standup-tracker#14, authored byprd-to-prod-pipeline[bot],author_association: NONEgh-aw v0.62.0Pipeline Repo Assistviaworkflow_dispatchwithissue_number=14#14list_issuesand gets[]#14was filtered fromlist_issues[aw]issues and emits noop successExpected behavior
A targeted dispatch bound to an existing issue should not silently succeed with unrelated work.
Expected outcomes:
issue #14 exists but is filtered by min-integrity=approved (author_association: NONE)It should never degrade into scheduled backlog processing for unrelated issues.
Evidence
Latest failing run: 23293758712
Pipeline Repo Assistworkflow_dispatchmain40122dc96083be9779bcc5b48e1ec83bd09ec2b5gh-aw v0.62.0v0.1.19v0.32.0The prompt was correctly bound to issue
#14From the activation and agent prompt artifacts:
Take heed of **instructions**: ""If 14 is non-empty, this run was dispatched for a specific issue and is bound to issue #14.So this was not an unbound scheduled run.
The agent still scanned the backlog
From
agent-stdio.log:list_issues->[]Good! The Next.js application exists. Now let me check for open PRs and [aw] issues:It then proceeded to:
list_pull_requestssearch_issues repo:samuelkahessay/team-standup-tracker is:open label:agentic-workflowsactions_get/actions_listfor unrelated failed workflowsThat is not consistent with the prompt instruction:
Treat issue #14 as the only candidate for Task 1 in this run.Fetch that issue directly instead of scanning the backlog to choose a task.The bound issue was filtered out of
list_issuesFrom
mcp-logs/github.log:DIFC-FILTEREDonlist_issuesforissue:samuelkahessay/team-standup-tracker#14The same log shows many automation-authored pipeline issues being filtered in the same call.
The bound issue was live during investigation:
#14wasOPEN[Pipeline] Create database schema and initializationprd-to-prod-pipeline[bot]author_association: NONEThe run reclassified itself as scheduled mode
From
agent-stdio.logand repo-memory output:This appears to be a fully complete PRD run.I should ... Call noop to signal completion since there's no implementation work to dorun-45-status.mdwith:Mode: Scheduled (no targeted issue)Open Issues: 0 pipeline issuesIssue #22,#20,#18triage summarySo the run lost the dispatch binding entirely, even though the prompt contained it.
Workflow outcome was misleading
The run finished
successand emitted:No PR was created for issue
#14.Earlier related run on
v0.61.2An earlier run on the same repo after the
#033fix shipped, 23292688284, showed a closely related symptom:#14issue_read(#14)[]So the underlying integrity-filtering problem remained after
#033, and the latestv0.62.0run still fails, now via a broader targeted-dispatch control-flow bug.Proposed fix
The minimum product fix is to harden targeted dispatch:
When
issue_numberis supplied, force a direct bound-issue read before any backlog scanlist_issuescandidate selection for the bound issueIf the bound issue is filtered by integrity policy, fail explicitly
[]Do not allow successful noop completion when a targeted issue was never successfully evaluated
Add regression coverage
min-integrity: approvedauthor_association: NONEworkflow_dispatchOptional product decision, separate from the core bug:
Environment
gh-aw v0.62.0samuelkahessay/team-standup-trackerv0.32.0v0.1.19author_association: NONE