chore(lint): migra los tres guards de boundaries a la sintaxis v7 - #653
Merged
Merged
Conversation
eslint-plugin-boundaries 7.2.0 (PR #439) deprecó `mode` en los descriptores de elemento, y las tres configs lo usaban en TODOS sus descriptores. No era un warning cosmético: sus propios comentarios ya advertían de que sin ese modo las reglas quedan en no-op SILENCIOSO. Cuando un mayor futuro elimine `mode`, los guards habrían pasado a aprobarlo todo saliendo con exit 0. - `mode: 'file'` + `pattern: 'src/<capa>/**/*'` → `pattern: 'src/<capa>'`. En v7 los descriptores de elemento son SIEMPRE de carpeta, así que el patrón apunta a la carpeta de la capa en vez de globear dentro de ella. - `rules:` → `policies:` - selectores planos `{ type: X }` → selectores de entidad `{ element: { type: X } }`, tanto en `from` como en `allow.to`. - `dependency: { kind: 'type' }` se CONSERVA: no está deprecado (lo están el `importKind` a nivel de regla y `dependency.module`), así que la excepción de imports type-only sigue igual. Trampa que trae el cambio de modelo: con elementos de carpeta cada import intra-capa pasa a ser "interno", y los internos NO se comprueban por defecto. Con los elementos de fichero de v6 cada fichero era su propio elemento, así que `common → common` sí se comprobaba — y core-domain lo prohíbe a propósito (`allow: { to: { type: [] } }`). La migración ingenua desactivaba esa regla en silencio; `checkInternals: true` en las tres configs restaura la semántica v6. Verificación (la config falla ABIERTA, así que no vale leerla): - matriz de equivalencia que inyecta una violación para CADA par ordenado de capas, con destino directo en la carpeta y anidado, en forma valor y `import type`, ejecutando la config vieja y la nueva en paralelo: core-domain 300 canarios (100 vs 100), mcp-server 50 (13 vs 13), core-api 32 (7 vs 7) → 0 divergencias. Esa matriz es la que cazó la regresión de `common → common`; el juego corto de 6 canarios pasaba sin verla. - los 6 canarios de referencia: 3 imports de valor salen con exit 1 y mensaje idéntico al de antes, 3 type-only salen con exit 0. - los tres `npm run lint:boundaries` salen 0 y sin una sola línea `[boundaries][warning]`. Queda fuera, por ser preexistente y para no mezclarlo con una migración que preserva comportamiento: mcp-server declara los tipos `application` y `core` para carpetas que no existen, mientras `src/common`, `src/utils` y `src/test-doubles` no tienen descriptor y quedan sin gobernar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: aarroyo <beyondnet.peru@gmail.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Contributor
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
✅ Good: All EN changes have ES counterparts. Generated by GitHub Actions |
This was referenced Aug 23, 2026
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.
Pull Request Summary
eslint-plugin-boundariessubió de 6.0.2 a 7.2.0 en #439. La aplicación de reglas seguía funcionando, pero v7 emitía dos deprecaciones en cada corrida delint:boundaries, y una de ellas no era cosmética: las tres configs usabanmode: 'file'en todos sus descriptores de elemento, y sus propios comentarios ya advertían de que sin ese modo las reglas quedan en no-op silencioso. Cuando un mayor futuro eliminemode, los guards habrían pasado a aprobarlo todo saliendo con exit 0.Migración (los tres ficheros, sin cambio de comportamiento):
mode: 'file'+pattern: 'src/<capa>/**/*'→pattern: 'src/<capa>'. En v7 los descriptores de elemento son siempre de carpeta (@boundaries/elements/dist/index.d.ts:1811), así que el patrón apunta a la carpeta de la capa en vez de globear dentro de ella. Verificado conboundaries/no-unknown-files: los patrones de carpeta clasifican el mismo conjunto de ficheros que el viejomode: 'file'.rules:→policies:{ type: X }→ selectores de entidad{ element: { type: X } }, enfromy enallow.to.dependency: { kind: 'type' }se conserva: no está deprecado (lo están elimportKinda nivel de regla ydependency.module), así que la excepción de imports type-only sigue igual.La trampa que trae el cambio de modelo
Con elementos de carpeta cada import intra-capa pasa a ser interno, y los internos no se comprueban por defecto (
checkInternalsesfalse). Con los elementos de fichero de v6 cada fichero era su propio elemento, así quecommon → commonsí se comprobaba — y core-domain lo prohíbe a propósito (allow: { to: { type: [] } }, "common: no internal imports"). La migración ingenua desactivaba esa regla en silencio.checkInternals: trueen las tres configs restaura la semántica de v6.Verificación
La config falla abierta, así que leerla no es evidencia. Monté una matriz de equivalencia que inyecta una violación para cada par ordenado de capas, con destino directo en la carpeta y anidado, en forma valor y
import type, ejecutando la config vieja y la nueva en paralelo:Esa matriz es la que cazó la regresión de
common → common; el juego corto de 6 canarios pasaba sin verla.Además: los 6 canarios de referencia se comportan igual que antes — 3 imports de valor salen con exit 1 y mensaje byte a byte idéntico, 3 type-only salen con exit 0. Y los tres
npm run lint:boundariessalen 0 sin una sola línea[boundaries][warning].Los canarios y las configs de sondeo se borraron; el árbol solo lleva los tres ficheros de config.
Fuera de alcance (preexistente)
mcp-serverdeclara los tipos de elementoapplicationycorepara carpetas que no existen, mientrassrc/common,src/utilsysrc/test-doublesno tienen descriptor y quedan sin gobernar. Se comportaba idéntico antes de esta migración, así que lo dejé intacto para no mezclarlo con un cambio que preserva comportamiento.Before you submit
Signed-off-byline.Linked ADRs / Issues
eslint-plugin-boundariesa 7.x)🤖 Generated with Claude Code