<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ojie Oriarewo</title>
    <description>The latest articles on DEV Community by Ojie Oriarewo (@ojie-oriarewo).</description>
    <link>https://dev.to/ojie-oriarewo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F227091%2F4c04de8d-34eb-4e73-8315-b20f9d2c7b34.png</url>
      <title>DEV Community: Ojie Oriarewo</title>
      <link>https://dev.to/ojie-oriarewo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ojie-oriarewo"/>
    <language>en</language>
    <item>
      <title>How I Use Multi-Agent AI to Debug Production Errors in My Laravel App</title>
      <dc:creator>Ojie Oriarewo</dc:creator>
      <pubDate>Wed, 04 Mar 2026 08:33:38 +0000</pubDate>
      <link>https://dev.to/ojie-oriarewo/how-i-use-multi-agent-ai-to-debug-production-errors-in-my-laravel-app-2f90</link>
      <guid>https://dev.to/ojie-oriarewo/how-i-use-multi-agent-ai-to-debug-production-errors-in-my-laravel-app-2f90</guid>
      <description>&lt;p&gt;Production bugs have a predictable, exhausting rhythm.&lt;/p&gt;

&lt;p&gt;Sentry fires. You open the issue, read the stack trace, try to orient yourself. Then you jump to the code. Then you open TablePlus to check the database record. Then you check git to see what changed recently. Then you open Telescope to look at the queries that ran during that request. You're holding five mental contexts simultaneously, cross-referencing them by hand, and trying to reason about what went wrong.&lt;/p&gt;

&lt;p&gt;It works. But it's slow, and the context-switching is brutal.&lt;/p&gt;

&lt;p&gt;I got tired of it. So I built a multi-agent debugging system using Claude Code that does all of that investigation in parallel and hands me back a diagnosis and a ready-to-review fix.&lt;/p&gt;

&lt;p&gt;This is how it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The system has five parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;investigate&lt;/code&gt; — the orchestrator.&lt;/strong&gt; This is the command you actually run. It receives the error context, dispatches four specialist subagents in parallel, waits for their findings, synthesises everything, and produces the fix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;sentry-fetcher&lt;/code&gt; — the error interpreter.&lt;/strong&gt; Hits the Sentry API, retrieves the full issue, parses the stack trace, and returns structured findings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;telescope-reader&lt;/code&gt; — the request inspector.&lt;/strong&gt; Queries Laravel Telescope to find the exact request that failed — every SQL query it ran, how long each took, any exceptions logged, any N+1 patterns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;codebase-analyst&lt;/code&gt; — the code tracer.&lt;/strong&gt; Reads the route, the controller method, every service and model it touches, the migration, and focuses on the exact file and line from the stack trace to identify what assumption the code is making that could be wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;git-detective&lt;/code&gt; — the history investigator.&lt;/strong&gt; Runs &lt;code&gt;git blame&lt;/code&gt; on the error line, shows the last commit that touched it, diffs that commit, and checks whether a recent change introduced the regression.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The orchestrator runs all four in parallel. When they're done, it cross-references their findings and produces a diagnosis and a minimal code fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Orchestrator: &lt;code&gt;investigate&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This is the Claude Code command that kicks everything off. You run it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Minimal invocation&lt;/span&gt;
investigate &lt;span class="nv"&gt;error&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"TypeError: Cannot access property 'id' of null"&lt;/span&gt; &lt;span class="nv"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"POST /api/tournaments/join"&lt;/span&gt;

&lt;span class="c"&gt;# With more context&lt;/span&gt;
investigate &lt;span class="nv"&gt;issue_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CADE-412"&lt;/span&gt; &lt;span class="nv"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"POST /api/tournaments/join"&lt;/span&gt; &lt;span class="nv"&gt;controller&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"App&lt;/span&gt;&lt;span class="se"&gt;\H&lt;/span&gt;&lt;span class="s2"&gt;ttp&lt;/span&gt;&lt;span class="se"&gt;\C&lt;/span&gt;&lt;span class="s2"&gt;ontrollers&lt;/span&gt;&lt;span class="se"&gt;\A&lt;/span&gt;&lt;span class="s2"&gt;pi&lt;/span&gt;&lt;span class="se"&gt;\T&lt;/span&gt;&lt;span class="s2"&gt;ournamentController@join"&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"14:30 UTC"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The orchestrator's job is coordination, not investigation. Its prompt instructs it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Phase 1 — Dispatch all 4 subagents IN PARALLEL

Spawn these 4 tasks simultaneously. Do not wait for one before starting the next.

- sentry-fetcher: pass the issue ID, endpoint, and time window
- telescope-reader: pass the endpoint, time window, and Telescope URL
- codebase-analyst: pass the endpoint, controller@method, file and line
- git-detective: pass the file path, line number, and related files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The parallel execution is important. Each agent does real work — API calls, file reads, git commands. Running them sequentially would be slow. Running them in parallel means the total time is roughly the duration of the slowest agent, not the sum of all four.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Sentry Fetcher
&lt;/h2&gt;

&lt;p&gt;This agent handles one thing: talk to the Sentry API and return structured findings.&lt;/p&gt;

&lt;p&gt;It reads &lt;code&gt;SENTRY_AUTH_TOKEN&lt;/code&gt;, &lt;code&gt;SENTRY_ORG&lt;/code&gt;, and &lt;code&gt;SENTRY_PROJECT&lt;/code&gt; from your &lt;code&gt;.env&lt;/code&gt; file and hits the Sentry REST API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# If you give it an issue ID directly:
GET https://sentry.io/api/0/organizations/&amp;lt;org&amp;gt;/issues/&amp;lt;issue-id&amp;gt;/

# Then always fetches the latest event:
GET https://sentry.io/api/0/organizations/&amp;lt;org&amp;gt;/issues/&amp;lt;issue-id&amp;gt;/events/latest/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It returns a structured block the orchestrator can reason over:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SENTRY FINDINGS
===============
Issue ID: CADE-412
Title: TypeError: Attempt to read property "id" on null
Culprit: App\Services\TournamentService::joinTournament (line 87)
First Seen: 2026-02-28 14:31 UTC
Last Seen: 2026-03-01 09:12 UTC
Total Occurrences: 34
Affected Users: 12

STACK TRACE (most relevant frames):
- File: app/Services/TournamentService.php
- Line: 87
- Method: joinTournament
- Code: $entry-&amp;gt;tournament-&amp;gt;prize_pool

BREADCRUMBS (last 5 before crash):
1. GET /api/tournaments/412 - 200
2. POST /api/tournaments/join - request received
3. Validation passed
4. TournamentService::joinTournament called
5. Entry::create succeeded — then crash

ROOT SUSPICION:
$entry-&amp;gt;tournament relationship returned null — eager load likely missing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the agent that tells the others where to look. The stack trace it surfaces gets passed to &lt;code&gt;codebase-analyst&lt;/code&gt; and &lt;code&gt;git-detective&lt;/code&gt; so they know exactly which file and line to focus on.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Telescope Reader
&lt;/h2&gt;

&lt;p&gt;This agent queries Laravel Telescope's internal API to reconstruct the exact request that failed. Under the hood it hits &lt;code&gt;/telescope-api/requests&lt;/code&gt;, &lt;code&gt;/telescope-api/queries&lt;/code&gt;, and &lt;code&gt;/telescope-api/exceptions&lt;/code&gt; — but you never touch any of that directly. You just get this back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TELESCOPE FINDINGS
==================
Matched Request Entry ID: 01HX7K2...
Endpoint: POST /api/tournaments/join
Timestamp: 2026-02-28 14:31:22 UTC
Response Status: 500
Response Time: 1,847ms

QUERIES EXECUTED:
1. SELECT * FROM tournaments WHERE id = ? — 2ms
2. SELECT * FROM entries WHERE tournament_id = ? — 3ms
3. SELECT * FROM entries WHERE tournament_id = ? — 3ms  ← repeated
4. SELECT * FROM entries WHERE tournament_id = ? — 3ms  ← repeated
... (repeated 23 more times)

N+1 WARNING: Yes
Same query repeated 26 times with different bindings.

ROOT SUSPICION:
Missing eager load on entries. The tournament relationship was never loaded
on the Entry model — each access triggered a separate query.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Telescope isn't available in production (common if you've disabled it for performance), the agent says so clearly and returns empty findings rather than guessing — which is the right behaviour.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Codebase Analyst
&lt;/h2&gt;

&lt;p&gt;This agent reads your actual code. It doesn't guess at structure — it opens files.&lt;/p&gt;

&lt;p&gt;Given the endpoint, controller, and error line, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reads &lt;code&gt;routes/api.php&lt;/code&gt; to confirm the route mapping&lt;/li&gt;
&lt;li&gt;Reads the full controller file and focuses on the affected method&lt;/li&gt;
&lt;li&gt;Traces every service, repository, and helper the method calls&lt;/li&gt;
&lt;li&gt;Reads every model involved — relationships, casts, accessors&lt;/li&gt;
&lt;li&gt;Reads the relevant migration to check column types and nullable constraints&lt;/li&gt;
&lt;li&gt;Goes directly to the error line and reads 20 lines above and below&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The output tells the orchestrator exactly what assumption the code is making that could be wrong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CODEBASE FINDINGS
=================
Route confirmed: POST /api/tournaments/join → TournamentController@join

CODE FLOW SUMMARY:
1. Request hits TournamentController@join
2. TournamentJoinRequest validates player_id and tournament_id
3. TournamentService::joinTournament($player, $tournamentId) called
4. Entry::create() saves the record
5. $entry-&amp;gt;tournament-&amp;gt;prize_pool accessed — NO eager load

THE PROBLEMATIC LINE:
- File: app/Services/TournamentService.php
- Line: 87
- Code: $wallet-&amp;gt;credit($entry-&amp;gt;tournament-&amp;gt;prize_pool * 0.1);
- What it assumes: $entry-&amp;gt;tournament is always loaded
- What could make that assumption fail: Entry was just created via
  Entry::create() — Eloquent does not automatically load relationships
  on newly created models

ROOT SUSPICION:
$entry-&amp;gt;tournament is null because the relationship was never eager loaded
after Entry::create(). Call $entry-&amp;gt;load('tournament') before line 87.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key design decision here is that this agent never writes the fix. It identifies the problem and tells the orchestrator exactly where the fix needs to go. The orchestrator makes the change. This separation keeps each agent focused and makes the system easier to reason about.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Git Detective
&lt;/h2&gt;

&lt;p&gt;This agent investigates your git history. Under the hood it runs &lt;code&gt;git log&lt;/code&gt;, &lt;code&gt;git blame&lt;/code&gt;, &lt;code&gt;git show&lt;/code&gt;, and &lt;code&gt;git diff&lt;/code&gt; — but you never touch any of that directly. You pass it a file path and line number, and it answers the question that actually matters: &lt;em&gt;was this always broken, or did something change recently?&lt;/em&gt; That distinction matters for how you fix it and how urgently you act.&lt;/p&gt;

&lt;p&gt;Here's what it returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GIT FINDINGS
============
Affected File: app/Services/TournamentService.php
Last Changed: 2026-02-26
Commit Hash: a3f91c2
Commit Message: "feat: add referral credit on tournament join"

BLAME ON ERROR LINE:
- Line 87 last touched in commit a3f91c2
- Commit date: 2026-02-26
- What the change was: Added wallet credit logic using $entry-&amp;gt;tournament-&amp;gt;prize_pool.
  The relationship access was added in this commit. No eager load was added.

RELATED FILE CHANGES IN SAME COMMIT:
- Entry.php: Added `referral_bonus` column access — no relationship changes

ROOT SUSPICION:
Introduced in a3f91c2 two days ago. The referral credit feature added
$entry-&amp;gt;tournament-&amp;gt;prize_pool without loading the relationship first.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Phase 3: Synthesis
&lt;/h2&gt;

&lt;p&gt;Once all four agents return, the orchestrator cross-references their findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the Sentry stack trace point to the same line the codebase analyst flagged? ✓&lt;/li&gt;
&lt;li&gt;Does Telescope show a pattern that explains the error (N+1, slow query, missing data)? ✓&lt;/li&gt;
&lt;li&gt;Does git show a recent commit that introduced the problem? ✓&lt;/li&gt;
&lt;li&gt;What is the single most likely root cause?
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ROOT CAUSE DIAGNOSIS
====================
What happened: $entry-&amp;gt;tournament returned null on line 87 of TournamentService
Why it happened: Entry::create() does not auto-load relationships. The tournament
  relationship was accessed immediately after creation without being loaded.
What triggered it: Commit a3f91c2 (Feb 26) added prize_pool access without
  adding $entry-&amp;gt;load('tournament') or using Entry::create()-&amp;gt;load('tournament')
Confidence level: High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Phase 4: The Fix
&lt;/h2&gt;

&lt;p&gt;The orchestrator makes the minimal change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before (TournamentService.php line 87)&lt;/span&gt;
&lt;span class="nv"&gt;$wallet&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;credit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tournament&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;prize_pool&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// After&lt;/span&gt;
&lt;span class="nv"&gt;$entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'tournament'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$wallet&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;credit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;tournament&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;prize_pool&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And delivers the full output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INVESTIGATION COMPLETE
======================

ROOT CAUSE:
Entry::create() does not automatically load Eloquent relationships.
The referral credit feature added in a3f91c2 accesses $entry-&amp;gt;tournament
without loading it first, causing a null property access on 34 requests
across 12 users over the past 3 days.

EVIDENCE:
- Sentry: TypeError on line 87, 34 occurrences, 12 affected users
- Telescope: N+1 pattern detected, 26 repeated queries on the same request
- Code: No eager load before tournament relationship access after Entry::create()
- Git: Introduced in a3f91c2 (Feb 26) — "feat: add referral credit on tournament join"

CHANGE MADE:
- File: app/Services/TournamentService.php
- Method: joinTournament
- What changed: Added $entry-&amp;gt;load('tournament') before prize_pool access

REVIEW CHECKLIST:
- [x] Does the fix handle the null/edge case that caused the crash?
- [ ] Is there a test that should cover this?
- [ ] Does this fix need a migration or config change?
- [x] Is this safe to deploy without downtime?

HOW TO REVIEW:
Run: git diff
Then deploy via Forge when satisfied.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing is committed. Nothing is pushed. Nothing is deployed. The system hands the fix back to me for review — that's a hard rule in the orchestrator prompt. The agents investigate and suggest. I decide.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Changes
&lt;/h2&gt;

&lt;p&gt;The old workflow was serial: Sentry → code → database → git → Telescope → hypothesis → fix. Each step waited for the previous one. The mental overhead of holding all that context simultaneously was real.&lt;/p&gt;

&lt;p&gt;The new workflow is parallel. Four agents investigate simultaneously. The orchestrator synthesises. I get a diagnosis, a diff, and a checklist in under a minute.&lt;/p&gt;

&lt;p&gt;More importantly, the output is &lt;em&gt;reasoned&lt;/em&gt;, not just collected. The orchestrator isn't showing me raw data from four sources — it's cross-referencing them, identifying where they agree, flagging where they conflict, and forming a hypothesis I can evaluate. That's the difference between a tool that gathers information and a system that thinks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The next evolution is giving these agents access to the actual database records involved in a bug. Right now they understand the code and the git history and the Sentry error — but they don't know what the specific record looked like when it crashed.&lt;/p&gt;

&lt;p&gt;I'm building an MCP server for a project i maintain that will let agents query the database directly during an investigation — fetching the record, the transaction history, the match state. When an agent can see both the code that failed &lt;em&gt;and&lt;/em&gt; the exact data it was processing, the diagnosis gets significantly more precise.&lt;/p&gt;

&lt;p&gt;That's the next post.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Prompt Files
&lt;/h2&gt;

&lt;p&gt;Here's the folder structure for your Claude Code project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-laravel-app/
├── .claude/
│   ├── commands/
│   │   └── investigate.md       ← the command you run
│   └── agents/
│       ├── sentry-fetcher.md
│       ├── telescope-reader.md
│       ├── codebase-analyst.md
│       └── git-detective.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only &lt;code&gt;.env&lt;/code&gt; setup required is &lt;code&gt;SENTRY_AUTH_TOKEN&lt;/code&gt;, &lt;code&gt;SENTRY_ORG&lt;/code&gt;, and &lt;code&gt;SENTRY_PROJECT&lt;/code&gt; — which you likely already have if you're using Sentry.&lt;/p&gt;




&lt;h3&gt;
  
  
  📋 &lt;code&gt;.claude/commands/investigate.md&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Investigate Production Error&lt;/span&gt;

You are a senior Laravel developer and the orchestrator of a production error investigation.
Your job is to coordinate 4 specialist subagents, synthesize their findings,
and produce a single ready-to-review code change.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Input you will receive from the developer&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Error message and/or Sentry issue ID
&lt;span class="p"&gt;-&lt;/span&gt; Affected endpoint (e.g. POST /api/orders)
&lt;span class="p"&gt;-&lt;/span&gt; Controller@method if known (e.g. App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\O&lt;/span&gt;rderController@store)
&lt;span class="p"&gt;-&lt;/span&gt; Approximate time the error started

If any of these are missing, infer what you can from the Sentry findings before asking.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Phase 1 — Dispatch all 4 subagents IN PARALLEL&lt;/span&gt;

Spawn these 4 tasks simultaneously. Do not wait for one before starting the next.

&lt;span class="gu"&gt;### Task 1 → sentry-fetcher agent&lt;/span&gt;
Pass it:
&lt;span class="p"&gt;-&lt;/span&gt; The error message or issue ID
&lt;span class="p"&gt;-&lt;/span&gt; The endpoint
&lt;span class="p"&gt;-&lt;/span&gt; The time window

&lt;span class="gu"&gt;### Task 2 → telescope-reader agent&lt;/span&gt;
Pass it:
&lt;span class="p"&gt;-&lt;/span&gt; The affected endpoint
&lt;span class="p"&gt;-&lt;/span&gt; The time window
&lt;span class="p"&gt;-&lt;/span&gt; Telescope URL: read APP_URL from .env and append /telescope

&lt;span class="gu"&gt;### Task 3 → codebase-analyst agent&lt;/span&gt;
Pass it:
&lt;span class="p"&gt;-&lt;/span&gt; The endpoint
&lt;span class="p"&gt;-&lt;/span&gt; The controller@method from the stack trace
&lt;span class="p"&gt;-&lt;/span&gt; The specific file and line number (get this from Sentry findings if not provided upfront,
  but since tasks run in parallel, use what the developer gave you initially —
  you can re-run this agent after Sentry results if needed)

&lt;span class="gu"&gt;### Task 4 → git-detective agent&lt;/span&gt;
Pass it:
&lt;span class="p"&gt;-&lt;/span&gt; The file path from the stack trace
&lt;span class="p"&gt;-&lt;/span&gt; The line number
&lt;span class="p"&gt;-&lt;/span&gt; Any related files you suspect (controller, model, service)
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Phase 2 — Wait for all 4 agents to return&lt;/span&gt;

Once all findings are in, read each one carefully.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Phase 3 — Synthesize&lt;/span&gt;

Cross-reference the 4 findings:
&lt;span class="p"&gt;
1.&lt;/span&gt; Does the Sentry stack trace point to the same line the codebase analyst flagged?
&lt;span class="p"&gt;2.&lt;/span&gt; Does Telescope show a slow or missing query that explains the error?
&lt;span class="p"&gt;3.&lt;/span&gt; Does git show a recent commit that introduced the problem?
&lt;span class="p"&gt;4.&lt;/span&gt; What is the single most likely root cause?

Write a plain English diagnosis:

&lt;span class="gu"&gt;ROOT CAUSE DIAGNOSIS
====================
&lt;/span&gt;What happened:
Why it happened:
What triggered it (recent deploy? bad input? missing data?):
Confidence level: High / Medium / Low
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Phase 4 — Produce the fix&lt;/span&gt;

Now make the actual code change:
&lt;span class="p"&gt;
1.&lt;/span&gt; Open the file identified as the fix target
&lt;span class="p"&gt;2.&lt;/span&gt; Make the minimal change needed to fix the root cause
&lt;span class="p"&gt;3.&lt;/span&gt; Do not refactor unrelated code
&lt;span class="p"&gt;4.&lt;/span&gt; Do not change more than 1-3 files unless absolutely necessary

Common fix patterns to apply based on diagnosis:
&lt;span class="p"&gt;-&lt;/span&gt; Null access → add null check or use optional chaining (?-&amp;gt;) or add a findOrFail with proper error handling
&lt;span class="p"&gt;-&lt;/span&gt; Missing eager load → add with('relation') to the query
&lt;span class="p"&gt;-&lt;/span&gt; N+1 query → restructure query to eager load
&lt;span class="p"&gt;-&lt;/span&gt; Type mismatch → add cast in model or explicit cast at point of use
&lt;span class="p"&gt;-&lt;/span&gt; Missing validation → add rule to Form Request
&lt;span class="p"&gt;-&lt;/span&gt; Race condition / missing DB constraint → add database-level protection
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Phase 5 — Deliver your output&lt;/span&gt;

Present this to the developer:

&lt;span class="gu"&gt;INVESTIGATION COMPLETE
======================
&lt;/span&gt;
ROOT CAUSE:
(2-3 sentences, plain English)

EVIDENCE:
&lt;span class="p"&gt;-&lt;/span&gt; Sentry: (one key finding)
&lt;span class="p"&gt;-&lt;/span&gt; Telescope: (one key finding)
&lt;span class="p"&gt;-&lt;/span&gt; Code: (one key finding)
&lt;span class="p"&gt;-&lt;/span&gt; Git: (one key finding, or "no recent changes suspected")

CHANGE MADE:
&lt;span class="p"&gt;-&lt;/span&gt; File:
&lt;span class="p"&gt;-&lt;/span&gt; Method:
&lt;span class="p"&gt;-&lt;/span&gt; What changed: (plain English, not the diff)

REVIEW CHECKLIST:
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Does the fix handle the null/edge case that caused the crash?
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Is there a test that should cover this?
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Does this fix need a migration or config change?
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Is this safe to deploy without downtime?

HOW TO REVIEW:
Run: git diff
Then deploy via Forge when satisfied.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Important rules&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT commit anything
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT trigger a Forge deploy
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT push to GitHub
&lt;span class="p"&gt;-&lt;/span&gt; Make only the minimal fix — leave the rest for the developer to decide
&lt;span class="p"&gt;-&lt;/span&gt; If you are not confident in the fix (Low confidence), say so clearly and explain why
&lt;span class="p"&gt;-&lt;/span&gt; If the bug requires a migration, describe what migration is needed but do not run it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔍 &lt;code&gt;.claude/agents/sentry-fetcher.md&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Sentry Fetcher Agent&lt;/span&gt;

You are a specialist agent that fetches and interprets error data from the Sentry API.
You do one thing: retrieve Sentry issue details and return structured findings.
You do not read code. You do not check git. You do not touch the database.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Authentication&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Read SENTRY_AUTH_TOKEN from the project .env file
&lt;span class="p"&gt;-&lt;/span&gt; Base URL: https://sentry.io/api/0/
&lt;span class="p"&gt;-&lt;/span&gt; Set header: Authorization: Bearer &lt;span class="nt"&gt;&amp;lt;SENTRY_AUTH_TOKEN&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## You will receive (from the parent agent)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; An error message or Sentry issue ID
&lt;span class="p"&gt;-&lt;/span&gt; The affected endpoint (e.g. POST /api/orders)
&lt;span class="p"&gt;-&lt;/span&gt; A time window (e.g. "started spiking at 14:30 UTC")
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must do&lt;/span&gt;

&lt;span class="gu"&gt;### If given an issue ID directly:&lt;/span&gt;
GET https://sentry.io/api/0/organizations/&lt;span class="nt"&gt;&amp;lt;org-slug&amp;gt;&lt;/span&gt;/issues/&lt;span class="nt"&gt;&amp;lt;issue-id&amp;gt;&lt;/span&gt;/

&lt;span class="gu"&gt;### If given only an error message and endpoint:&lt;/span&gt;
Search for the issue:
GET https://sentry.io/api/0/projects/&lt;span class="nt"&gt;&amp;lt;org-slug&amp;gt;&lt;/span&gt;/&lt;span class="nt"&gt;&amp;lt;project-slug&amp;gt;&lt;/span&gt;/issues/?query=&lt;span class="nt"&gt;&amp;lt;error&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&amp;amp;limit=5

Then fetch the most recent matching issue in full.

&lt;span class="gu"&gt;### Always fetch the latest event for that issue:&lt;/span&gt;
GET https://sentry.io/api/0/organizations/&lt;span class="nt"&gt;&amp;lt;org-slug&amp;gt;&lt;/span&gt;/issues/&lt;span class="nt"&gt;&amp;lt;issue-id&amp;gt;&lt;/span&gt;/events/latest/
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must return (structured)&lt;/span&gt;

&lt;span class="gu"&gt;SENTRY FINDINGS
===============
&lt;/span&gt;Issue ID:
Title:
Culprit (file + method):
First Seen:
Last Seen:
Total Occurrences:
Affected Users:

STACK TRACE (most relevant frames only):
&lt;span class="p"&gt;-&lt;/span&gt; File:
&lt;span class="p"&gt;-&lt;/span&gt; Line:
&lt;span class="p"&gt;-&lt;/span&gt; Method:
&lt;span class="p"&gt;-&lt;/span&gt; Code snippet around the line:

BREADCRUMBS (last 5 before crash):
&lt;span class="p"&gt;1.&lt;/span&gt;
&lt;span class="p"&gt;2.&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt;
&lt;span class="p"&gt;4.&lt;/span&gt;
&lt;span class="p"&gt;5.&lt;/span&gt;

REQUEST CONTEXT:
&lt;span class="p"&gt;-&lt;/span&gt; Method + URL:
&lt;span class="p"&gt;-&lt;/span&gt; User ID (if present):
&lt;span class="p"&gt;-&lt;/span&gt; Any request params logged:

ROOT SUSPICION:
One sentence stating what you think went wrong based purely on Sentry data.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Important notes&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; If the API returns a 401, tell the parent agent that SENTRY_AUTH_TOKEN may be missing or expired
&lt;span class="p"&gt;-&lt;/span&gt; If no matching issue is found, say so clearly — do not guess
&lt;span class="p"&gt;-&lt;/span&gt; Replace &lt;span class="nt"&gt;&amp;lt;org-slug&amp;gt;&lt;/span&gt; and &lt;span class="nt"&gt;&amp;lt;project-slug&amp;gt;&lt;/span&gt; with values found in .env as SENTRY_ORG and SENTRY_PROJECT
  if present, otherwise ask the parent agent to provide them
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔭 &lt;code&gt;.claude/agents/telescope-reader.md&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Telescope Reader Agent&lt;/span&gt;

You are a specialist agent that reads Laravel Telescope data to find what happened
during a specific request. You do not read code files. You do not touch Sentry.
You only query Telescope and return findings.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you will receive (from the parent agent)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; The affected endpoint URL (e.g. POST /api/orders)
&lt;span class="p"&gt;-&lt;/span&gt; A time window (e.g. "around 14:30 UTC")
&lt;span class="p"&gt;-&lt;/span&gt; The Telescope base URL (e.g. https://yourdomain.com/telescope)
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## How Telescope's API works&lt;/span&gt;

Telescope exposes an internal JSON API. Use these endpoints:

&lt;span class="gu"&gt;### Fetch recent requests matching the endpoint:&lt;/span&gt;
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/requests?tag=&lt;span class="nt"&gt;&amp;lt;endpoint-path&amp;gt;&lt;/span&gt;

If that returns nothing, try:
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/requests

Then filter results manually by URI matching the affected endpoint and timestamp
close to the time window.

&lt;span class="gu"&gt;### Once you have a request entry ID, fetch its full detail:&lt;/span&gt;
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/requests/&lt;span class="nt"&gt;&amp;lt;entry-id&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### Fetch exceptions around that time:&lt;/span&gt;
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/exceptions

&lt;span class="gu"&gt;### Fetch queries that ran during that request:&lt;/span&gt;
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/queries?tag=&lt;span class="nt"&gt;&amp;lt;entry-id&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### Fetch logs:&lt;/span&gt;
GET &lt;span class="nt"&gt;&amp;lt;telescope-base-url&amp;gt;&lt;/span&gt;/telescope-api/logs?tag=&lt;span class="nt"&gt;&amp;lt;entry-id&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must return (structured)&lt;/span&gt;

&lt;span class="gu"&gt;TELESCOPE FINDINGS
==================
&lt;/span&gt;Matched Request Entry ID:
Endpoint:
Timestamp:
Response Status:
Response Time (ms):
Memory Usage:

QUERIES EXECUTED:
&lt;span class="p"&gt;1.&lt;/span&gt; SQL:
   Duration:
   Bindings:
(list all, flag any over 500ms as SLOW)

SLOWEST QUERY:
&lt;span class="p"&gt;-&lt;/span&gt; SQL:
&lt;span class="p"&gt;-&lt;/span&gt; Duration:
&lt;span class="p"&gt;-&lt;/span&gt; Called from:

EXCEPTIONS LOGGED:
&lt;span class="p"&gt;-&lt;/span&gt; Class:
&lt;span class="p"&gt;-&lt;/span&gt; Message:
&lt;span class="p"&gt;-&lt;/span&gt; File + Line:

LOGS WRITTEN:
&lt;span class="p"&gt;-&lt;/span&gt; (any Log::info, Log::warning, Log::error entries)

N+1 WARNING:
&lt;span class="p"&gt;-&lt;/span&gt; Did the same query repeat more than 3 times with different bindings? Yes/No
&lt;span class="p"&gt;-&lt;/span&gt; If yes, show the repeating query and how many times it ran

ROOT SUSPICION:
One sentence stating what you think went wrong based purely on Telescope data.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Important notes&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Telescope may require authentication. If you get a 401 or redirect to login,
  tell the parent agent that Telescope may not be publicly accessible and suggest
  checking the TELESCOPE_AUTH config or providing a session token
&lt;span class="p"&gt;-&lt;/span&gt; If Telescope is disabled in production (common), say so clearly and return empty findings
&lt;span class="p"&gt;-&lt;/span&gt; Do not invent data. If a section has no data, write "none found"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🧠 &lt;code&gt;.claude/agents/codebase-analyst.md&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Codebase Analyst Agent&lt;/span&gt;

You are a specialist agent that reads and understands Laravel backend code.
You trace the full code path for a given endpoint and identify likely causes of an error.
You do not call any APIs. You do not run git commands. You only read files.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you will receive (from the parent agent)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; The affected endpoint (e.g. POST /api/orders)
&lt;span class="p"&gt;-&lt;/span&gt; The controller and method from the stack trace
&lt;span class="p"&gt;-&lt;/span&gt; The specific file and line number where the error occurred
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must do&lt;/span&gt;

&lt;span class="gu"&gt;### Step 1 — Find the route&lt;/span&gt;
Read routes/api.php (and routes/web.php if needed).
Find the route that matches the affected endpoint.
Confirm the controller and method it maps to.

&lt;span class="gu"&gt;### Step 2 — Read the controller method&lt;/span&gt;
Read the full controller file.
Focus on the specific method involved.
Note: what parameters it expects, what it calls, what it returns.

&lt;span class="gu"&gt;### Step 3 — Trace dependencies&lt;/span&gt;
For every Service class, Repository, or helper the method calls, read those files too.
For every Model it touches, read the model file — relationships, casts, accessors, mutators.
For any Form Request (if used for validation), read that file.

&lt;span class="gu"&gt;### Step 4 — Read the migration&lt;/span&gt;
Find the migration file for the main table involved.
Check: column types, nullable vs required, foreign keys.

&lt;span class="gu"&gt;### Step 5 — Focus on the error line&lt;/span&gt;
Go directly to the file and line number from the stack trace.
Read 20 lines above and below for full context.
Ask yourself: what assumption does this code make that could be wrong?
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must return (structured)&lt;/span&gt;

&lt;span class="gu"&gt;CODEBASE FINDINGS
=================
&lt;/span&gt;Route confirmed:
Controller:
Method:

CODE FLOW SUMMARY:
(describe in plain English what happens from request received to response sent)

THE PROBLEMATIC LINE:
&lt;span class="p"&gt;-&lt;/span&gt; File:
&lt;span class="p"&gt;-&lt;/span&gt; Line number:
&lt;span class="p"&gt;-&lt;/span&gt; Code:
&lt;span class="p"&gt;-&lt;/span&gt; What it assumes:
&lt;span class="p"&gt;-&lt;/span&gt; What could make that assumption fail:

RELATED FILES READ:
&lt;span class="p"&gt;-&lt;/span&gt; (list every file you read)

MODELS INVOLVED:
&lt;span class="p"&gt;-&lt;/span&gt; Model name:
&lt;span class="p"&gt;-&lt;/span&gt; Relevant columns and their nullable status:
&lt;span class="p"&gt;-&lt;/span&gt; Relationships used in this flow:

ROOT SUSPICION:
One sentence stating what you think is the root cause based purely on the code.

SUGGESTED FIX AREA:
Tell the parent agent exactly which file and method needs to change.
Do not write the fix yourself — that is the parent agent's job.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🕵️ &lt;code&gt;.claude/agents/git-detective.md&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Git Detective Agent&lt;/span&gt;

You are a specialist agent that investigates git history to determine
whether a recent code change introduced a bug.
You only run git commands. You do not read business logic deeply.
You do not call any APIs.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you will receive (from the parent agent)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; The file path where the error occurred
&lt;span class="p"&gt;-&lt;/span&gt; The specific line number from the stack trace
&lt;span class="p"&gt;-&lt;/span&gt; Any other files identified as relevant by the codebase analyst
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must do&lt;/span&gt;

Run these commands from the Laravel project root:
&lt;span class="p"&gt;
1.&lt;/span&gt; git log --oneline -20 -- &lt;span class="nt"&gt;&amp;lt;file-path&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;2.&lt;/span&gt; git blame -L &lt;span class="nt"&gt;&amp;lt;line-10&amp;gt;&lt;/span&gt;,&lt;span class="nt"&gt;&amp;lt;line&lt;/span&gt;&lt;span class="err"&gt;+10&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;file-path&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt; git show &lt;span class="nt"&gt;&amp;lt;commit-hash&amp;gt;&lt;/span&gt; (the commit that last touched the error line)
&lt;span class="p"&gt;4.&lt;/span&gt; git log --oneline -10 -- &lt;span class="nt"&gt;&amp;lt;other-relevant-files&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;5.&lt;/span&gt; git status &amp;amp;&amp;amp; git diff
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## What you must return (structured)&lt;/span&gt;

&lt;span class="gu"&gt;GIT FINDINGS
============
&lt;/span&gt;Affected File:
Last Changed:
Last Changed By:
Commit Hash:
Commit Message:

BLAME ON ERROR LINE:
&lt;span class="p"&gt;-&lt;/span&gt; Line number:
&lt;span class="p"&gt;-&lt;/span&gt; Last touched in commit:
&lt;span class="p"&gt;-&lt;/span&gt; Commit date:
&lt;span class="p"&gt;-&lt;/span&gt; Commit message:
&lt;span class="p"&gt;-&lt;/span&gt; What the change was:

FULL DIFF SUMMARY OF THAT COMMIT:
(plain English — what changed, not the raw diff)

RELATED FILE CHANGES IN SAME COMMIT:
&lt;span class="p"&gt;-&lt;/span&gt; (list any other files changed and briefly what changed)

RECENT COMMITS ON RELATED FILES (last 7 days):
&lt;span class="p"&gt;-&lt;/span&gt; File:
&lt;span class="p"&gt;-&lt;/span&gt; Commit:
&lt;span class="p"&gt;-&lt;/span&gt; Message:
&lt;span class="p"&gt;-&lt;/span&gt; Potentially relevant because:

UNCOMMITTED CHANGES:
&lt;span class="p"&gt;-&lt;/span&gt; Any staged or unstaged changes relevant to this error? Yes/No

ROOT SUSPICION:
One sentence: was this likely introduced by a recent change? Which commit?
If nothing looks suspicious, say that clearly.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## Important notes&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Do not modify any files — read only
&lt;span class="p"&gt;-&lt;/span&gt; If the commit history is very old for the affected line, note that the bug
  may be pre-existing rather than a recent regression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Questions or feedback — drop them in the comments.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
