arch/html-embed: вынести повторяющийся admin-gate strip (7 call-site) в один тестируемый хелпер #90
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, не блокирует мерж).
Область: Серверный admin-gate htmlEmbed: collaboration.handler.ts, persistence.extension.ts, page.service.ts ×2, share.service.ts, import.service.ts, file-import-task.service.ts, transclusion.service.ts
Наблюдение
Security-критичная фича обеспечивается одним четырёхшаговым ритуалом (резолв роли актора →
isHtmlEmbedFeatureEnabled((await workspaceRepo.findById(workspaceId))?.settings)→htmlEmbedAllowedAND →stripHtmlEmbedNodes), реплицированным по 7 call-site. Тесты пинят это хрупкими regex по тексту исходника.Значимость
Forward-looking, не блокирует мерж: все 7 путей применяют гейт корректно. Риск — регрессия-по-упущению при добавлении нового write-пути.
Опции
stripHtmlEmbedIfNotAllowed(json, {featureEnabled, role, onStrip?})(has-check + AND + strip + опц. лог-callback); каждый call-site сохраняет собственный резолв настроек/роли. Pros: убирает самый ошибкоопасный повтор, заменяет хрупкие regex реальной юнит-тестируемой функцией. Cons: call-site всё ещё дублируют резолв роли/настроек.Рекомендация
Option 1 — соразмерно изменению; заменяет хрупкий source-pin реальной функцией, не загоняя различия резолва роли в общий код.
Связанные: #27