From 0b8d7b13ed2d39986a938e99db75492af3ed7778 Mon Sep 17 00:00:00 2001 From: Snider Date: Mon, 16 Mar 2026 06:16:29 +0000 Subject: [PATCH] fix(issues): use workspace_id from middleware, not workspace object AgentApiAuth middleware sets workspace_id attribute, not workspace. Controllers were trying to read ->id on null. Co-Authored-By: Virgil --- src/php/Controllers/Api/IssueController.php | 28 ++++++++++---------- src/php/Controllers/Api/SprintController.php | 20 +++++++------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/php/Controllers/Api/IssueController.php b/src/php/Controllers/Api/IssueController.php index 2d3819e..5e66ab0 100644 --- a/src/php/Controllers/Api/IssueController.php +++ b/src/php/Controllers/Api/IssueController.php @@ -30,11 +30,11 @@ class IssueController extends Controller 'include_closed' => 'nullable|boolean', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { $issues = ListIssues::run( - $workspace->id, + $workspaceId, $validated['status'] ?? null, $validated['type'] ?? null, $validated['priority'] ?? null, @@ -70,10 +70,10 @@ class IssueController extends Controller */ public function show(Request $request, string $slug): JsonResponse { - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $issue = GetIssue::run($slug, $workspace->id); + $issue = GetIssue::run($slug, $workspaceId); return response()->json([ 'data' => $issue->toMcpContext(), @@ -105,10 +105,10 @@ class IssueController extends Controller 'metadata' => 'nullable|array', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $issue = CreateIssue::run($validated, $workspace->id); + $issue = CreateIssue::run($validated, $workspaceId); return response()->json([ 'data' => [ @@ -144,10 +144,10 @@ class IssueController extends Controller 'labels.*' => 'string', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $issue = UpdateIssue::run($slug, $validated, $workspace->id); + $issue = UpdateIssue::run($slug, $validated, $workspaceId); return response()->json([ 'data' => [ @@ -174,10 +174,10 @@ class IssueController extends Controller 'reason' => 'nullable|string|max:500', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $issue = ArchiveIssue::run($slug, $workspace->id, $request->input('reason')); + $issue = ArchiveIssue::run($slug, $workspaceId, $request->input('reason')); return response()->json([ 'data' => [ @@ -199,10 +199,10 @@ class IssueController extends Controller */ public function comments(Request $request, string $slug): JsonResponse { - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $issue = GetIssue::run($slug, $workspace->id); + $issue = GetIssue::run($slug, $workspaceId); $comments = $issue->comments; return response()->json([ @@ -228,12 +228,12 @@ class IssueController extends Controller 'metadata' => 'nullable|array', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { $comment = AddIssueComment::run( $slug, - $workspace->id, + $workspaceId, $validated['author'], $validated['body'], $validated['metadata'] ?? null, diff --git a/src/php/Controllers/Api/SprintController.php b/src/php/Controllers/Api/SprintController.php index a78afc0..6b2f3f4 100644 --- a/src/php/Controllers/Api/SprintController.php +++ b/src/php/Controllers/Api/SprintController.php @@ -25,11 +25,11 @@ class SprintController extends Controller 'include_cancelled' => 'nullable|boolean', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { $sprints = ListSprints::run( - $workspace->id, + $workspaceId, $validated['status'] ?? null, (bool) ($validated['include_cancelled'] ?? false), ); @@ -59,10 +59,10 @@ class SprintController extends Controller */ public function show(Request $request, string $slug): JsonResponse { - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $sprint = GetSprint::run($slug, $workspace->id); + $sprint = GetSprint::run($slug, $workspaceId); return response()->json([ 'data' => $sprint->toMcpContext(), @@ -88,10 +88,10 @@ class SprintController extends Controller 'metadata' => 'nullable|array', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $sprint = CreateSprint::run($validated, $workspace->id); + $sprint = CreateSprint::run($validated, $workspaceId); return response()->json([ 'data' => [ @@ -120,10 +120,10 @@ class SprintController extends Controller 'goal' => 'nullable|string|max:10000', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $sprint = UpdateSprint::run($slug, $validated, $workspace->id); + $sprint = UpdateSprint::run($slug, $validated, $workspaceId); return response()->json([ 'data' => [ @@ -149,10 +149,10 @@ class SprintController extends Controller 'reason' => 'nullable|string|max:500', ]); - $workspace = $request->attributes->get('workspace'); + $workspaceId = $request->attributes->get('workspace_id'); try { - $sprint = ArchiveSprint::run($slug, $workspace->id, $request->input('reason')); + $sprint = ArchiveSprint::run($slug, $workspaceId, $request->input('reason')); return response()->json([ 'data' => [