Repository navigation
fix(platform): redactSecrets fail-closed y correos tras '@' o ruta (sin tag) - #17
Merged
Merged
Conversation
Los errores de SMTP/nodemailer traen el destinatario en message/stack. redactSecrets ahora convierte ana@cliente.com en [correo]@cliente.com (conserva el dominio). Regex con lookbehind y cotas por parte: coste lineal, idempotente. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…y parámetros por sufijo - Correos: cualquier algo@algo delimitado (Unicode, locales largos, IDN, localhost, IP) se enmascara; el dominio se conserva solo si es ASCII normal. - Query entera de http(s)://…?… enmascarada (?[redacted]); el path se conserva. - Parámetros nombre=valor por SUFIJO (token|key|secret|signature|sig|password|passwd|pass|auth| credential|session), dentro y fuera de URLs. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…utas se limita a paquetes con scope - La racha puede contener varias '@': la última separa el dominio y lo anterior (hasta la última '/') es parte local (@alice@x.com, a@b@alice@x.com, to=@ana@x.com). - Solo se omiten rutas npm con scope (@scope/pkg: '@' al inicio o tras '/', etiqueta sin punto, seguida de /nombre); https://host/ana@x.com y /ana@x.com/x se enmascaran, y tras un scope se sigue enmascarando el resto (/@scope/pkg/x@x.com). - Recorrido iterativo de derecha a izquierda: coste lineal. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…parece claramente una ruta a/b@x.com o ana/perez@x.com dejaban 'a/' visible. Ahora lo que precede al correo solo se conserva si la racha empieza por '/', './', '../', '~/', 'esquema://' o contiene 'node_modules/'; en cualquier otro caso toda la racha hasta la última '@' es parte local. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Por qué
La auditoría de cableado de errores (35 repos, 28-oct-2026) encontró fallos que no llegan a
platform_logs, por lo que el Nightly Error Fixer y el correo diario no los ven.Alcance
Solo observabilidad. No cambia lógica de negocio ni respuestas. Sin literales de tenant. Los errores se registran saneados (sin secretos ni correos).
Qué cambia
serializeErr/redactSecretsenmascaran correos (parte local), query de URLs y pares nombre=valor sensibles, en tiempo lineal.dist/reconstruido y reproducible.Verificación
15 archivos / 159 tests, type-check OK,
git diffde dist vacío tras rebuild.Límites
Local con
/deja el prefijo visible; falsos positivospkg@1.2.3; solo message/stack/String(err). No crear tagplatform-v0.7.0hasta revisar.🤖 Generated with Claude Code
https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG