Dashboard › sentry › Session 0f8rpVA44ZCw
0f8rpVA44ZCwozh7kKeep running
gh run view --log-failed --job $(gh pr checks $PR_NO --json state,link -q '.[] | select(.state == "FAILURE").link | split("/")[-1]')'
to get all failing jobs after you push. Make sure to wait for "Sentry Seer" and "Cursor BugBot" jobs to finish. Fix any failing jobs. Address all unresolved comments (both from bots and humans) from the PR by making a todo list. When you address each PR, either respond to them or mark them as resolved. Don't stop until the todo items are all done. Keep repeating this cycle until there are no more CI failures nor unresolved comments from humans or bots.
Use the following command to get the unresolved comments:
gh api graphql -F owner='<REPO_OWNER>' -F name='<REPO_NAME>' -F number=<PR_NUMBER> -f query='query($owner: String!, $name: String!, $number: Int!) { repository(owner: $owner, name: $name) { pullRequest(number: $number) { reviewThreads(first: 100) { nodes { isResolved comments(first: 100) { nodes { diffHunk body startLine line isMinimized } } } } } } }' -q '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | .comments.nodes[] | select(.isMinimized == false) | {diff_hunk: .diffHunk, line: .line, start_line: .startLine, body: .body}]'
You'll need to replace <REPO_OWNER>, <REPO_NAME>, and <PR_NUMBER> with relevant
values for the current repo and PR. (You can probably get them by running gh pr status or gh pr view)
gh run view --log-failed --job $(gh pr checks $PR_NO --json state,link -q '.[] | select(.state == "FAILURE").link | split("/")[-1]')'
to get all failing jobs after you push. Make sure to wait for "Sentry Seer" and "Cursor BugBot" jobs to finish. Fix any failing jobs. Address all unresolved comments (both from bots and humans) from the PR by making a todo list. When you address each PR, either respond to them or mark them as resolved. Don't stop until the todo items are all done. Keep repeating this cycle until there are no more CI failures nor unresolved comments from humans or bots.
Use the following command to get the unresolved comments:
gh api graphql -F owner='<REPO_OWNER>' -F name='<REPO_NAME>' -F number=<PR_NUMBER> -f query='query($owner: String!, $name: String!, $number: Int!) { repository(owner: $owner, name: $name) { pullRequest(number: $number) { reviewThreads(first: 100) { nodes { isResolved comments(first: 100) { nodes { diffHunk body startLine line isMinimized } } } } } } }' -q '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | .comments.nodes[] | select(.isMinimized == false) | {diff_hunk: .diffHunk, line: .line, start_line: .startLine, body: .body}]'
You'll need to replace <REPO_OWNER>, <REPO_NAME>, and <PR_NUMBER> with relevant
values for the current repo and PR. (You can probably get them by running gh pr status or gh pr view)
Please address this message and continue with your tasks. </system-reminder>
[tool results provided]
Let me check the current CI status on the PR.
[tool results provided]
CI is mostly passing. The "Seer Code Review" and "Cursor Bugbot" checks are still NEUTRAL (pending). Let me wait a bit and check again.
[tool results provided]
Still pending. Let me wait a bit longer.
[tool results provided]
These three checks are still NEUTRAL. The "getsentry / backend" is likely waiting on an external trigger. Let me check the unresolved comments while we wait, since those can be addressed in parallel.
[tool results provided]
Good findings from the bots. Let me examine the existing Connect descriptor to verify the correct URLs and icon handling.
[tool results provided]
[tool results provided]
Both bot findings are valid. Let me fix both issues:
/extensions/jira/issue/{issue.key}/ to /extensions/jira/issue-details/{issue.key}/get_frontend_app_asset_url. But we can use a stable, non-hashed URL instead.Let me check what stable icon URLs are available.
[tool results provided]
[tool results provided]
The Forge manifest is static YAML — it can't dynamically resolve asset URLs. For the icon, I'll use a stable non-hashed path. Let me check if there's a stable redirect or non-hashed URL available.
[tool results provided]
[tool results provided]
Now I understand the asset resolution. The function returns /_static/dist/sentry/entrypoints/logo-sentry.svg (unversioned) when no frontend-versions config exists, or the hashed version when it does. The key insight is that Atlassian fetches this URL from sentry.io — so we need a URL that sentry.io serves.
The non-hashed path https://sentry.io/_static/dist/sentry/entrypoints/logo-sentry.svg would work as a stable URL since it's served with must-revalidate headers and always resolves to the current version. But for a static manifest, the simpler option is to use https://sentry.io/_static/dist/sentry/images/sentry-glyph-black.svg or the same base path the descriptor uses dynamically.
Let me check what stable image URLs are commonly used:
[tool results provided]
[tool results provided]
The Forge manifest is a static file — we can't dynamically resolve asset URLs. The best approach is to use the non-hashed entrypoint URL which sentry.io serves with Cache-Control: max-age=0, must-revalidate. This URL always resolves to the current version.
Let me apply both fixes:
[tool results provided]
[tool results provided]
Both fixes applied. Let me verify the file looks correct:
[tool results provided]
Good. Now let me commit, push, and respond to the bot comments.
[tool results provided]
[tool results provided]
Pushed. Now let me respond to the bot comments and resolve the threads.
[tool results provided]
Now let me reply to each thread and resolve them:
[tool results provided]
[tool results provided]
Now let me resolve the three threads:
[tool results provided]
All three threads resolved. Now let me wait for CI on the new push and check for any new failures or comments.
[tool results provided]
[tool results provided]
CI is running. Let me wait for it to finish.
[tool results provided]
Getting closer — most checks have passed. Let me wait for the remaining ones.
[tool results provided]
Almost done. Just a couple more still running.
[tool results provided]
[tool results provided]
The backend migration tests is taking a while. Let me check if it's stuck or just slow, and also verify the getsentry / backend status:
[tool results provided]
backend migration tests passed. The only remaining item is getsentry / backend which is NEUTRAL — this is an external trigger from the getsentry repo and not something we can control. It's not a failure.
Let me do a final check for any new unresolved comments and any failures:
[tool results provided]
All clear:
getsentry / backend (NEUTRAL) — an external trigger, not a failure[tool results provided]
Everything is done. Here's the summary:
PR: https://github.com/getsentry/sentry/pull/115603
What was done:
manifest.yml at src/sentry/integrations/jira/forge/ for the Jira Connect-to-Forge migration./extensions/jira/issue/{issue.key}/ to /extensions/jira/issue-details/{issue.key}/, matching the current Connect descriptor and enabling multi-cell support.https://sentry.io/_static/dist/sentry/entrypoints/logo-sentry.svg).[tool results provided]
Thorough review with no critical issues. Let me address the two pre-merge suggestions (the MEDIUM scope comment and the NIT webhook key rename), then merge.
[tool results provided]
[tool results provided]
[tool results provided]
Let me verify the final file:
[tool results provided]
Looks good. Let me commit, push, and wait for CI.
[tool results provided]
[tool results provided]
Pushed. Now let me wait for CI and then check for any new comments/failures before merging.
[tool results provided]
[tool results provided]
[tool results provided]
[tool results provided]
Migration tests are slow. Let me wait a bit more.
[tool results provided]
All CI checks passed. Only getsentry / backend remains NEUTRAL (external trigger, not a failure). Let me do a final check for new comments:
[tool results provided]
Zero failures, zero unresolved comments. Let me mark the PR as ready and merge:
[tool results provided]
Looks like the merge command didn't output anything after the "ready" message. Let me check the merge status:
[tool results provided]
PR is merged. Now let me update the stale lore entry:
[tool results provided]
I need to update the stale lore entry at line 37. The Forge manifest now uses the same URL as the Connect descriptor.
[tool results provided]
[tool results provided]
All done. Here's the final summary:
PR #115603 — merged: https://github.com/getsentry/sentry/pull/115603
3 commits:
chore(jira): Add Forge app manifest for Connect-to-Forge migration — initial manifestfix(jira): Address Forge manifest review feedback — fixed legacy URL and hardcoded iconref(jira): Improve Forge manifest clarity — scope comment and webhook key renameIssues found and fixed during review:
/extensions/jira/issue/{issue.key}/ URL → updated to /extensions/jira/issue-details/{issue.key}/ (multi-cell support)webhook-1 key → descriptive sentry-issue-updated-webhookaccess-email-addresses scopePost-merge: Updated the .lore.md entry to reflect that both the Connect descriptor and Forge manifest are now in sync.