arch/mcp-auth: устранить дрейф между enforceBasicLoginGate и AuthController.login (общий pre-token гейт или coupling-тест) #91
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено в multi-aspect code review (грань: architecture, forward-looking, не блокирует мерж).
Область: apps/server/src/integrations/mcp (enforceBasicLoginGate, mcp.service.ts:230-277) vs apps/server/src/core/auth (AuthController.login)
Наблюдение
enforceBasicLoginGate переповторяет точную pre-token последовательность AuthController.login (validateSsoEnforcement → lazy require EE mfa.service → checkMfaRequirements). Два независимых места обязаны оставаться семантически идентичными.
Значимость
Forward-looking, не баг сегодня (гейты сверены и идентичны по смыслу). Но это самый высоколевереджный риск дрейфа: режим отказа — тихая регрессия security-гейта (повторное открытие SSO/MFA-байпаса).
Опции
enforcePreTokenGate(workspace, creds, moduleRef)(или метод AuthService), вызываемый из ОБОИХ login и enforceBasicLoginGate; каждый оставляет своё пост-гейт поведение (cookie vs throw-401). Pros: один источник истины. Cons: рефактор core/auth в большом security-чувствительном дифе.Рекомендация
На усмотрение автора. Учитывая большой security-чувствительный диф — Option 2 (coupling-тест) как прагматичный минимум; Option 1 — правильная конечная форма.
Связанные: #70