@eduardbar/drift 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/.gga +50 -0
  2. package/.github/actions/drift-review/README.md +60 -0
  3. package/.github/actions/drift-review/action.yml +131 -0
  4. package/.github/actions/drift-scan/README.md +28 -32
  5. package/.github/actions/drift-scan/action.yml +78 -14
  6. package/.github/workflows/review-pr.yml +34 -41
  7. package/AGENTS.md +75 -251
  8. package/CHANGELOG.md +28 -0
  9. package/README.md +148 -41
  10. package/dist/benchmark.d.ts +1 -1
  11. package/dist/benchmark.js +71 -52
  12. package/dist/cli.js +243 -8
  13. package/dist/config.js +16 -2
  14. package/dist/diff.js +42 -50
  15. package/dist/doctor.d.ts +5 -0
  16. package/dist/doctor.js +133 -0
  17. package/dist/format.d.ts +17 -0
  18. package/dist/format.js +45 -0
  19. package/dist/guard-types.d.ts +57 -0
  20. package/dist/guard-types.js +2 -0
  21. package/dist/guard.d.ts +14 -0
  22. package/dist/guard.js +239 -0
  23. package/dist/index.d.ts +10 -3
  24. package/dist/index.js +4 -1
  25. package/dist/init.d.ts +15 -0
  26. package/dist/init.js +273 -0
  27. package/dist/map-cycles.d.ts +2 -0
  28. package/dist/map-cycles.js +34 -0
  29. package/dist/map-svg.d.ts +19 -0
  30. package/dist/map-svg.js +97 -0
  31. package/dist/map.js +78 -138
  32. package/dist/metrics.js +70 -55
  33. package/dist/output-metadata.d.ts +13 -0
  34. package/dist/output-metadata.js +17 -0
  35. package/dist/plugins-capabilities.d.ts +4 -0
  36. package/dist/plugins-capabilities.js +21 -0
  37. package/dist/plugins-messages.d.ts +10 -0
  38. package/dist/plugins-messages.js +16 -0
  39. package/dist/plugins-rules.d.ts +9 -0
  40. package/dist/plugins-rules.js +137 -0
  41. package/dist/plugins.d.ts +1 -1
  42. package/dist/plugins.js +45 -142
  43. package/dist/reporter-constants.d.ts +16 -0
  44. package/dist/reporter-constants.js +39 -0
  45. package/dist/reporter.d.ts +3 -3
  46. package/dist/reporter.js +35 -55
  47. package/dist/review.d.ts +2 -1
  48. package/dist/review.js +2 -1
  49. package/dist/rules/phase3-configurable.js +23 -15
  50. package/dist/saas/constants.d.ts +15 -0
  51. package/dist/saas/constants.js +48 -0
  52. package/dist/saas/dashboard.d.ts +8 -0
  53. package/dist/saas/dashboard.js +132 -0
  54. package/dist/saas/errors.d.ts +19 -0
  55. package/dist/saas/errors.js +37 -0
  56. package/dist/saas/helpers.d.ts +21 -0
  57. package/dist/saas/helpers.js +110 -0
  58. package/dist/saas/ingest.d.ts +3 -0
  59. package/dist/saas/ingest.js +249 -0
  60. package/dist/saas/organization.d.ts +5 -0
  61. package/dist/saas/organization.js +82 -0
  62. package/dist/saas/plan-change.d.ts +10 -0
  63. package/dist/saas/plan-change.js +15 -0
  64. package/dist/saas/store.d.ts +21 -0
  65. package/dist/saas/store.js +159 -0
  66. package/dist/saas/types.d.ts +191 -0
  67. package/dist/saas/types.js +2 -0
  68. package/dist/saas.d.ts +8 -218
  69. package/dist/saas.js +7 -761
  70. package/dist/sarif.d.ts +74 -0
  71. package/dist/sarif.js +122 -0
  72. package/dist/trust-advanced.d.ts +14 -0
  73. package/dist/trust-advanced.js +65 -0
  74. package/dist/trust-kpi-fs.d.ts +3 -0
  75. package/dist/trust-kpi-fs.js +141 -0
  76. package/dist/trust-kpi-parse.d.ts +7 -0
  77. package/dist/trust-kpi-parse.js +186 -0
  78. package/dist/trust-kpi-types.d.ts +16 -0
  79. package/dist/trust-kpi-types.js +2 -0
  80. package/dist/trust-kpi.d.ts +1 -3
  81. package/dist/trust-kpi.js +6 -266
  82. package/dist/trust-policy.d.ts +32 -0
  83. package/dist/trust-policy.js +160 -0
  84. package/dist/trust-render.d.ts +9 -0
  85. package/dist/trust-render.js +54 -0
  86. package/dist/trust-scoring.d.ts +9 -0
  87. package/dist/trust-scoring.js +208 -0
  88. package/dist/trust.d.ts +4 -32
  89. package/dist/trust.js +29 -432
  90. package/dist/types/app.d.ts +30 -0
  91. package/dist/types/app.js +2 -0
  92. package/dist/types/config.d.ts +25 -0
  93. package/dist/types/config.js +2 -0
  94. package/dist/types/core.d.ts +100 -0
  95. package/dist/types/core.js +2 -0
  96. package/dist/types/diff.d.ts +55 -0
  97. package/dist/types/diff.js +2 -0
  98. package/dist/types/plugin.d.ts +41 -0
  99. package/dist/types/plugin.js +2 -0
  100. package/dist/types/trust.d.ts +120 -0
  101. package/dist/types/trust.js +2 -0
  102. package/dist/types.d.ts +8 -365
  103. package/docs/release-notes-draft.md +40 -0
  104. package/docs/rules-catalog.md +49 -0
  105. package/docs/trust-core-release-checklist.md +37 -5
  106. package/package.json +3 -2
  107. package/packages/vscode-drift/src/code-actions.ts +1 -1
  108. package/schemas/drift-ai-output.v1.json +162 -0
  109. package/schemas/drift-report.v1.json +151 -0
  110. package/schemas/drift-trust.v1.json +131 -0
  111. package/scripts/smoke-repo.mjs +394 -0
  112. package/src/benchmark.ts +75 -53
  113. package/src/cli.ts +285 -13
  114. package/src/config.ts +19 -2
  115. package/src/diff.ts +57 -48
  116. package/src/doctor.ts +173 -0
  117. package/src/format.ts +81 -0
  118. package/src/guard-types.ts +64 -0
  119. package/src/guard.ts +324 -0
  120. package/src/index.ts +35 -0
  121. package/src/init.ts +298 -0
  122. package/src/map-cycles.ts +38 -0
  123. package/src/map-svg.ts +124 -0
  124. package/src/map.ts +111 -142
  125. package/src/metrics.ts +78 -59
  126. package/src/output-metadata.ts +30 -0
  127. package/src/plugins-capabilities.ts +36 -0
  128. package/src/plugins-messages.ts +35 -0
  129. package/src/plugins-rules.ts +296 -0
  130. package/src/plugins.ts +76 -283
  131. package/src/reporter-constants.ts +46 -0
  132. package/src/reporter.ts +64 -65
  133. package/src/review.ts +4 -2
  134. package/src/rules/phase3-configurable.ts +39 -26
  135. package/src/saas/constants.ts +56 -0
  136. package/src/saas/dashboard.ts +172 -0
  137. package/src/saas/errors.ts +45 -0
  138. package/src/saas/helpers.ts +140 -0
  139. package/src/saas/ingest.ts +278 -0
  140. package/src/saas/organization.ts +99 -0
  141. package/src/saas/plan-change.ts +19 -0
  142. package/src/saas/store.ts +172 -0
  143. package/src/saas/types.ts +216 -0
  144. package/src/saas.ts +49 -1031
  145. package/src/sarif.ts +232 -0
  146. package/src/trust-advanced.ts +99 -0
  147. package/src/trust-kpi-fs.ts +169 -0
  148. package/src/trust-kpi-parse.ts +219 -0
  149. package/src/trust-kpi-types.ts +19 -0
  150. package/src/trust-kpi.ts +8 -316
  151. package/src/trust-policy.ts +246 -0
  152. package/src/trust-render.ts +61 -0
  153. package/src/trust-scoring.ts +231 -0
  154. package/src/trust.ts +62 -576
  155. package/src/types/app.ts +30 -0
  156. package/src/types/config.ts +27 -0
  157. package/src/types/core.ts +105 -0
  158. package/src/types/diff.ts +61 -0
  159. package/src/types/plugin.ts +46 -0
  160. package/src/types/trust.ts +134 -0
  161. package/src/types.ts +78 -409
  162. package/tests/cli-sarif.test.ts +92 -0
  163. package/tests/format.test.ts +157 -0
  164. package/tests/new-features.test.ts +10 -2
  165. package/tests/phase1-init-doctor-guard.test.ts +199 -0
  166. package/tests/sarif.test.ts +160 -0
  167. package/tests/trust-kpi.test.ts +31 -4
  168. package/tests/trust.test.ts +18 -0
package/AGENTS.md CHANGED
@@ -2,294 +2,118 @@
2
2
 
3
3
  ## Qué es drift
4
4
 
5
- `@eduardbar/drift` es un CLI TypeScript que escanea proyectos TypeScript con análisis AST (ts-morph) y asigna un score de 0 a 100 a cada archivo según la cantidad de deuda técnica AI-generada que contiene.
5
+ `@eduardbar/drift` es un CLI de auditoría estática para repos TypeScript/JavaScript orientado a deuda estructural y confianza de merge en PRs asistidas por AI.
6
6
 
7
- - **0** = código limpio
8
- - **100** = reescribí esto antes de que alguien lo vea
9
-
10
- Publicado en npm como `@eduardbar/drift`. MIT.
7
+ - Publicado en npm como `@eduardbar/drift`
8
+ - Licencia MIT
9
+ - Versión del paquete: `1.3.0` (`package.json`)
11
10
 
12
11
  ---
13
12
 
14
- ## Stack técnico
13
+ ## Stack y runtime
15
14
 
16
15
  | Dep | Rol |
17
16
  |-----|-----|
18
- | `ts-morph ^27` | Motor AST — traversal de nodos TypeScript |
19
- | `commander ^14` | CLI flags y subcomandos |
20
- | `kleur ^4` | Colores en consola (sin dependencias) |
21
- | `typescript ^5.9` | Dev — compilación |
22
- | `@types/node ^25` | Dev — tipos Node.js |
23
- | `vitest ^4` | Testing |
24
-
25
- **Runtime:** Node.js 18+, ES Modules (`"type": "module"`).
26
-
27
- ---
28
-
29
- ## Estructura del proyecto
30
-
31
- ```
32
- drift/
33
- ├── bin/
34
- │ └── drift.js ← wrapper cross-platform (Windows npx fix)
35
- ├── src/
36
- │ ├── analyzer.ts ← motor AST + 26 reglas + drift-ignore
37
- │ ├── types.ts ← interfaces: DriftIssue, FileReport, DriftReport, AIOutput
38
- │ ├── reporter.ts ← buildReport(), formatMarkdown(), formatAIOutput()
39
- │ ├── printer.ts ← salida consola con colores y score bar ASCII
40
- │ ├── utils.ts ← scoreToGrade, severityIcon, scoreBar
41
- │ ├── index.ts ← re-exports públicos (librería)
42
- │ ├── cli.ts ← entry point Commander.js
43
- │ ├── config.ts ← drift.config.ts support
44
- │ ├── fix.ts ← drift fix command
45
- │ ├── ci.ts ← drift ci command
46
- │ ├── diff.ts ← drift diff command
47
- │ ├── report.ts ← drift report command
48
- │ ├── badge.ts ← drift badge command
49
- │ ├── snapshot.ts ← drift snapshot command
50
- │ ├── git.ts ← re-exports git analyzers
51
- │ ├── git/
52
- │ │ ├── trend.ts ← drift trend (historial de scores)
53
- │ │ ├── blame.ts ← drift blame (atribución de deuda)
54
- │ │ └── helpers.ts
55
- │ └── rules/ ← reglas modularizadas por fase
56
- │ ├── phase0-basic.ts
57
- │ ├── phase1-complexity.ts
58
- │ ├── phase2-crossfile.ts ← dead-file, unused-export, unused-dependency
59
- │ ├── phase3-arch.ts ← circular-dependency, layer-violation
60
- │ ├── phase5-ai.ts
61
- │ ├── phase8-semantic.ts ← semantic-duplication
62
- │ ├── complexity.ts
63
- │ ├── coupling.ts
64
- │ ├── nesting.ts
65
- │ ├── promise.ts
66
- │ ├── magic.ts
67
- │ ├── comments.ts
68
- │ └── shared.ts
69
- ├── packages/
70
- │ ├── eslint-plugin-drift/ ← ESLint plugin oficial
71
- │ └── vscode-drift/ ← VS Code extension
72
- ├── dist/ ← output tsc (no editar a mano)
73
- ├── assets/
74
- │ ├── og.svg / og.png
75
- │ ├── og-v030-linkedin.svg/png
76
- │ └── og-v030-x.svg/png
77
- ├── .github/workflows/publish.yml
78
- ├── package.json
79
- ├── tsconfig.json
80
- └── AGENTS.md ← este archivo
81
- ```
82
-
83
- ---
84
-
85
- ## Comandos de desarrollo
86
-
87
- ```bash
88
- npm run build # tsc — compila src/ → dist/
89
- npm run dev # tsc --watch
90
- npm start # node dist/cli.js (desarrollo local)
91
- npm test # vitest run
92
- npm run test:watch # vitest (watch mode)
93
- ```
94
-
95
- **Pre-publicación:** `prepublishOnly` corre `build` automáticamente.
96
-
97
- ---
17
+ | `ts-morph ^27` | análisis AST |
18
+ | `commander ^14` | CLI y flags |
19
+ | `kleur ^4` | salida con color |
20
+ | `typescript ^5.9` | compilación |
21
+ | `vitest ^4` | testing |
98
22
 
99
- ## CLI flags disponibles
100
-
101
- | Flag | Tipo | Descripción |
102
- |------|------|-------------|
103
- | `scan <path>` | positional | Ruta a escanear (requerido) |
104
- | `--output <file>` / `-o` | string | Escribe reporte Markdown a archivo |
105
- | `--json` | boolean | Imprime `DriftReport` crudo como JSON |
106
- | `--ai` | boolean | JSON optimizado para LLMs (`AIOutput`) |
107
- | `--fix` | boolean | Muestra sugerencias de fix en consola |
108
- | `--min-score <n>` | number | Exit code 1 si score supera umbral (CI) |
109
- | `--low-memory` | boolean | Activa análisis por chunks para bajar el pico de RAM |
110
- | `--chunk-size <n>` | number | Cantidad de archivos por chunk en low-memory mode |
111
- | `--max-files <n>` | number | Límite blando de archivos analizados (el resto se reporta como skip) |
112
- | `--max-file-size-kb <n>` | number | Saltea archivos grandes y agrega diagnóstico de skip |
113
- | `--with-semantic-duplication` | boolean | Rehabilita semantic-duplication en low-memory mode |
114
-
115
- **Uso básico:**
116
- ```bash
117
- npx @eduardbar/drift scan .
118
- npx @eduardbar/drift scan ./src --min-score 60
119
- npx @eduardbar/drift scan ./src --ai | pbcopy # pegar en Claude/GPT
120
- npx @eduardbar/drift scan ./src --fix # ver sugerencias inline
121
- npx @eduardbar/drift scan ./src -o report.md # exportar Markdown
122
- npx @eduardbar/drift scan ./src --low-memory --max-file-size-kb 1024
123
- ```
23
+ Runtime: Node.js 18+, ES Modules (`"type": "module"`).
124
24
 
125
25
  ---
126
26
 
127
- ## Reglas del analyzer
128
-
129
- | Regla | Severidad | Peso |
130
- |-------|-----------|------|
131
- | `large-file` | error | 20 |
132
- | `large-function` | error | 15 |
133
- | `duplicate-function-name` | error | 18 |
134
- | `high-complexity` | error | 15 |
135
- | `circular-dependency` | error | 14 |
136
- | `layer-violation` | error | 16 |
137
- | `comment-contradiction` | warning | 12 |
138
- | `deep-nesting` | warning | 12 |
139
- | `semantic-duplication` | warning | 12 |
140
- | `debug-leftover` | warning | 10 |
141
- | `catch-swallow` | warning | 10 |
142
- | `high-coupling` | warning | 10 |
143
- | `dead-file` | warning | 10 |
144
- | `hardcoded-config` | warning | 10 |
145
- | `cross-boundary-import` | warning | 10 |
146
- | `dead-code` | warning | 8 |
147
- | `any-abuse` | warning | 8 |
148
- | `too-many-params` | warning | 8 |
149
- | `unused-export` | warning | 8 |
150
- | `inconsistent-error-handling` | warning | 8 |
151
- | `promise-style-mix` | warning | 7 |
152
- | `unnecessary-abstraction` | warning | 7 |
153
- | `naming-inconsistency` | warning | 6 |
154
- | `unused-dependency` | warning | 6 |
155
- | `no-return-type` | info | 5 |
156
- | `over-commented` | info | 4 |
157
- | `magic-number` | info | 3 |
158
-
159
- **Score = suma de pesos capped a 100. Score del proyecto = promedio de archivos.**
27
+ ## Comandos CLI actuales
28
+
29
+ Comandos top-level definidos en `src/cli.ts`:
30
+
31
+ - `scan [path]`
32
+ - `init`
33
+ - `diff [ref]`
34
+ - `guard [path]`
35
+ - `benchmark`
36
+ - `review`
37
+ - `trust [path]`
38
+ - `trust-gate <trustJsonFile>`
39
+ - `doctor`
40
+ - `kpi <path>`
41
+ - `map [path]`
42
+ - `report [path]`
43
+ - `badge [path]`
44
+ - `ci [path]`
45
+ - `trend [period]`
46
+ - `blame [target]`
47
+ - `fix [path]`
48
+ - `snapshot [path]`
49
+ - `cloud` (con subcomandos: `ingest`, `summary`, `plan-set`, `plan-changes`, `usage`, `dashboard`)
160
50
 
161
51
  ---
162
52
 
163
- ## drift-ignore
53
+ ## Reglas y scoring (estado real)
164
54
 
165
- **Por línea** (`// drift-ignore`):
166
- - Suprime el issue en la línea actual o en la línea inmediatamente superior al problema.
167
- - Funciona para cualquier regla.
55
+ - La fuente de verdad de reglas/pesos/severidad es `RULE_WEIGHTS` en `src/analyzer.ts`.
56
+ - Estado actual: **35 rule IDs** (incluye reglas de detección, reglas configurables, meta-reglas y diagnósticos de plugins/guardrails de análisis).
57
+ - Score por archivo: suma de pesos cap a 100.
58
+ - Score de proyecto: promedio de scores por archivo.
168
59
 
169
- **Por archivo** (`// drift-ignore-file`):
170
- - Se coloca en las primeras 10 líneas del archivo.
171
- - `analyzeFile()` devuelve reporte vacío (score 0, cero issues) para ese archivo.
172
- - Usar en archivos con `console.log` intencional (ej: `printer.ts`).
60
+ Catálogo completo actualizado en `docs/rules-catalog.md`.
173
61
 
174
62
  ---
175
63
 
176
- ## Formato `--ai` (`AIOutput`)
177
-
178
- ```typescript
179
- interface AIOutput {
180
- summary: {
181
- score: number
182
- grade: string // "CLEAN" | "LOW" | "MEDIUM" | "HIGH" | "CRITICAL"
183
- total_issues: number
184
- files_affected: number
185
- files_clean: number
186
- }
187
- priority_order: Array<{
188
- rank: number
189
- file: string
190
- line: number
191
- rule: string
192
- severity: "error" | "warning" | "info"
193
- message: string
194
- snippet: string
195
- fix_suggestion: string
196
- effort: "low" | "medium" | "high"
197
- }>
198
- context_for_ai: {
199
- project_type: "typescript"
200
- scan_path: string
201
- rules_detected: string[]
202
- recommended_action: string
203
- }
204
- }
205
- ```
206
-
207
- Los issues se ordenan: error > warning > info, luego low effort primero (quick wins).
64
+ ## Configuración soportada (`drift.config.*`)
208
65
 
209
- ---
66
+ `DriftConfig` actual (ver `src/types/app.ts`):
210
67
 
211
- ## Formato `--fix` en consola
68
+ - `layers`: capas para `layer-violation`
69
+ - `modules`: boundaries para `cross-boundary-import`
70
+ - `moduleBoundaries` / `boundaries`: alias legacy normalizados a `modules`
71
+ - `plugins`: plugins drift
72
+ - `performance`: `lowMemory`, `chunkSize`, `maxFiles`, `maxFileSizeKb`, `includeSemanticDuplication`
73
+ - `architectureRules`: `controllerNoDb`, `serviceNoHttp`, `maxFunctionLines`
74
+ - `saas`: límites/política local multi-tenant (`strictActorEnforcement` incluido)
75
+ - `trustGate`: políticas de gating para `trust` / `trust-gate`
212
76
 
213
- ```
214
- ┌──────────────────────────────────────────────────────┐
215
- │ - console.log(userData)
216
- │ + Remove this console.log statement
217
- │ + Or replace with a proper logging library
218
- └──────────────────────────────────────────────────────┘
219
- ```
77
+ Notas:
220
78
 
221
- Las sugerencias por regla están hardcodeadas en `src/printer.ts`.
79
+ - Sin config, reglas puramente configurables/arquitectónicas se omiten.
80
+ - `exclude` y overrides tipo `rules: { ... }` **no** forman parte del contrato tipado actual de `DriftConfig`.
222
81
 
223
82
  ---
224
83
 
225
- ## CI/CD GitHub Actions
226
-
227
- Workflow en `.github/workflows/publish.yml`:
228
- - **Trigger único:** `release: published` (evita doble publish)
229
- - **Fallback manual:** `workflow_dispatch` con input `tag`
230
- - **Guard:** verifica `npm view @eduardbar/drift@$VERSION` antes de publicar
231
-
232
- **Integración CI en proyectos externos:**
233
- ```yaml
234
- - name: Check drift score
235
- run: npx @eduardbar/drift scan ./src --min-score 60
236
- ```
237
-
238
- ---
239
-
240
- ## Compatibilidad Windows
241
-
242
- `bin/drift.js` es el wrapper cross-platform:
243
- ```javascript
244
- #!/usr/bin/env node
245
- import('../dist/cli.js')
246
- ```
247
-
248
- `package.json` apunta `bin.drift` a `bin/drift.js`, **no** a `dist/cli.js`.
249
- Sin esto, Windows no ejecuta el shebang correctamente con ES modules.
250
-
251
- ---
84
+ ## Flags transversales de recursos
252
85
 
253
- ## Versiones
86
+ `scan`, `diff`, `guard`, `trust`, `report`, `badge`, `ci`, `snapshot` comparten:
254
87
 
255
- | Versión | Cambios principales |
256
- |---------|---------------------|
257
- | **1.0.0** | 26 reglas, 131 tests, modular rules, JS/JSX, drift fix/report/diff/ci/badge/trend/blame, VS Code extension |
258
- | **0.3.0** | `--ai` (LLM-optimized JSON output) + `--fix` (inline suggestions) |
259
- | **0.2.3** | Fix: bin wrapper para compatibilidad Windows npx |
260
- | **0.2.2** | Refactor: `formatMarkdown` dividido en helpers + fix CI doble publish |
261
- | **0.2.1** | `drift-ignore` por línea y por archivo + fix console output propio |
262
- | **0.2.0** | Score bar ASCII + header hierarchy + DRY utils + file count en CLI |
263
- | **0.1.x** | Bootstrap: tipos, analyzer (10 reglas), reporter, printer, CLI, CI/CD |
88
+ - `--low-memory`
89
+ - `--chunk-size <n>`
90
+ - `--max-files <n>`
91
+ - `--max-file-size-kb <n>`
92
+ - `--with-semantic-duplication`
264
93
 
265
94
  ---
266
95
 
267
- ## Estado actual (feb 2026)
96
+ ## Comandos incorporados recientes (operativos)
268
97
 
269
- - **Versión publicada:** `1.0.0`
270
- - **Branch:** `master`, sincronizado con `origin`
271
- - **Self-scan score:** 5/100 (LOW)
272
- - **Top issues:** 51× magic-number, 2× deep-nesting, 2× catch-swallow
273
- - **26 reglas activas** organizadas en fases
98
+ - `init`: scaffolding de `drift.config.ts`, workflow CI y baseline (`drift-baseline.json`)
99
+ - `doctor`: diagnóstico de entorno/proyecto (`--json` opcional)
100
+ - `guard`: evaluación de regresión por diff (`--base`) o baseline (`--baseline`) con `--budget` y `--by-severity`
274
101
 
275
102
  ---
276
103
 
277
- ## Convenciones de código
104
+ ## Convenciones de contribución (rápidas)
278
105
 
279
- - Todo en TypeScript sin `any` explícito (drift se corre sobre sí mismo)
280
- - ES Modules `import/export`, sin CommonJS
281
- - Conventional Commits obligatorios (ver AGENTS.md global)
282
- - `// drift-ignore-file` en `printer.ts` — sus `console.log` son output intencional
283
- - `scoreToGrade`, `severityIcon`, `scoreBar` viven en `utils.ts` — no duplicar
284
- - Nuevas reglas: agregar entrada en `RULE_WEIGHTS` en `analyzer.ts` + lógica de detección AST
106
+ - Evitar drift real en el propio repo (drift se corre sobre sí mismo).
107
+ - Mantener README + AGENTS + catálogo de reglas sincronizados cuando cambian reglas/CLI.
108
+ - Usar Conventional Commits.
285
109
 
286
110
  ---
287
111
 
288
- ## Agregar una nueva regla — checklist
112
+ ## Archivos clave
289
113
 
290
- 1. Agregar `"rule-name": <peso>` a `RULE_WEIGHTS` en `src/analyzer.ts`
291
- 2. Implementar la lógica de detección AST usando ts-morph en `analyzeFile()`
292
- 3. Agregar `fix_suggestion` para la regla en `src/printer.ts` (objeto de sugerencias por regla)
293
- 4. Actualizar `README.md` — tabla de reglas
294
- 5. Actualizar este `AGENTS.md` — tabla de reglas
295
- 6. Commit: `feat(analyzer): add <rule-name> rule`
114
+ - `src/cli.ts` — contrato de comandos y flags
115
+ - `src/analyzer.ts` orquestación de análisis + `RULE_WEIGHTS`
116
+ - `src/rules/*.ts` detecciones por fase
117
+ - `src/config.ts` y `src/types/*.ts` — contrato de configuración
118
+ - `README.md` — documentación de uso pública
119
+ - `docs/rules-catalog.md` inventario completo de reglas
package/CHANGELOG.md CHANGED
@@ -18,6 +18,34 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
18
18
 
19
19
  ## [Unreleased]
20
20
 
21
+ - No unreleased changes yet.
22
+
23
+ ---
24
+
25
+ ## [1.4.0] - 2026-03-18
26
+
27
+ ### Added
28
+
29
+ - `drift init`: project scaffolding command for `drift.config.ts`, optional CI workflow, and baseline generation.
30
+ - `drift doctor`: environment and project diagnostics command with optional JSON output.
31
+ - `drift guard [path]`: non-regression gate command for diff-aware (`--base`) or baseline-aware (`--baseline`) quality checks.
32
+ - Output schema contracts and metadata for machine-consumable outputs (v1 JSON schemas).
33
+ - SARIF mapper/public API and SARIF output support for `scan`, `ci`, `diff`, `review`, and `trust`.
34
+ - CI integration update for SARIF publishing in pull request workflows and action v2 contract alignment.
35
+
36
+ ### Changed
37
+
38
+ - Unified CLI output format handling around `--format` with legacy alias compatibility (`--json`, `--ai`, `--comment`, `--markdown`).
39
+ - `docs/rules-catalog.md` and command format matrix updated to reflect current SARIF-capable commands and 35-rule catalog.
40
+
41
+ ### Tests
42
+
43
+ - Added and expanded coverage for init/doctor/guard flows and SARIF paths (`tests/phase1-init-doctor-guard.test.ts`, `tests/cli-sarif.test.ts`, `tests/sarif.test.ts`, `tests/format.test.ts`).
44
+
45
+ ### Docs
46
+
47
+ - Updated trust-core and release-oriented docs to match current CLI behavior, trust artifacts, and SARIF workflow expectations.
48
+
21
49
  ---
22
50
 
23
51
  ## [0.9.0] - 2026-02-24