Found while dogfooding the platform lane on a live deployment.
What happened
Triggering an agent from the control plane (POST /v1/projects/:projectId/issues/:number/trigger, trigger type web_issue) creates a run whose trigger payload carries only the issue number — unlike the GitHub-comment path, where routeTrigger embeds request: githubRequestContext(payload) precisely because "without this context an agent only received numeric GitHub IDs and could not know what work the user requested".
The architect then tried every channel to learn the ask and hit walls by design:
- GitHub REST via the run's installation token →
403 Resource not accessible by integration (run-scoped token is minted least-privilege, no issues:read, even though the App installation itself has issues: write).
- Facility platform API via
$FACILITY_PLATFORM_KEY → 403 forbidden (key lacks issues:read / projects:read / tasks:read).
The agent (correctly) refused to fabricate a plan and stopped at Human Gate 1 asking for the issue text. Evidence: run run_019f8177e2b671a2a3052fe29bef8a2d, the run’s progress comment.
Expected
A web_issue-triggered run should be self-sufficient: embed the synced issue title/body from ghIssues into the trigger (the platform already has it — the issue is synced), mirroring githubRequestContext. Alternatively (or additionally), scope the run's platform key to read its own triggering issue.
Why it matters
The web trigger is the UI's primary affordance; today it produces a run that cannot know what was asked, which reads as a broken product experience unless the user happens to know the comment path works differently.
Found while dogfooding the platform lane on a live deployment.
What happened
Triggering an agent from the control plane (
POST /v1/projects/:projectId/issues/:number/trigger, trigger typeweb_issue) creates a run whose trigger payload carries only the issue number — unlike the GitHub-comment path, whererouteTriggerembedsrequest: githubRequestContext(payload)precisely because "without this context an agent only received numeric GitHub IDs and could not know what work the user requested".The architect then tried every channel to learn the ask and hit walls by design:
403 Resource not accessible by integration(run-scoped token is minted least-privilege, noissues:read, even though the App installation itself hasissues: write).$FACILITY_PLATFORM_KEY→403 forbidden(key lacksissues:read/projects:read/tasks:read).The agent (correctly) refused to fabricate a plan and stopped at Human Gate 1 asking for the issue text. Evidence: run
run_019f8177e2b671a2a3052fe29bef8a2d, the run’s progress comment.Expected
A
web_issue-triggered run should be self-sufficient: embed the synced issue title/body fromghIssuesinto the trigger (the platform already has it — the issue is synced), mirroringgithubRequestContext. Alternatively (or additionally), scope the run's platform key to read its own triggering issue.Why it matters
The web trigger is the UI's primary affordance; today it produces a run that cannot know what was asked, which reads as a broken product experience unless the user happens to know the comment path works differently.