Summary
Auth guards are applied inconsistently across server actions — three different patterns coexist.
Source
Semantic Review SR-007 (2026-02-18), verified 2026-02-25
Current State (verified)
| File |
Pattern |
Issues |
board.ts |
withAuth (4), withAuthRateLimit (3), withAuthResultRateLimit (6) |
3 different wrappers mixed |
repo-cards.ts |
Inline createClient() + getUser() |
No wrapper at all |
user-presets.ts |
Inline createClient() + getUser() |
No wrapper at all |
user-settings.ts |
withAuthResultRateLimit only |
✅ Consistent |
maintenance-project-info.ts |
withAuthResultRateLimit (1 action) |
Partially consistent |
Auth wrapper variants in auth-guard.ts:
withAuth — returns raw T (no ActionResult pattern)
withAuthRateLimit — returns raw T + rate limiting
withAuthResultRateLimit — returns ActionResult + rate limiting ← target pattern
Acceptance Criteria
Priority
🔴 High — Security pattern consistency
Notes
Resolving this issue will also partially address #149 (ActionResult standardization) and #156 (rate limiting coverage).
Summary
Auth guards are applied inconsistently across server actions — three different patterns coexist.
Source
Semantic Review SR-007 (2026-02-18), verified 2026-02-25
Current State (verified)
board.tswithAuth(4),withAuthRateLimit(3),withAuthResultRateLimit(6)repo-cards.tscreateClient()+getUser()user-presets.tscreateClient()+getUser()user-settings.tswithAuthResultRateLimitonlymaintenance-project-info.tswithAuthResultRateLimit(1 action)Auth wrapper variants in
auth-guard.ts:withAuth— returns raw T (no ActionResult pattern)withAuthRateLimit— returns raw T + rate limitingwithAuthResultRateLimit— returns ActionResult + rate limiting ← target patternAcceptance Criteria
withAuthResultRateLimitwrapperwithAuthResult(or equivalent) wrappercreateClient()+getUser()auth checks remain in action fileswithAuthandwithAuthRateLimitremoved fromauth-guard.ts(dead code after migration)Priority
🔴 High — Security pattern consistency
Notes
Resolving this issue will also partially address #149 (ActionResult standardization) and #156 (rate limiting coverage).