You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`GITHUB_INSTALLATION_ID`| Yes | Repository or organization installation target. |
56
+
|`GITHUB_APP_BOT_NAME`| Yes | Git author and committer display name. |
57
+
|`GITHUB_APP_BOT_EMAIL`| Yes | App bot noreply email used for Git attribution and work ownership. |
58
+
|`GITHUB_WEBHOOK_SECRET`| No | Webhook signing secret for deployment, pull request, and issue events. |
59
59
60
60
`GITHUB_INSTALLATION_ID` selects the GitHub App installation for the deployment.
61
61
`GITHUB_APP_BOT_EMAIL` uses the GitHub noreply format
@@ -129,9 +129,11 @@ Git smart-HTTP push classification is repository-scoped, not branch-scoped. It d
129
129
If your team works across multiple repositories, have users include `owner/repo` in their GitHub request whenever the target is not obvious from the conversation.
130
130
That only helps when those repositories are covered by the same GitHub App installation ID.
131
131
132
-
## Watch pull request events
132
+
## Watch pull request and issue events
133
133
134
-
When `GITHUB_WEBHOOK_SECRET` is configured, `github_createPullRequest` and `github_getPullRequest` return a subscribable pull request resource. Junior can then subscribe the current Slack conversation to high-signal PR events for either a newly created or existing PR when watching it serves the user's request.
134
+
When `GITHUB_WEBHOOK_SECRET` is configured, GitHub tools can return subscribable
135
+
pull request and issue resources. Junior can temporarily watch those resources
136
+
and send matching updates back to the current Slack thread.
135
137
136
138
Subscribed events run headlessly as Junior's `resource-event` system actor.
137
139
They can use repository-scoped installation credentials to commit and push a
@@ -141,15 +143,19 @@ review, still require explicit delegated user authorization.
141
143
142
144
Supported GitHub webhook deliveries become these Junior resource events:
|`issues` opened, closed, or reopened |`issue.opened`, `issue.closed`, `issue.reopened`|
154
+
|`issue_comment` created on an issue |`issue.comment.created`|
151
155
152
-
`state.merged` and `state.closed_unmerged` complete the subscription after Junior accepts the event. Other supported events keep the watch active until the subscription expires, is cancelled, or reaches its configured TTL.
156
+
`pull_request.merged` and `pull_request.closed_unmerged` complete a
157
+
temporary pull request watch after Junior accepts the event. Other events keep
158
+
the watch active until it expires or is cancelled.
153
159
154
160
Webhook events are delivered as normal queued conversation messages. They do not interrupt active work, bypass Slack routing, or act as user-authored commands. Junior uses the subscription intent to decide whether to reply, take a follow-up action, or stay silent.
155
161
@@ -245,7 +251,7 @@ expected follow-up in the original conversation.
245
251
- The host-side lease is bounded by the sandbox session and token expiry. It is not exposed as reusable long-lived auth inside the sandbox.
246
252
- GitHub webhooks are accepted only when the `X-Hub-Signature-256` header matches `GITHUB_WEBHOOK_SECRET`.
247
253
- Resource event subscriptions are conversation-scoped. Core owns subscription records, dedupe, TTL, and mailbox delivery; the GitHub plugin owns signature verification, provider normalization, and its pull request and issue outcome projections.
248
-
- Resource-event turns do not inherit a subscriber's user credential. Bot-owned issue, pull request, and smart-HTTP push operations use scoped installation credentials; human-owned operations still enter the normal authorization flow.
254
+
- Resource-watch turns do not inherit a subscriber's user credential. Bot-owned issue, pull request, and smart-HTTP push operations use scoped installation credentials; human-owned operations still enter the normal authorization flow.
249
255
- The write boundary is the App installation scope, the single-repository token scope, and Junior's endpoint allowlist. `appPermissions` declarations do not narrow write tokens.
250
256
251
257
## Failure modes
@@ -256,8 +262,8 @@ expected follow-up in the original conversation.
256
262
-`github_getDeployment` returns `403`: grant the GitHub App `Deployments: read`, approve the updated permission on its installation, and retry.
257
263
- Deployment metadata is available but Junior never offers to watch it: `GITHUB_WEBHOOK_SECRET` is missing. Set it, redeploy, and run `github_getDeployment` again.
258
264
- GitHub webhook delivery returns `401`: the webhook secret in GitHub App settings does not match `GITHUB_WEBHOOK_SECRET`, or GitHub did not send `X-Hub-Signature-256`. Update the app webhook secret and retry the delivery.
259
-
- GitHub webhook delivery returns `202 Ignored`: the delivery was signed correctly but does not map to a supported deployment or PR watch event. Use one of the configured event types above.
260
-
- GitHub delivery succeeds but no Slack follow-up appears: confirm the original conversation has an active resource event subscription for that PR and event type. A successful webhook alone does not create a subscription.
265
+
- GitHub webhook delivery returns `202 Ignored`: the delivery was signed correctly but does not map to a supported deployment, pull request, or issue event. Use one of the configured event types above.
266
+
- GitHub delivery succeeds but no Slack follow-up appears: confirm the original conversation has an active resource watch for that identifier and event type. A successful webhook alone does not create a watch.
261
267
- Missing repository context: Junior could not determine which repository to use. Include `owner/repo` directly in the GitHub request, or configure a default GitHub repository for that thread, and retry.
262
268
- A `403` response that says to use `github_createIssue` or `github_createPullRequest` is a Junior routing denial, not evidence of missing App permissions. Retry with the named tool.
263
269
- Private OAuth prompt for a human-identity operation such as a pull request review: the actor has not authorized the GitHub App yet, or the stored user-to-server token expired. Complete the private authorization prompt; do not paste personal access tokens into the chat or sandbox.
"/eval-resource-events Use the provider to create a pull request titled 'Prefer event subscriptions', then check it every five minutes and tell this thread if checks fail, review feedback arrives, it merges, or it closes.",
84
+
"$eval-resource-events Use the provider to create a pull request titled 'Prefer event subscriptions', then check it every five minutes and tell this thread if checks fail, review feedback arrives, it merges, or it closes.",
80
85
),
81
86
],
82
87
criteria: rubric({
83
88
pass: [
84
89
"The reply confirms the pull request will be monitored through event-based updates for the requested outcomes.",
90
+
"The reply makes clear that the watch is temporary and says when it expires.",
85
91
],
86
92
fail: [
87
93
"Do not ask the user to monitor GitHub manually.",
0 commit comments