38 lines
2.0 KiB
Markdown
38 lines
2.0 KiB
Markdown
|
|
# Story 2.3 Code Review — Deferred Findings
|
||
|
|
|
||
|
|
**Review date:** 2026-03-22
|
||
|
|
**Story:** 2.3 — Worker-Scoped Dashboard
|
||
|
|
**Reviewer:** BMAD adversarial code review (3-layer)
|
||
|
|
|
||
|
|
These items are pre-existing issues surfaced during the Story 2.3 code review. They are not caused by 2.3 changes but should be addressed in future work.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## D-1 — Nudge/Reassign dropdown items unconditionally disabled
|
||
|
|
|
||
|
|
**Severity:** Medium
|
||
|
|
**Location:** `resources/js/pages/Dashboard.vue` — DropdownMenu items "Relancer" and "Réassigner"
|
||
|
|
**Affects:** Epic 3, Story 3-2 (One-Click Nudge System)
|
||
|
|
|
||
|
|
The dropdown actions are hardcoded as `disabled` for all roles. The spec implies they should be enabled for Owners/Managers once the nudge system is built. When implementing Story 3-2, enable these actions for Owner/Manager roles and keep them disabled (or hidden) for Workers.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## D-2 — StatCard `assignee` param not consumed by declarations index
|
||
|
|
|
||
|
|
**Severity:** Low (intentional)
|
||
|
|
**Location:** `app/Http/Controllers/DashboardController.php` — `$assigneeParam`
|
||
|
|
**Affects:** Epic 4, Story 4-1 (FilterBar Component)
|
||
|
|
|
||
|
|
The `assignee={user.id}` URL parameter is included in StatCard hrefs but the declarations list page does not yet filter by it. This is by design — the param exists for forward compatibility. When implementing Story 4-1/4-2 (FilterBar), ensure the `assignee` query param is recognized and applied as a default filter.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## D-3 — Cache not invalidated on role change
|
||
|
|
|
||
|
|
**Severity:** Low
|
||
|
|
**Location:** `app/Http/Controllers/DashboardController.php` — `Cache::remember()` with key `dashboard:{workspace_id}:{user_id}`
|
||
|
|
**Affects:** Cross-cutting (cache architecture)
|
||
|
|
|
||
|
|
If a user's role changes (e.g., worker promoted to manager), the cached dashboard data remains scoped to the old role for up to 5 minutes (TTL). Current risk is low given the short TTL. If role management gets a dedicated story or if TTL is increased, add cache invalidation on role change events (e.g., listen for `WorkspaceUser` updated event and `Cache::forget()` the affected key).
|