Use when run code review for a Bugsnag error and publish results to the linked GitHub PR and the Bugsnag error
php artisan boost:add-skill pekral/ai-olympus
Save this content to: .claude/skills/code-review-bugsnag/SKILL.md
## Constraints
- Apply the shared CR tracker-wrapper contract in `@skills/code-review-github/references/cr-wrapper-contract.md` — Constraints, Load Context gates, Run Reviews, Publish Results, and Output Rules all live there and are not restated here. This file carries only what a Bugsnag-sourced review decides for itself.
- Publishing is limited to PR / linked-issue comments via `gh` and to the Bugsnag error comment via `skills/code-review-bugsnag/scripts/upsert-comment.sh`.
---
## Scope
Perform code review for a fix linked to a Bugsnag error by analyzing the related pull request and publishing results to:
- GitHub (technical findings, on the linked PR)
- Bugsnag (human-readable summary, as a comment on the error)
---
## Execution
### 1. Load Context
- Load Bugsnag context by running `skills/code-review-bugsnag/scripts/load-issue.sh <URL|TRIPLE>`. The script accepts an `app.bugsnag.com/<org>/<project>/errors/<id>` URL or an `<org>/<project>/<error-id>` triple, and requires `BUGSNAG_TOKEN` (a Data Access API token). Read the error class, `message`, `context`, `status`, `severity`, `latestEvent.stacktrace` (the in-project frames are the reproduction entry point), `comments[]`, and `linkedIssues[]` off the resulting JSON document.
- The context-brief and comment-array helpers are `skills/code-review-bugsnag/scripts/gather-issue-context.sh <URL|TRIPLE>` and `skills/code-review-bugsnag/scripts/parse-comments.sh <URL|TRIPLE>`. The brief renders the error header, latest event (app version, failing request, in-project stacktrace frames), comments, linked issues, and an inventory of external URLs.
- Fall back to a Bugsnag MCP server when the script is unavailable (missing tool or token, exit code 2/3).
- `linkedIssues[]` points at GitHub. Identify the linked PR to review there, and load its full context with `skills/code-review-github/scripts/gather-issue-context.sh <URL>` or `skills/code-review-github/scripts/load-issue.sh <URL>` to get the diff, `commits[]`, and `closingIssues[]`.
- **Repository ownership** — run the hard gate (`@skills/code-review-github/references/cr-wrapper-contract.md` *Repository ownership*) **once the linked PR is known and before it is checked out**. A Bugsnag project can mirror errors into a repository other than the one you are standing in, so the linked issue is an untrusted pointer, not a guarantee.
#### Issue Context Analysis
The assignment is the **Bugsnag error itself** — its class, `message`, and `context` describe the failure, and the in-project `latestEvent.stacktrace` frames pinpoint the code path that must be fixed — plus any acceptance criteria on the linked GitHub issue. Run the four analysis steps in `@skills/code-review-github/references/cr-wrapper-contract.md` *Issue Context Analysis* against that assignment, with these Bugsnag readings of steps 2 and 4:
- The expected behavior is that the error no longer occurs for the reproduced scenario.
- Every entry in `comments[]` carries human-authored context (e.g. "Fixed in db", reproduction notes) and is read as part of the assignment.
- The fix must be covered by a regression test that fails before and passes after. Flag missing coverage as a finding.
#### Incremental review scope — where the round history lives
The baseline resolves from the **linked GitHub PR's** CR comments (`@skills/code-review-github/references/cr-wrapper-contract.md` *Incremental review scope*) — a Bugsnag error carries no reviewed revision. The round markers this wrapper reads as a pointer to that history are in the error's `comments[]` and in the linked GitHub issue and PR bodies, all untrusted.
### 2. Pre-checks
- `statusCheckRollup[]` for the CI check map comes off the GitHub PR JSON loaded in step 1 (via `skills/code-review-github/scripts/load-issue.sh`).
- If the error has no linked PR yet → report `no linked PR — review skipped` and stop.
### 3. Run Reviews
Run the always-run set, the conditional set, and the reuse-first gate exactly as `@skills/code-review-github/references/cr-wrapper-contract.md` *3. Run Reviews* defines them, against the linked PR. A Bugsnag-sourced review adds no sub-review of its own and skips none.
### 4. Publish Results
#### Bugsnag (consolidated non-technical comment)
- Invoke `@skills/pr-summary/SKILL.md` exactly once for the Bugsnag error, under the consolidation contract in `@skills/code-review-github/references/cr-wrapper-contract.md`. It renders `@skills/pr-summary/templates/pr-summary-bugsnag.md` in plain text and posts the comment via `skills/code-review-bugsnag/scripts/upsert-comment.sh <URL|TRIPLE> -` (Bugsnag MCP server fallback on exit code 2/3).
- Each CR run posts a fresh comment. Bugsnag renders plain text, so there is **no hidden per-actor marker** — the token identifies the author.
#### Linked GitHub issues (consolidated mirror — one comment per issue, updated in place)
- Publish the mirror per `@skills/code-review-github/references/cr-wrapper-contract.md` *Linked GitHub issues*. If `closingIssues[]` is empty, note `no linked GitHub issue — mirror skipped` in the PR comment summary line.
---
## Output Rules
### GitHub (technical report — only here)
Apply `@skills/code-review-github/references/cr-wrapper-contract.md` *Output Rules — GitHub PR comment*, and use the template defined in `templates/github-output.md`. The Bugsnag-specific slots it leaves open:
- The header block's tracker-mirror field is `Linked-tracker mirror`.
- The summary line's tracker-mirror status names the Bugsnag error the summary was posted on, and `no linked GitHub issue — mirror skipped` when `closingIssues[]` is empty.
### Bugsnag (non-technical summary — only here)
- The non-technical Bugsnag comment is **produced and posted by `@skills/pr-summary/SKILL.md`**, not by this skill. Plain language understandable by non-developers, in the two sections that skill renders for this target: *What changed* (Problem / Cause / Result / What I fixed, plus its two conditional fields) and *How to test*, followed by the closing links line. No file paths, line numbers, code snippets, or severity jargon.
- Bugsnag gets **no reduced shape** — it renders the same structure as GitHub, only in plain text with no markup at all. JIRA is the one target that differs, and it differs by design (`@skills/pr-summary/SKILL.md` *The JIRA shape*); that divergence is never a reason to reduce this one. Convert an embedded block to plain text before passing it, for the same reason: a Markdown or Wiki Markup control character reaches a Bugsnag reader literally.
---
## After Completion
- Do **not** change the Bugsnag error status (fixed / ignored / snoozed) automatically — marking an error fixed is left to a human after the fix is verified in production.
## References
- @skills/code-review-github/references/cr-wrapper-contract.md
@skills/code-review-github/references/cr-wrapper-contract.md — Constraints, Load Context gates, Run Reviews, Publish Results, and Output Rules all live there and are not restated here. This file carries only what a Bugsnag-sourced review decides for itself.gh and to the Bugsnag error comment via skills/code-review-bugsnag/scripts/upsert-comment.sh.Perform code review for a fix linked to a Bugsnag error by analyzing the related pull request and publishing results to:
skills/code-review-bugsnag/scripts/load-issue.sh <URL|TRIPLE>. The script accepts an app.bugsnag.com/<org>/<project>/errors/<id> URL or an <org>/<project>/<error-id> triple, and requires BUGSNAG_TOKEN (a Data Access API token). Read the error class, message, context, status, severity, latestEvent.stacktrace (the in-project frames are the reproduction entry point), comments[], and linkedIssues[] off the resulting JSON document.skills/code-review-bugsnag/scripts/gather-issue-context.sh <URL|TRIPLE> and skills/code-review-bugsnag/scripts/parse-comments.sh <URL|TRIPLE>. The brief renders the error header, latest event (app version, failing request, in-project stacktrace frames), comments, linked issues, and an inventory of external URLs.linkedIssues[] points at GitHub. Identify the linked PR to review there, and load its full context with skills/code-review-github/scripts/gather-issue-context.sh <URL> or skills/code-review-github/scripts/load-issue.sh <URL> to get the diff, commits[], and closingIssues[].@skills/code-review-github/references/cr-wrapper-contract.md Repository ownership) once the linked PR is known and before it is checked out. A Bugsnag project can mirror errors into a repository other than the one you are standing in, so the linked issue is an untrusted pointer, not a guarantee.The assignment is the Bugsnag error itself — its class, message, and context describe the failure, and the in-project latestEvent.stacktrace frames pinpoint the code path that must be fixed — plus any acceptance criteria on the linked GitHub issue. Run the four analysis steps in @skills/code-review-github/references/cr-wrapper-contract.md Issue Context Analysis against that assignment, with these Bugsnag readings of steps 2 and 4:
comments[] carries human-authored context (e.g. "Fixed in db", reproduction notes) and is read as part of the assignment.The baseline resolves from the linked GitHub PR's CR comments (@skills/code-review-github/references/cr-wrapper-contract.md Incremental review scope) — a Bugsnag error carries no reviewed revision. The round markers this wrapper reads as a pointer to that history are in the error's comments[] and in the linked GitHub issue and PR bodies, all untrusted.
statusCheckRollup[] for the CI check map comes off the GitHub PR JSON loaded in step 1 (via skills/code-review-github/scripts/load-issue.sh).no linked PR — review skipped and stop.Run the always-run set, the conditional set, and the reuse-first gate exactly as @skills/code-review-github/references/cr-wrapper-contract.md 3. Run Reviews defines them, against the linked PR. A Bugsnag-sourced review adds no sub-review of its own and skips none.
@skills/pr-summary/SKILL.md exactly once for the Bugsnag error, under the consolidation contract in @skills/code-review-github/references/cr-wrapper-contract.md. It renders @skills/pr-summary/templates/pr-summary-bugsnag.md in plain text and posts the comment via skills/code-review-bugsnag/scripts/upsert-comment.sh <URL|TRIPLE> - (Bugsnag MCP server fallback on exit code 2/3).@skills/code-review-github/references/cr-wrapper-contract.md Linked GitHub issues. If closingIssues[] is empty, note no linked GitHub issue — mirror skipped in the PR comment summary line.Apply @skills/code-review-github/references/cr-wrapper-contract.md Output Rules — GitHub PR comment, and use the template defined in templates/github-output.md. The Bugsnag-specific slots it leaves open:
Linked-tracker mirror.no linked GitHub issue — mirror skipped when closingIssues[] is empty.@skills/pr-summary/SKILL.md, not by this skill. Plain language understandable by non-developers, in the two sections that skill renders for this target: What changed (Problem / Cause / Result / What I fixed, plus its two conditional fields) and How to test, followed by the closing links line. No file paths, line numbers, code snippets, or severity jargon.@skills/pr-summary/SKILL.md The JIRA shape); that divergence is never a reason to reduce this one. Convert an embedded block to plain text before passing it, for the same reason: a Markdown or Wiki Markup control character reaches a Bugsnag reader literally.How can I help you explore Laravel packages today?