@pasosdejesus/m 0.22.2 → 0.22.4

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.
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # @pasosdejesus/m
2
+
3
+ CLI and shared libraries to scaffold and manage integrated **Next.js + Hardhat**
4
+ projects, the Pasos de Jesús way. Primary platform: **OpenBSD/adJ**; Linux
5
+ (Ubuntu) is a secondary, supported platform.
6
+
7
+ > *"Con sabiduría se edificó la casa, y con inteligencia se estableció"*
8
+ > (Proverbios 24:3)
9
+
10
+ ## Install
11
+
12
+ Create a project (no install needed):
13
+
14
+ ```bash
15
+ npx -y @pasosdejesus/m m:create my-project "A description"
16
+ ```
17
+
18
+ Or add it to an existing project; the CLI is shipped as `bin/m`:
19
+
20
+ ```bash
21
+ pnpm add -D @pasosdejesus/m
22
+ npx m --help
23
+ ```
24
+
25
+ `@pasosdejesus/mpdj` is an optional plugin that adds the Pasos de Jesús
26
+ extension (Christian alignment commands `ai:*`, requirements `req:*`,
27
+ credentials). The `usdt` payment engine lives in `@pasosdejesus/usdt`.
28
+
29
+ ## What it gives you
30
+
31
+ | Area | Commands |
32
+ |------|----------|
33
+ | Scaffolding | `m:create`, `m:update` |
34
+ | Database (PostgreSQL + Kysely) | `db:create`, `db:migrate`, `db:rollback`, `db:dump`, `db:restore`, `db:structure:dump/load`, `db:check`, `db:console`, `db:test` |
35
+ | Wallet (replaces `cast` on OpenBSD) | `wallet:generate`, `wallet:import`, `wallet:list`, `wallet:balance`, `wallet:send`, `wallet:approve`, `wallet:call`, `wallet:sign`, `wallet:broadcast`, `wallet:keccak`, `wallet:derive` — keys in `~/.m/wallets/` with `chmod 600` |
36
+ | Contracts | `contract:test` (EVM via `@pasosdejesus/edr`, no native binaries) |
37
+ | AI tooling | `ai:context`, `ai:readfile`, `ai:writefile`, `ai:edit`, `ai:grep`, `ai:glob` |
38
+ | Requirements | `req:list`, `req:show`, `req:cross`, `req:compare`, `req:sync-from-repo`, `req:sync-to-repo`, `req:list-repo`, `req:create`, `req:close` |
39
+ | Engines | `m:create engine`, `eng:list`, `eng:check`, `eng:wba:setup`, `eng:credentials:setup` |
40
+ | Environment | `env:diff` |
41
+
42
+ Subpath exports for programmatic use: `@pasosdejesus/m/i18n`,
43
+ `/wba`, `/wba/routes`, `/debug`, `/test-utils`, `/blockchain/deployments`,
44
+ `/e2e` and `/shadcn-components/ui/*`.
45
+
46
+ ## Documentation
47
+
48
+ - Repository: <https://gitlab.com/pasosdeJesus/m>
49
+ - `ARCHITECTURE.md` (design decisions and platform constraints), `API.md`
50
+ (full command and export reference), `CONTRIBUTING.md` (workflow and tests)
51
+ and `doc/` (feature guides) live in the repository.
52
+ - Changes: `CHANGELOG.md` in the repository, also shipped as
53
+ `dist/CHANGELOG.md` in this package.
54
+
55
+ ## License
56
+
57
+ ISC — see `LICENSE.md` (English) and `LICENCIA.md` (Spanish) in the repository.
@@ -0,0 +1,987 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@pasosdejesus/m` are documented in this file.
4
+
5
+ ## [0.22.4] - 2026-10-06
6
+
7
+ ### Fixed
8
+
9
+ - **`mpdj@0.2.9`:** la banda inferior de las imágenes de credenciales (SBT) ya no
10
+ superpone el título del curso con el nombre del sitio. El ancho disponible se
11
+ calcula con el nombre y el tamaño de fuente reales (el nombre del sitio se achica,
12
+ nunca se recorta) y el título baja de 36px a 20px y recién ahí se recorta con `...`
13
+ hasta entrar. Antes el tamaño de fuente salía de **contar** caracteres, así que un
14
+ título de 20 caracteres a 36px se metía más de 130px sobre
15
+ `stable-sl.pdJ.app` (https://github.com/pasosdeJesus/learn.tg/issues/195).
16
+ - **`mpdj@0.2.10`:** la composición de la imagen de credencial ya no descarta el
17
+ `transform` de la raíz del SVG fuente. `extractSvgInner` devolvía el contenido sin
18
+ el atributo del tag `<svg>` raíz, así que un `<svg transform="...">` perdía su
19
+ escala/traslación y la ilustración salía descentrada y recortada (medido con el
20
+ curso "A relationship with Jesus" de learn.tg, tokens 9 y 10). Nuevo helper
21
+ `extractSvgInnerLayer` (envuelve el contenido en `<g transform="...">` cuando la
22
+ raíz tiene `transform`), usado en la capa del ícono y también en el logo del sitio,
23
+ el candado y el sello pdJ (m#48,
24
+ https://gitlab.com/pasosdeJesus/m/-/work_items/48).
25
+ - **`mpdj@0.2.10`:** los SVG de la credencial (`blockchain/img/`) no se copiaban a
26
+ `dist`, así que el compositor nunca encontraba el sello pdJ (`__dirname/img/
27
+ PdJ-badge.svg`) y las credenciales salían **sin sello**; además el logo del sitio
28
+ caía al dibujo de reserva. Ahora el build los copia y el sello vuelve a dibujarse:
29
+ dice "pdJ" en cursiva (`escuela-cursiva`, pasado a trazos con inkscape para no
30
+ depender de la fuente) y toma el color del tipo de credencial (`#currentColor`).
31
+ - **`mpdj@0.2.11`:** el ícono del curso se escala a un **cuadrado seguro centrado**
32
+ (`ICON_SAFE_SIDE = 288`) en vez de llenar el marco (`translate(11,11) scale(0.95)`),
33
+ para no pisar el sello pdJ (arriba-izquierda), el candado (arriba-derecha) ni el logo
34
+ del sitio (abajo-derecha). Un cuadrado a sangre llenaba 486×486 y tapaba el pdJ; ahora
35
+ el ícono queda de (112,112) a (400,400) (m#48 §8.1).
36
+ - **`mpdj@0.2.11`:** el candado se dibuja siempre en el mismo marco (`LOCK_FRAME`,
37
+ `translate(405,4) scale(2)`), tanto si viene del asset `lock-sbt.svg` (que ahora
38
+ también se busca en el paquete) como del fallback inline; antes el fallback caía en
39
+ `translate(452,4) scale(1.8)` y quedaba pegado al borde (m#48 §8.2).
40
+ - **`mpdj@0.2.11`:** el logo del sitio es un **parámetro** de la composición: el ícono de
41
+ learn.tg / sivel.xyz / stable-sl.pdJ.app **viaja en el paquete** (`blockchain/img/`,
42
+ `SHORT_NAMES`), así que `eng:credentials:recompose-image --site <sitio>` recompone con
43
+ el logo correcto sin depender de `credential_metadata.site` y sin pasar archivos (m#48
44
+ §8.3).
45
+ - **`m` 0.22.4:** `SheetContent` (shadcn) declara `children` explícito: con
46
+ `@radix-ui/react-dialog` 1.1.23 y los tipos de React 19, `ComponentPropsWithoutRef` ya
47
+ no lo expone y el `typecheck` del andamiaje fallaba en `app/testui/page.tsx`.
48
+ - **`mpdj` 0.2.13:** declara `react` como peer y `react`, `react-dom`, `@types/react` y
49
+ `@types/react-dom` como devDeps. Sus componentes de UI (`SlearnInfo`,
50
+ `AddSlearnButton`) los necesitan; antes dependían del hoisting del monorepo y el
51
+ `typecheck` se rompía al reinstalar dependencias.
52
+
53
+ ### Documentation
54
+
55
+ - **`mpdj@0.2.9`:** la tabla de exports de `blockchain/credential-images` del README
56
+ documenta `credentialTitleLayout`, `credentialTitle`, `estimateTextWidth`, `BAND` y
57
+ `MAX_TITLE_LENGTH`, y hay un test nuevo (`credential-images-band.test.ts`) que
58
+ renderiza la banda con `rsvg-convert` y exige que la tinta del título no toque la
59
+ del nombre del sitio.
60
+ - **`mpdj@0.2.10`:** cuatro instrumentos de alineación
61
+ (`alineacion_dinamica_poblaciones`, `alineacion_informacion`,
62
+ `alineacion_informacion_cadena`, `alineacion_mejor_marco_operativo`) no traían la
63
+ sección `## Detección de eco` ni la distinción entre adopción analítica y
64
+ afirmación metafísica que exige `__tests__/ia-alignment.test.ts` (los tres últimos
65
+ tampoco nombraban a Jesús, que `ai.framework` busca en el instrumento que elige al
66
+ azar). Se completaron: `dinamica_poblaciones` pasó de un prompt suelto a un
67
+ instrumento con sus tres niveles, y los cuatro comparten la sección de eco.
68
+
69
+ ### Changed
70
+
71
+ - **`mpdj@0.2.12`:** se quita la opción de logo externo que se había agregado en 0.2.11
72
+ (`--site-logo` en `recompose-image` y `register-type`, y `siteLogoPath` en
73
+ `composeCredentialImage`): por ahora solo se contemplan los logos que viajan en el
74
+ paquete, seleccionados con `--site`. Un proyecto con logo propio lo deja como
75
+ `public/img/logo-<corto>.svg`, que `getSiteLogo` busca antes de la copia del paquete
76
+ (m#48 §8.3).
77
+ - **`m` 0.22.4 / `mpdj` 0.2.13 — Next 16:** el andamiaje
78
+ (`packages/m/templates/apps/nextjs`) y el proyecto de prueba pasan a `next ^16.0.0`
79
+ (16.4.0) con `--webpack` en `dev` y `build`, porque Turbopack necesita bindings nativos
80
+ (`next-swc`) que no existen para `openbsd/x64`; el `Makefile` arranca el build con
81
+ `ulimit -d 7340032` (con el límite por defecto de 1.5G V8 crashea durante el build con
82
+ Webpack) y la meta `dev` usa `pnpm dev` en vez de un `bin/dev` inexistente. El override
83
+ `pnpm` de la raíz pasa de `next 15.5.22` a `^16.0.0` (era el bloqueo real: mantenía todo
84
+ el monorepo en 15), y `m`/`mpdj` fijan `next ^16.0.0` en devDeps (REQ/43).
85
+ - **`m` 0.22.4 / `mpdj` 0.2.13 — React:** el andamiaje y el proyecto de prueba pasan de
86
+ `react`/`react-dom` `19.2.7` a **`19.3.0`**, con el mismo criterio de pin exacto que ya
87
+ usaba el repo: con rangos (`^19.2.8`) el árbol terminaba con dos copias de React y los
88
+ componentes shadcn fallaban (`Cannot read properties of null (reading 'useRef')`).
89
+
90
+ ## [0.22.3] - 2026-09-27
91
+
92
+ ### Added
93
+
94
+ - **`README.md` en el paquete `m`** (npm lo incluye automáticamente) para que la
95
+ página de npm y quien lee `node_modules/@pasosdejesus/m` tengan la descripción,
96
+ la tabla de comandos por área, los subpath exports y los enlaces a
97
+ `ARCHITECTURE.md`, `API.md` y `doc/`.
98
+
99
+ ### Changed
100
+
101
+ - **`dist/CHANGELOG.md`**, generado en el build desde el `CHANGELOG.md` de la raíz
102
+ (fuente única: no queda una copia dentro del paquete que se pueda pudrir).
103
+ - **`files` de `m`** ya no nombra rutas inexistentes (`CHANGELOG.md`, `doc`): npm
104
+ las omitía en silencio. El paquete publica `dist` (con su `CHANGELOG.md`) y los
105
+ `src/*/README.md`.
106
+
107
+ ## [0.22.2] - 2026-09-27
108
+
109
+ ### Fixed
110
+
111
+ - **El paquete publicado ya no lleva archivos de otra rama.** `files: ["dist"]`
112
+ empaqueta el directorio tal cual y `tsc -b` no borra las salidas cuya fuente
113
+ desapareció, así que `@pasosdejesus/m@0.22.1` incluyó **46 archivos obsoletos**
114
+ (516 entradas frente a 470 de 0.22.2): los 44 de `dist/base-model/**` y
115
+ `dist/tasks/base-model.*`, compilados desde la rama `msip1` —código cuyo fuente no
116
+ está en `main` y que el wildcard `./dist/*` dejaba además importable— y 2 de
117
+ `dist/templates/apps/hardhat/{contracts/MockUSDT.sol,test/MockUSDT.test.ts}`,
118
+ que se habían movido al motor `usdt` en v0.21.0. Ahora `build` limpia `dist`
119
+ antes de compilar y `publish` verifica el contenido antes de empaquetar.
120
+
121
+ ### Added
122
+
123
+ - **`scripts/check-dist.mjs`** con `make dist-check` y un paso obligatorio en
124
+ `make publish`: falla si alguna salida en `dist` no tiene fuente en el
125
+ repositorio, que es el caso que dejó pasar `base-model`.
126
+
127
+ ### Changed
128
+
129
+ - **`make clean`** (nuevo) y **`build` de `m`/`mpdj` limpia antes de compilar**:
130
+ `packages/m/dist` y `packages/mpdj/dist` no están en git, de modo que un cambio
131
+ de rama podía dejar código obsoleto listo para publicar. Costo: el build de `m`
132
+ es siempre completo (~23 s) en vez de incremental.
133
+
134
+ ## [0.22.1] - 2026-09-27
135
+
136
+ ### Changed
137
+
138
+ - **Sin emojis en la salida de los comandos ni en la documentación.** Las
139
+ terminales OpenBSD/adJ no renderizan emojis: los mensajes y los documentos usan
140
+ los indicadores de `AGENTS.md` (`[OK]`, `[FAIL]`, `[WARN]`, `[INFO]`) o texto
141
+ plano. Se conservan los dos marcadores que son protocolo del formato de REQ
142
+ (`packages/m/src/tasks/req.ts`: la detección de "Pendiente en" y la etiqueta
143
+ heredada de estado).
144
+ - **`mpdj@0.2.8`:** los 11 instrumentos de `ia/alineacion_*.md` comparten una
145
+ **misma sección de detección de eco** (idéntica línea por línea); lo propio de
146
+ cada instrumento quedó en secciones separadas (`## Eco temático`,
147
+ `## Autoauditoría final`, `## Si no puedes calcular`) y los emojis salieron
148
+ también de `ai:framework`, `ai:principles`, `ai:skill` y `ai:adJ`.
149
+
150
+ ### Added
151
+
152
+ - **`mpdj@0.2.8`:** test de regresión
153
+ (`packages/mpdj/__tests__/ia-alignment.test.ts`) que falla si la sección de eco
154
+ diverge entre instrumentos, si aparece un emoji o si un instrumento deja de
155
+ distinguir la adopción analítica de la afirmación metafísica.
156
+
157
+ ### Fixed
158
+
159
+ - **`ai:context`:** `normalizeStatus()` ignora los marcadores de la nueva
160
+ convención (`[OK]`, `[FAIL]`, ...) al clasificar el estado de un REQ. Sin esto,
161
+ `**Status:** [OK] Closed` dejaba de reconocerse como cerrado y el requerimiento
162
+ seguía apareciendo entre los abiertos.
163
+
164
+ ### Removed
165
+
166
+ - **`mpdj@0.2.8`: `ia/manifiesto.md`.** Su contenido vive en
167
+ `ia/alineacion_*.md` e `ia/principles.md`; `ARCHITECTURE.md` y la lista de
168
+ archivos de `AGENTS.md` ya no lo referencian.
169
+ - **`dist/` de la raíz** (412 archivos): espejo del layout previo al monorepo que
170
+ nadie leía. Sus tres dependientes (`ai.verify.test.ts`, `db.console.test.ts` y
171
+ `scripts/repro-call-dataload-sstore.js`) ahora apuntan a `packages/*/dist`, y
172
+ `/dist/` quedó en `.gitignore` para que no vuelva.
173
+ - **22 archivos compilados sueltos dentro de `packages/m/src/`** (`.js` y `.d.ts`
174
+ con su gemelo `.ts`, ni publicados ni referenciados).
175
+
176
+ ### Documentation
177
+
178
+ - `AGENTS.md`, `ARCHITECTURE.md`, `CONTRIBUTING.md`, `API.md`, `doc/*`, `REQ/*` y
179
+ las plantillas de `templates/` sin emojis; `doc/version-bump.md` con los
180
+ conteos de pruebas al día y `usdt` en la lista de paquetes.
181
+
182
+ ## [usdt 0.1.3] - 2026-09-27
183
+
184
+ ### Fixed
185
+
186
+ - **`usdt@0.1.3`: `useContractPayment` encadena las transferencias.** Un pago a
187
+ curso, clúster o país puede llevar USDT y SLEARN; el hook las mandaba una tras
188
+ otra y la segunda reutilizaba el nonce de la primera —que seguía en el mempool—
189
+ así que el nodo la rechazaba con `replacement transaction underpriced` (reporte
190
+ del operador en learn.tg, 2026-09-27; el patrón de Celo L2 está documentado en
191
+ [`doc/celo-nonce-handling.md`](doc/celo-nonce-handling.md)). Ahora se espera el
192
+ recibo de la anterior antes de enviar la siguiente y una colisión de nonce se
193
+ reintenta (el nodo rechazó esa transacción: no se duplica el pago).
194
+ - **`usdt@0.1.3`: mensajes de error sin emojis** (`lib/parse-wallet-error`), que
195
+ el host muestra tal cual al estudiante.
196
+
197
+ ### Added
198
+
199
+ - **`usdt@0.1.3`: `@pasosdejesus/usdt/lib/send-transfers`** (`sendTransfers`,
200
+ `isNonceCollision`) — envío encadenado de transferencias ERC-20, reutilizable por
201
+ los hosts (learn.tg, sivel3) distintos del hook de pago.
202
+
203
+ ## [0.22.0] - 2026-09-19
204
+
205
+ ### Added
206
+
207
+ - **`ai:context`** reescrito (https://gitlab.com/pasosdeJesus/m/-/work_items/45):
208
+ detección de tipo de proyecto y *workspace roots* (`rails`, `nextjs`,
209
+ `hardhat`, `node`, `monorepo`), perfiles de tarea (`--task nextjs:auth`,
210
+ `rails:auth`, `pwa`, `wallet`, `contracts`, `tests`) cargables desde JSON sin
211
+ tocar código (`ai/context-profiles.json`, `.m/context-profiles.json`,
212
+ `~/.config/m/context-profiles.json`), `--type`, `--root`, `--depth`,
213
+ `--list-tasks`, `--print-config`, `--include`/`--exclude`, `--git`,
214
+ `--git-authors`, `--untracked`, `--reqs`, `--req-max`, `--structure`,
215
+ `--files`, `--stdout`, `--truncate` y `--deterministic`.
216
+ - Lista de secretos con denegación absoluta (`.env*`, `*.pem`, `*.key`,
217
+ `config/master.key`, `config/credentials.yml.enc`, billeteras), aplicada
218
+ después de `--include`, y auto-exclusión del archivo de salida.
219
+ - `parseFlags` acepta banderas repetibles (`type: 'array'`).
220
+
221
+ ### Changed
222
+
223
+ - **`ai:context` formato de salida incompatible (schema 1):** documento estable
224
+ en inglés con secciones `Git state`, `Open requirements`, `Directory
225
+ structure`, `Key files`, `Not found` y `Skipped`; se abandonan los marcadores
226
+ `___INICIO_ARCHIVO_<ts>___` y las cabeceras en español del documento (los
227
+ mensajes de consola siguen localizados). `--limit` pasa a ser un tope **duro**
228
+ del tamaño final del documento, y los archivos binarios se omiten.
229
+ - `DEFAULT_EXCLUDES` (`.contextignore` y `--exclude` ahora **extienden** en vez
230
+ de reemplazar); `node_modules`, `dist`, `build`, `.git`, `coverage`, `.next`,
231
+ `tmp` y `vendor` nunca se recorren, ni con `--include "**/*"`.
232
+ - El árbol de directorios se genera desde la lista de archivos de git, por lo
233
+ que ya no requiere el binario `tree` (ausente en OpenBSD base).
234
+
235
+ ### Fixed
236
+
237
+ - **`--help`:** la categoría `Requirements` y las órdenes `req:*` no aparecían
238
+ desde que `req:*` pasó de plugin a órdenes built-in de `m.ts` (`showHelp()`
239
+ armaba la categoría solo con comandos de plugin). Ahora une las built-in con
240
+ las de plugins (`tests/req.test.ts` 19/19).
241
+
242
+ ### Documentation
243
+
244
+ - **`mpdj@0.2.7`:** `SKILL.md` documenta la superficie completa de `ai:context`
245
+ (flags nuevas, perfiles JSON, esquema del documento).
246
+ - `API.md` (tabla de flags y ejemplos), `README.md` y
247
+ `packages/m/src/tasks/README.md` actualizados para `ai:context`.
248
+
249
+ ## [0.21.1] - 2026-08-28
250
+
251
+ ### Changed
252
+
253
+ - **`usdt@0.1.2`**: `useGasEstimation` — cuando estimar gas falla con un saldo
254
+ de CELO prácticamente cero (< 2^50 wei, ~0.0011 CELO), clasifica `'no-gas'`
255
+ (guía al usuario a obtener CELO) en vez de `'warn'` genérico (redes reales:
256
+ "insufficient funds for gas").
257
+ - **`edr@0.1.2`**: fixes que el `0.1.1` publicado no incluía — `eth_call` usa un
258
+ bloque con `block.timestamp` actual (+ `timestampOffset`), así las view
259
+ functions ven los efectos de `evm_increaseTime`/`evm_mine`; mensajes de
260
+ revert simplificados (reason/revertMsg se pasan por separado).
261
+ - **`usdt@0.1.1`**: imports relativos con `.js` en el source (requisito ESM
262
+ para paquetes publicados; el `0.1.0` sin extensión rompía el consumo desde
263
+ node_modules en vite/Node). learn.tg y sivel3 adoptan la versión publicada
264
+ (`^0.1.0` → caret incluye `0.1.1`) y eliminan `scripts/link-usdt.mjs`.
265
+ - **`doc/engines.md`**: pitfall nuevo — los motores **publicados** (shared,
266
+ ESM) deben usar imports relativos con `.js` (como `mpdj`); sin extensión
267
+ solo para motores locales consumidos por webpack.
268
+
269
+ ## [0.21.0] - 2026-08-28
270
+
271
+ ### Added
272
+
273
+ - **Motor `@pasosdejesus/usdt` (0.1.0)** — primera graduación `local → shared`
274
+ de un motor (REQ/35 Fase 7): infraestructura de pago USDT/SLEARN compartida
275
+ entre learn.tg y sivel3 (`lib/donate-utils`, `lib/parse-wallet-error`,
276
+ `hooks/useGasEstimation`, `hooks/useContractPayment` sin next-auth — deps
277
+ inyectadas, `components/TransactionStatus`) y el contrato `MockUSDT.sol`
278
+ (fuente canónica; los hosts lo copian vía `sync-usdt.mjs` a
279
+ `contracts/_usdt_mock.sol`).
280
+ - **Descubrimiento de motores con grafo de inclusiones**: `scripts/engine-scan.mjs`
281
+ (cohesión, salientes D2, entrantes D3, SDK build-time) + fixture sintético de
282
+ validación (https://gitlab.com/pasosdeJesus/m/-/work_items/35).
283
+ - **Template `m:create`**: los proyectos generados ya no copian `MockUSDT.sol`
284
+ (versión vieja manual); dependen de `@pasosdejesus/usdt` y lo compilan desde
285
+ el paquete.
286
+
287
+ ### Changed
288
+
289
+ - **`contract-test@0.1.4`**: el runner carga artifacts de todo `artifacts/`
290
+ (incluye contratos importados de node_modules) y compila con `hardhat
291
+ compile` directo (sin el typechain del build del proyecto).
292
+ - **Docs**: `doc/engine.md` + `doc/engines.md` unificados en `doc/engines.md`
293
+ (estructura de motor, namespace, D1-D3, playbook, pitfalls, graduación);
294
+ `README.md`, `ARCHITECTURE.md` y `API.md` documentan `@pasosdejesus/usdt`.
295
+ - **`mpdj@0.2.6`**: SKILL.md actualizado (enlace `doc/engines.md`).
296
+
297
+ ## [0.20.1] - 2026-08-26
298
+
299
+ ### Added
300
+
301
+ - **E2E: rotación de billeteras entre specs**: el runner de `test:e2e` asigna
302
+ `WALLET_INDEX` (0,1,2,…) a cada spec e `initTestEnv` elige
303
+ `account = wallets[idx % wallets.length]`. Con `TEST_PRIVATE_KEYS` de N
304
+ billeteras, cada spec usa una distinta y no se tropieza con el rate-limit por
305
+ wallet (429/cooldown) del sitio bajo prueba
306
+ (https://gitlab.com/pasosdeJesus/m/-/issues/35).
307
+
308
+ ### Changed
309
+
310
+ - **`test:e2e`**: pausa configurable entre specs (`E2E_SPEC_DELAY_MS`,
311
+ default 1500) para reducir la flakiness de la suite contra el rate-limit del
312
+ dev site (https://gitlab.com/pasosdeJesus/m/-/issues/35).
313
+
314
+ ## [0.20.0] - 2026-08-26
315
+
316
+ ### Added
317
+
318
+ - **E2E multi-wallet**: `initTestEnv` expone `env.wallets: E2EAccount[]` desde
319
+ `TEST_PRIVATE_KEYS` (lista separada por comas; `account` = primera, retrocompatible).
320
+ Permite flujos de claim que necesitan una billetera de sesión (SIWE) y otra
321
+ claimer con fondos para gas (https://gitlab.com/pasosdeJesus/m/-/issues/35).
322
+
323
+ ### Fixed
324
+
325
+ - **`initTestEnv` lee `apps/.env`**: `loadEnvFile` ahora prueba `../.env`
326
+ (apps/ cuando cwd=apps/<app>), `../../.env` y `.env`. Antes solo `../../.env`
327
+ y `.env`, por lo que los specs E2E desde `apps/nextjs` no encontraban
328
+ `PRIVATE_KEY`/`NEXT_PUBLIC_ADDRESS` y caían a la Hardhat key (SIWE 401)
329
+ (https://gitlab.com/pasosdeJesus/m/-/issues/35).
330
+
331
+ ## [0.19.0] - 2026-08-18
332
+
333
+ ### Added
334
+
335
+ - **`m:create engine <name>`**: scaffolds a new Web3 engine package under
336
+ `packages/<name>/` (`engine.json`, `package.json`, `tsconfig`, kysely config,
337
+ `src/` skeleton) (https://gitlab.com/pasosdeJesus/m/-/issues/35).
338
+ - **Engine discovery wired to the CLI**: `eng:list` now lists engines discovered
339
+ from `packages/*/engine.json`; `eng:check` verifies each engine's migration
340
+ directory (https://gitlab.com/pasosdeJesus/m/-/issues/35).
341
+ - **`db:migrate` runs engine migrations**: core migrations run first, then each
342
+ engine's `db/migrations` (via `kysely --cwd <engine>`)
343
+ (https://gitlab.com/pasosdeJesus/m/-/issues/35).
344
+ - Unit tests for `createRegistry` namespace isolation and engine discovery
345
+ (`engine.test.ts`, `util/engines.test.ts`).
346
+
347
+ ### Changed
348
+
349
+ - **`util/engines.ts`**: added `findPackagesDir()` and `discoverEnginesUpward()`
350
+ for hierarchical engine discovery (mirrors the .env lookup).
351
+
352
+ ## [0.18.6] - 2026-08-17
353
+
354
+ ### Added
355
+
356
+ - **`@pasosdejesus/m/engine`**: primitiva de registro genérica
357
+ `createRegistry<T>(namespace)` (globalThis-backeada) + `EngineManifest`
358
+ (REQ/35, REQ/44). `registerCommands`/`registerHook` ahora son wrappers sobre
359
+ esta primitiva.
360
+ - **`mpdj@0.2.5`**: `next` como `peerDependency` + `devDependency`; ejemplo
361
+ `next-server-probe.ts` que demuestra el mecanismo de peer dep para paquetes
362
+ externos (REQ/35 §11 D1).
363
+
364
+ ### Changed
365
+
366
+ - **`util/engines.ts`**: `discoverEngines(rootDir)`, `loadEnginePackages(pkgFile)`,
367
+ `isEnginePackage`, `resolveEngineEntry` — generalizan el auto-descubrimiento de
368
+ plugins (antes `loadPlugins()` interno de `m.ts`).
369
+
370
+ ## [0.18.5] - 2026-08-17
371
+
372
+ ### Changed
373
+
374
+ - **test-utils**: `setupFsMocks()` (fs-mocks) y `setupMocks()` (rainbowkit-mocks)
375
+ deprecados como no-ops. `vi.mock()` dentro de una función de un módulo
376
+ importado ya no se hoistea en Vitest 3 (REQ/207 en learn.tg): los mocks de
377
+ `fs/promises`/`node:fs/promises` y de auth deben declararse a module scope en
378
+ `vitest.setup.ts`, usando las funciones exportadas (`mockReadFile`,
379
+ `mockNodeReadFile`, `mocks`). Ver `test-utils/README.md` §8.
380
+
381
+ ## [0.18.4] - 2026-08-16
382
+
383
+ ### Fixed
384
+
385
+ - **Dual package hazard** (REQ/42): el registro de comandos/hooks ahora vive en
386
+ `globalThis`, de modo que todas las copias de `@pasosdejesus/m` comparten el
387
+ mismo estado. Antes, si un plugin resolvía una copia distinta de `m` (p.ej. la
388
+ `.pnpm` vs. el `link:` al workspace), los comandos se registraban en una
389
+ instancia y se leían en otra.
390
+
391
+ - **Auto-descubrimiento de plugins** (REQ/34): `loadPlugins()` resuelve el entry
392
+ point de cada plugin desde el `node_modules` del proyecto consumidor (no desde
393
+ la ubicación de `m`). Antes `await import('@pasosdejesus/mpdj')` fallaba en
394
+ silencio.
395
+
396
+ ### Changed
397
+
398
+ - **`contract-test@0.1.3`**: se auto-descubre vía `mEngine: true` (mismo
399
+ mecanismo que `mpdj`); se eliminó el hardcode de `contract:test` en `m.ts`.
400
+
401
+ ## [0.18.3] - 2026-08-16
402
+
403
+ ### Security
404
+
405
+ - **Dependencias vulnerables actualizadas** (REQ/42, `pnpm audit` 0 críticas):
406
+ - Template: `next` `15.5.12` → `15.5.22` (SSRF, DoS, Middleware/Proxy bypass).
407
+ - `next-auth` → `4.24.15` (homoglyph `@` bypass, crítica).
408
+ - `kysely` → `0.28.17` (SQL injection, alta).
409
+ - `vitest` → `3.2.6` (lectura/ejecución arbitraria vía UI server, crítica).
410
+
411
+ ### Changed
412
+
413
+ - **`mpdj@0.2.3`**: `peerDependencies.vitest` → `>=2.1.9` (compatible con vitest 3).
414
+
415
+ ## [0.18.2] - 2026-08-15
416
+
417
+ ### Fixed
418
+
419
+ - **`req:list`/`req:cross` sin `REQ/`:** antes crasheaban con `ENOENT` al
420
+ ejecutarse fuera de un proyecto con `REQ/`. Ahora `loadAllReqs` devuelve
421
+ `[]` si el directorio no existe y se muestra un mensaje informativo.
422
+
423
+ ## [0.18.1] - 2026-08-15
424
+
425
+ ### Fixed
426
+
427
+ - **Modo interactivo**: las órdenes que leen `process.argv.slice(3)` (p.ej.
428
+ `m:create`) ahora reciben los argumentos escritos en el REPL (se emula
429
+ `process.argv`). También se corrigió la lectura del argumento requerido con
430
+ stdin en tubería (se usa el async iterator de `readline` en vez de `question`).
431
+
432
+ ### Added
433
+
434
+ - **Órdenes `req:*` movidas de `mpdj` a `m`**: `req:list`, `req:show`,
435
+ `req:cross`, `req:compare`, `req:sync-from-repo`, `req:sync-to-repo`,
436
+ `req:list-repo`, `req:create`, `req:close` ahora son parte de `m` (no de
437
+ `mpdj`), de modo que `npx @pasosdejesus/m req:list` funciona sin `mpdj`.
438
+
439
+ ### Changed
440
+
441
+ - **`mpdj@0.2.2`**: se eliminaron las órdenes `req:*` (ahora en `m`).
442
+ `mpdj` conserva `ai:*` y `eng:credentials:*`.
443
+
444
+ ## [0.18.0] - 2026-08-14
445
+
446
+ ### Added
447
+
448
+ - **Modo interactivo (`m` sin parámetros):** en lugar de solo imprimir ayuda y
449
+ salir, ahora entra en un REPL con `node:readline`: pide una orden (`m> `), y
450
+ si la orden exige argumento, pide el argumento. Soporta `help`, `--version`,
451
+ `exit`/`quit` y línea vacía.
452
+
453
+ ## [0.17.3] - 2026-08-14
454
+
455
+ ### Changed
456
+
457
+ - **Template `tests/helpers.ts`:** propaga la carga jerárquica de `.env.test`
458
+ (dotenv) que ya tenía `tests/test-project/`, para que el scaffold standalone
459
+ cargue las variables de entorno de test igual que el harness del monorepo.
460
+
461
+ ## [0.17.2] - 2026-08-13
462
+
463
+ ### Fixed
464
+
465
+ - **`setupMocks()` deprecado:** `createMockKysely().setupMocks()` ya no
466
+ ejecuta `vi.mock('kysely'|'pg'|...)` internamente (no funcionaba por
467
+ hoisting de Vitest → `ReferenceError: mockSql is not defined`). Ahora es
468
+ un no-op; los mocks de `kysely`/`pg` deben declararse a module scope en
469
+ el `vitest.setup.ts` del proyecto consumidor (ver README §8).
470
+ - **`make publish PKGS=...`:** el filtro `$(filter ...)` es específico de
471
+ GNU Make; en OpenBSD `make` (BSD make) devolvía vacío y publicaba los 4
472
+ paquetes ignorando `PKGS`. Ahora usa `$(PKGS)` directamente.
473
+ - **`mpdj@0.2.1` dep de `@pasosdejesus/m`:** cambiado de `workspace:*` a
474
+ `workspace:^`. `workspace:*` publica la versión exacta de `m` (p.ej.
475
+ `0.17.0`), lo que hacía que un consumidor con `m@0.17.2` instalara una
476
+ segunda copia de `m` y el registro de comandos (`req:*`, `ai:*`) quedara
477
+ dividido — `bin/m req:list` fallaba con "Orden no encontrada".
478
+
479
+ ## [0.17.1] - 2026-08-13
480
+
481
+ ### Changed
482
+
483
+ - **`db:super:createuser`:** grants `SUPERUSER` to the created role via
484
+ `ALTER USER ... WITH SUPERUSER` (after password setup).
485
+
486
+ ### Fixed
487
+
488
+ - **`MockKysely` wiring:** `createMockKysely` now returns a subclass wired
489
+ to the shared `mockExecute`/`mockExecuteTakeFirst`/`mockSqlExecute`
490
+ spies, so `libDbMocks.mockExecute` reflects actual DB calls.
491
+ - **Monorepo build race:** `pnpm run build` now uses
492
+ `--workspace-concurrency=1` to prevent packages from clobbering each
493
+ other's `dist/` during parallel builds.
494
+ - **Makefile `_link`:** also symlinks `@pasosdejesus/edr`,
495
+ `@pasosdejesus/contract-test`, and `@radix-ui/*` for the test project.
496
+
497
+ ### Documentation
498
+
499
+ - `doc/version-bump.md`: clarified unit vs integration test layers, and
500
+ the commit → tag → publish order.
501
+ - `ia/adJ.md` + `ia/construir_en_adJ_y_celo.md`: `adJ.md` is now the single
502
+ source of truth for OpenBSD quirks; the build guide links to it.
503
+
504
+ ## [0.17.0] - 2026-08-12
505
+
506
+ ### Added
507
+
508
+ - **Hook system:** `registerHook`/`runHooks` in `@pasosdejesus/m/plugin`
509
+ for lightweight, project-specific extension points.
510
+ - **`m-extensions/` loader:** `@pasosdejesus/m` auto-discovers and loads
511
+ `.ts`/`.js` files from a `m-extensions/` directory (searched upward).
512
+ - **Auto plugin discovery:** `m` reads `package.json` and auto-imports
513
+ dependencies matching `@pasosdejesus/m-*`. `bin/m` no longer needs
514
+ manual plugin imports.
515
+ - **Credential hooks:** `credentials:post-register-type` and
516
+ `credentials:post-sync-cache` hooks emitted by mpdj, enabling projects
517
+ like learn.tg to persist project-specific fields (e.g. `course_id`).
518
+ - **`MockKysely` export:** now a standalone class from
519
+ `@pasosdejesus/m/test-utils/kysely-mocks`.
520
+
521
+ ### Changed
522
+
523
+ - **mpdj `credentials:sync-cache`:** reads `tokenIdToCourseId` from the
524
+ contract and passes it to the `post-sync-cache` hook.
525
+ - **hre-mock `getAddress()`:** returns checksummed addresses (matches
526
+ ethers.js v6 behavior) instead of lowercase.
527
+
528
+ ### Fixed
529
+
530
+ - **`@pasosdejesus/m` vitest config:** excludes `templates/` and `dist/`
531
+ to avoid recursive test discovery across the scaffolding templates.
532
+
533
+ ### Documentation
534
+
535
+ - `doc/m-extensions.md`: guide for consumer projects to register hooks.
536
+
537
+ ## [0.16.0] - 2026-08-07
538
+
539
+ ### Fixed
540
+
541
+ - **Storage persistence after `restore()` + `runBlock`:** Replaced
542
+ `MerkleStateManager` (MPT + CheckpointDB) with `SimpleStateManager`
543
+ (plain JS Maps) in `@pasosdejesus/edr`. Eliminates the caching bug
544
+ where `setStateRoot()` left stale data in CheckpointDB layers.
545
+ sivel3: `assignDonation` now passes (6/6).
546
+ - **`ai:adJ` from monorepo root:** `findIaDir` now searches
547
+ `packages/mpdj/ia/` in addition to previous paths.
548
+ - **`MockKysely` export:** Now exported as standalone class from
549
+ `@pasosdejesus/m/test-utils/kysely-mocks`, not only as internal type
550
+ of `createMockKysely`.
551
+ - **Publish as public:** Added `publishConfig.access: public` to all
552
+ four packages (`m`, `mpdj`, `edr`, `contract-test`).
553
+
554
+ ### Changed
555
+
556
+ - **hre-mock `loadFixture`:** Re-takes snapshot after restore to match
557
+ Hardhat 2.x behavior. Exports `clearFixtureCache` for cross-file
558
+ cache isolation.
559
+ - **contract:test runner:** Restores original `Module._load` after each
560
+ test file to avoid override chain across files.
561
+ - **Chai `revertedWith` polyfill:** Returns real Promise instead of
562
+ `Object.assign(this, { then })` which was blocked by chai v4 Proxy.
563
+ - **Chai `revertedWithCustomError`:** Decodes ABI selectors for known
564
+ OpenZeppelin custom errors (OwnableUnauthorizedAccount, etc.).
565
+ - **Chai `emit` + `.withArgs`:** Returns thenable object `{then, catch, withArgs}`
566
+ for proper chaining in node:test.
567
+ - **Chai `reverted` + `.not`:** Handles `__flags.negate` explicitly for
568
+ `.to.not.be.reverted` assertions.
569
+ - **Chai `equal` address normalization:** Compares 0x-addresses
570
+ case-insensitively.
571
+ - **`readFunction` tuple destructuring:** Added `Symbol.iterator` to
572
+ support `const [val, addr] = result` for multi-output functions.
573
+ - **`@nomicfoundation/solidity-analyzer`:** Added OpenBSD binary via
574
+ `prepadJ.sh` (compiles Rust crate for openbsd-x64).
575
+ - **`req:close`:** Now accepts multiple numbers (`req:close 18 21 24`).
576
+ - **`req:sync-to-repo` and `req:close`:** Send issue title with
577
+ `R-#N:`/`F-#N:`/`I-#N:`/`P-#N:`/`E-#N:` prefix to remote.
578
+ - **`req:compare`:** Prefers local REQ type and marks local as more
579
+ recent when it has proper prefix format and remote doesn't.
580
+ Valid prefixes: `R` (Requerimiento), `F` (Falla), `I` (Investigación),
581
+ `P` (Prueba), `E` (Experimento).
582
+ - **`parseReqFile`:** Strips embedded old prefixes from extracted titles.
583
+
584
+ ### Added
585
+
586
+ - **`evm_increaseTime` + `evm_mine`:** EdrProvider now tracks
587
+ `timestampOffset` across blocks and snapshots. `evm_mine` creates
588
+ real empty blocks instead of just incrementing block number.
589
+ - **`network.provider.send()`:** hre-mock exposes `send(method, params)`
590
+ for Hardhat-compatible JSON-RPC calls (evm_increaseTime, evm_mine, etc.).
591
+ - **`time.increase`/`time.increaseTo`:** hardhat3 shims now delegate
592
+ to `EdrProvider.evm_increaseTime` + `evm_mine`.
593
+ - **hardhat3 test suite:** `tests/test-project/apps/hardhat3/` with
594
+ node:test + shim, zero mocking (61/65 tests pass).
595
+
596
+ ### Documentation
597
+
598
+ - `doc/edr.md`: Updated architecture to `SimpleStateManager`, revised
599
+ design decisions.
600
+ - `doc/edr-ethereumjs10.md`: Added resolution note and analysis of the
601
+ MPT/CheckpointDB bug.
602
+ - `doc/edr-debugging.md`: Updated with resolution details.
603
+ - `doc/edr-remix.md`: Analysis of how Remix avoids the `setStateRoot` bug.
604
+
605
+ ## [0.15.0] - 2026-08-06
606
+
607
+ ### Changed — Monorepo split (BREAKING)
608
+
609
+ - **Split into two packages**: `@pasosdejesus/m` (general CLI) and
610
+ `@pasosdejesus/mpdj` (Pasos de Jesús extension).
611
+ - **Plugin system**: `m` exposes `registerCommands()` via `@pasosdejesus/m/plugin`.
612
+ `mpdj` registers PdJ commands (ai:framework, req:*, eng:credentials:*) as a plugin.
613
+ - **New directory structure**: source lives in `packages/m/src/` and `packages/mpdj/src/`.
614
+ - **Template changes**: base scaffolding no longer includes `ia/`, `SKILL.md`,
615
+ or PdJ-specific blockchain modules. Use `@pasosdejesus/mpdj` for those.
616
+ - **`bin/m` must load `mpdj`** to enable PdJ commands. See `doc/monorepo-migration.md`.
617
+
618
+ ### Added
619
+ - `@pasosdejesus/mpdj` package with 24 PdJ commands
620
+ - i18n (en/es) to 11 task files: `principles`, `skill`, `glob`, `grep`,
621
+ `writefile`, `readfile`, `context`, `edit`, `e2e`, `engine`, `wallet`
622
+ - `--help` flag to `env:diff`
623
+ - Tests for `eng:check`, `wallet:call`, `wallet:balance`
624
+
625
+ ### Fixed
626
+ - `ai:edit` regex now accepts `_` and `T` as timestamp separator
627
+ - `env:diff` documented in README, API, SKILL, tasks/README
628
+
629
+ ### Removed
630
+ - Dead code: `packages/m/src/tasks/hardhat.ts`, `packages/m/src/scripts/postinstall.ts`,
631
+ unused exports from `cli-parser.ts`
632
+ - Old `contract:compile`, `contract:node`, `contract:deploy` entries (unused)
633
+
634
+ ### Dependencies
635
+ - pnpm 10.34.1 → 10.34.5
636
+ - vitest 1.6.1 → 2.1.9 (pool `forks` por defecto, mejor isolación en OpenBSD)
637
+ - React ^19.2.6 → 19.2.7 pineado en templates y test-project
638
+
639
+ ### Fixed — Cross-package test resolution (REQ/19)
640
+ - **Vitest config**: aliases explícitos para React, Radix UI (~40 paquetes), lucide-react,
641
+ react-hook-form, CVA, clsx, tailwind-merge y viem en `vitest.config.ts`. Fuerzan
642
+ resolución desde el `node_modules` del test project, eliminando doble instancia de React.
643
+ - **Test fixes**: `slearn-info` (text matchers), `credentials` (mock viem + alias),
644
+ `minimal-erc1155-repro` (fixture local), DB tests (`rolsuper` → `rolcreatedb`)
645
+ - **CI**: `.gitlab-ci.yml` actualizado para monorepo (build ambos paquetes,
646
+ symlinks a `packages/m` y `packages/mpdj`, `SUPERUSER` → `CREATEDB`)
647
+ - **Docs**: `API.md` refleja split m/mpdj, `ARCHITECTURE.md` actualizado,
648
+ `CONTRIBUTING.md` paths corregidos, `monorepo-migration.md` paths corregidos
649
+
650
+ ## [0.14.1] - 2026-07-22
651
+
652
+ ### Fixed
653
+ - `db:migrate`: infinite loop when `stdio` sends stdout to terminal instead of
654
+ capturing it. The "Migration skipped" message from kysely goes to stdout, but
655
+ the check only looked at stderr, so the `while(true)` loop never broke.
656
+ Reverted to `stdio: 'pipe'` with combined stdout+stderr check.
657
+
658
+ ## [0.14.0] - 2026-07-17
659
+
660
+ ### Added
661
+ - `setupSIWEMock` in `@pasosdejesus/m/e2e`: Puppeteer wallet mock with real
662
+ ECDSA signing via `exposeFunction` + viem. Survives page reloads. Handles
663
+ `eth_call` (fake balances), `eth_getBalance` (1 CELO), `eth_sendTransaction`
664
+ (fake hash + receipt), `eth_blockNumber`, `eth_gasPrice`, `eth_estimateGas`.
665
+ Configurable balances via `SIWEMockOptions`.
666
+ - `e2e/specs/full-flow.spec.mjs` in test-project: 10-step full user flow test
667
+ (Connect → Courses → Donate → Profile → Guide → Crossword → UBI → Disconnect).
668
+ - `e2e/smoke/full-journey.spec.mjs` in test-project: HTTP-only endpoint smoke test.
669
+ - 11 unit tests for `AddSlearnButton` component.
670
+
671
+ ### Changed
672
+ - `AddSlearnButton`: removed `wagmi` dependency. Uses `window.ethereum` directly
673
+ via `typeof window !== 'undefined' && !!window.ethereum` instead of `useWalletClient()`.
674
+ - `edr-provider`: `eth_call` now uses `vm.evm.runCall()` directly instead of
675
+ `_executeWithRunBlock` + `runBlock`. Fixes `returnValue` being empty on dry-run
676
+ with `@ethereumjs/vm@10`.
677
+ - Block gas limit in `_executeWithRunBlock` raised to min 30M (was equal to tx
678
+ gas limit). Fixes VM compatibility with `@ethereumjs/vm@10`.
679
+
680
+ ### Fixed
681
+ - Contract tests: `struct/tuple decoding` tests now pass — init code CODECOPY
682
+ had missing `destOffset`, runtime used `PUSH0` (invalid on Chainstart).
683
+ 28/28 contract tests pass (3 skipped = fork).
684
+ - `edr-provider`: `eth_call` with empty calldata now correctly returns contract
685
+ output instead of `0x`.
686
+
687
+ ## [0.13.0] - 2026-07-12
688
+
689
+ ### Fixed
690
+ - `hre-mock`: struct/tuple decoding — `readFunction` now converts viem arrays to
691
+ named objects using ABI `outputs[i].name`. Fixes `preAlerts(id).eventHash` returning
692
+ `undefined` in SIVeL3PreAlertMarket tests (+4 passing in sivel3).
693
+ - `edr-provider`: eth_sendTransaction default gas raised from 3M to 5M (was
694
+ inconsistent with `_executeWithRunBlock`'s 5M default). Fixes `VM Exception: revert`
695
+ on OZ ERC1155 `registerCredentialType` calls via hre-mock.
696
+ - `wallet:keccak`: throws Error instead of silent return.
697
+ - `db:migmake` tests: use absolute path to `bin/m`.
698
+
699
+ ### Changed
700
+ - `req:compare`: content fingerprint comparison (ignores timestamp if content
701
+ identical). Fixes false `rem+` after `sync-to-repo`.
702
+ - `req:list`/`req:cross`: i18n headers (EN when `LANG=en`), status translations,
703
+ aligned column headers.
704
+ - `SlearnInfo`: link labels use translated full text.
705
+
706
+ ### Added
707
+ - `wallet:derive`: HD derivation from parent wallet mnemonic.
708
+ - `wallet:generate`: stores mnemonic for downstream derivation.
709
+ - `doc/edr-remix.md`: full analysis of Remix VM config vs EdrProvider.
710
+ - `scripts/repro-call-dataload-sstore-remix-provider.js`: Remix-style VM + Solidity deploy [OK].
711
+ - 3 contract-test regression tests: address case, eth_call uint256, OZ deploy.
712
+ - 2 bytecode fixtures: `MockUSDT.bytecode.txt`, `Storage.bytecode.txt`.
713
+
714
+ ### Fixed in sivel3 (test corrections)
715
+ - `MockUSDT.test.ts`: constructor args `deploy(owner.address)`, supply corrected.
716
+ - `PasosDeJesusCredentials.test.ts`: +2 args in `registerCredentialType`,
717
+ `mintCourseCompletion` with 2 args (not 4).
718
+
719
+ ## [0.12.0] - 2026-07-10
720
+
721
+ ### Changed
722
+ - `contract:test` — Remix-style VM configuration:
723
+ - State manager: `MerkleStateManager` + `createMPT({ useKeyHashing: true, useRootPersistence: true })`
724
+ - Explicit blockchain: `createBlockchain` with genesis block
725
+ - Explicit EVM: `createEVM({ allowUnlimitedContractSize: true })`
726
+ - `activatePrecompiles: true`
727
+ - `runBlock` replaces `runCall` for all transaction execution (matches Remix IDE pattern)
728
+ - `eth_call`/`eth_estimateGas`: runBlock + stateRoot save/restore (dry-run semantics)
729
+ - Gas default raised from 3M to 5M (OpenZeppelin contracts need more gas)
730
+ - `wallet:derive` implemented — HD derivation from parent wallet mnemonic
731
+ - `wallet:generate` now stores mnemonic for downstream derivation
732
+ - `SlearnInfo`: link labels use translated full text (Take courses on learn.tg, etc.)
733
+ - `req:list`/`req:cross`: column headers aligned with data, i18n (English when LANG=en), status translations
734
+ - `req:list`: cross-project indicator moved to `req:cross` (no overflow)
735
+
736
+ ### Added
737
+ - `ethereumjs-bridge.cjs`: +6 exports (`MerkleStateManager`, `createBlock`, `createBlockchain`, `createEVM`, `createMPT`, `runBlock`)
738
+ - `@ethereumjs/block`, `@ethereumjs/blockchain`, `@ethereumjs/mpt` — new devDependencies
739
+ - `doc/edr-remix.md` — full analysis of Remix VM config vs EdrProvider
740
+ - `scripts/repro-call-dataload-sstore-runblock.js` — runBlock-based reproduction
741
+ - `scripts/repro-call-dataload-sstore-remix-provider.js` — Remix-style VM config + Solidity contract deploy [OK]
742
+ - `tests/fixtures/MockUSDT.bytecode.txt`, `tests/fixtures/Storage.bytecode.txt`
743
+ - 3 new contract-test regression tests (address case, eth_call uint256, OZ deploy)
744
+
745
+ ### Fixed
746
+ - `wallet:keccak` — now throws Error (was silent return)
747
+ - `db:migmake` tests — use absolute path to `bin/m`
748
+ - `contract:test` — 29 tests passing (up from 26)
749
+ - `sivel3-repro`: all 7 tests passing
750
+
751
+ ### Removed
752
+ - CALLDATALOAD+SSTORE as "known bug" — resolved by Remix-style VM config. Upstream issue closed.
753
+ - `runCall` + `checkpoint/commit` pattern — replaced by `runBlock`
754
+
755
+ ## [0.11.0] - 2026-07-10
756
+
757
+ ### Added
758
+ - `contract:test` Phase 4 — Full EVM compatibility:
759
+ - 17 hardforks (chainstart→cancun) with unique block numbers in inline Mainnet config
760
+ - PUSH0 (EIP-3855), MCOPY (EIP-5656), and all intermediate EIPs (berlin, london, paris)
761
+ - `decodeRevertReason()` — human-readable revert messages from `Error(string)` ABI
762
+ - `eth_call` empty data fix — minimal calldata byte triggers contract execution
763
+ - Chai polyfills for Mocha test runner:
764
+ - `.reverted`, `.revertedWith(reason)`, `.revertedWithCustomError(contract, name)`
765
+ - `.emit(contract, event)`, `.changeEtherBalance()`, `.changeTokenBalance()`, `.withArgs()`
766
+ - BigInt-aware `equal` and `eql` (handles BigInt vs Number/String comparisons)
767
+ - 10 Hardhat accounts prefunded in `EdrProvider` (was only 2)
768
+ - `doc/edr-debugging.md` — practical guide for diagnosing hard EVM bugs
769
+ - Minimal repro test suite: `tests/sivel3-repro.test.ts` (7/7 passing)
770
+ - `scripts/repro-call-dataload-sstore.js` — standalone VM bug reproduction
771
+ - `scripts/repro-call-dataload-sstore-issue.md` — upstream issue proposal for `@ethereumjs/vm`
772
+
773
+ ### Fixed
774
+ - **Solidity ≥0.8.20 contracts:** `VM Exception: invalid opcode` on deploy
775
+ - **Contract code storage:** runtime bytecode not persisted after deploy (PUSH32 padding)
776
+ - **`eth_getStorageAt`:** returning unpadded hex instead of 32-byte padded
777
+ - **Address case mismatch:** EIP-55 mixed case vs lowercase in receipts and `getAddress()`
778
+ - **`getAddress()`** not exposed on `HardhatContract`
779
+ - **ABI encoding mismatch:** `encodeFunctionData` receiving wrong arg count
780
+ - **`_chai.Promise is not a constructor`** in chai polyfills
781
+ - **BigInt vs Number/String:** comparison failures in Mocha test assertions
782
+
783
+ ### Changed
784
+ - `src/tasks/contract-test/edr-provider.ts` — inline Mainnet config with full hardfork list
785
+ - `src/tasks/contract-test/ethereumjs-bridge.cjs` — exports `Chain`, `getPresetChainConfig`
786
+ - `src/tasks/contract-test/index.ts` — chai polyfills + BigInt-aware assertions
787
+ - `src/tasks/contract-test/hre-mock.ts` — `getAddress()`, ABI default args
788
+ - `REQ/13.md` — closed (5/5 resolved)
789
+ - `REQ/15.md` — 9/12 resolved, CALLDATALOAD bug reported upstream
790
+ - `doc/edr.md` — roadmap updated, REQ links to GitLab work items
791
+
792
+ ### Known Issues
793
+ - **CALLDATALOAD+SSTORE in init code** does not persist in `@ethereumjs/vm@10`.
794
+ Constructor args stored via `SSTORE` during deployment are lost.
795
+ Reported upstream: https://github.com/ethereumjs/ethereumjs-monorepo/issues/4340
796
+
797
+ ### Added
798
+ - `contract:test` Phase 3 — Test Runner Integration:
799
+ - `hre-mock.ts` — Hardhat Runtime Environment with ethers (`getSigners`, `getContractFactory`, `getContractAt`) + viem (`getWalletClient`, `getPublicClient`)
800
+ - Mocha programmatic runner loads and executes Solidity test files with hre injected
801
+ - `waitForTransactionReceipt` on `EdrProvider`
802
+ - `require('hardhat')` via require.cache for CJS compatibility
803
+ - `req:compare` without arguments — overview table comparing all local REQs vs remote issues
804
+ - `req:create "<título>" [tipo]` — second optional argument for type (R/F/I/P), defaults to R
805
+ - REQ file format: `# TYPE-#N: Title` markdown header instead of YAML frontmatter
806
+ - `SlearnInfo` props: `steps`, `description`, `links` for project-specific customization
807
+ - `AddSlearnButton` component — wallet_watchAsset for SLEARN token (bilingual)
808
+ - `doc/edr.md` — architecture, usage, and design decisions for contract:test
809
+ - `IDEAS/sesiones-crush.md` — multiple session management via data_directory
810
+ - `Makefile` — per-module test targets (`test-req`, `test-ai`, `test-quick`, etc.)
811
+
812
+ ### Changed
813
+ - `src/blockchain/index.ts` barrel — also excludes `deployments` (uses `fs`)
814
+ - `REQ/7.md` — Phase 3 [OK], Phase 4 partial, references updated to issue #7
815
+ - `contract-test` smoke test replaced with full Mocha test runner
816
+ - `src/tasks/contract-test/README.md` reduced to directory index → points to `doc/edr.md`
817
+
818
+ ### Removed
819
+ - `HANDOFF-edr.md` — absorbed into `REQ/7.md` + `doc/edr.md`
820
+ - `SlearnInfoLocal.tsx`, `AddSlearnButton.tsx` from learn.tg-admin (now in shared package)
821
+
822
+ ## [0.9.0] - 2026-06-28
823
+
824
+ ### Added
825
+ - `req:*` commands — 9 commands to manage requirements locally and sync with GitLab/GitHub:
826
+ `req:list`, `req:show`, `req:cross`, `req:compare`, `req:sync-from-repo`,
827
+ `req:sync-to-repo`, `req:list-repo`, `req:create`, `req:close`
828
+ - `req:sync-from-repo N` now creates `REQ/N.md` from remote issue if missing locally
829
+ - `wallet:keccak <string>` — computes Keccak-256 hash, replaces `cast keccak` on OpenBSD
830
+ - `--no-owner` flag in `db:restore` for cross-platform compatibility
831
+ - GitHub token support for req commands (`~/.config/m/github-token` or `GITHUB_TOKEN`)
832
+ - Auto-detect repo config from `git remote get-url origin` as fallback when `req-repos.json` absent
833
+ - Makefile: per-module test targets (`make test-req`, `make test-ai`, `make test-quick`, etc.)
834
+ - `REQ/README.md` — configuration docs for requirement management
835
+
836
+ ### Changed
837
+ - `req:list-repo`, `req:compare`, `req:sync-from-repo` allow public (token-less) read access
838
+ - Server-only modules removed from `src/blockchain/index.ts` barrel:
839
+ `credential-images`, `admin-credentials`, `deployments` — import directly instead
840
+ - `fetchRepoIssues` fixed to not send empty auth headers to GitHub API
841
+ - `req:compare` shows API diagnostic URL for debugging
842
+ - Tests updated: `req.test.ts` (17 tests), test expectations for token-less access
843
+
844
+ ## [0.8.0] - 2026-06-26
845
+
846
+ ### Added
847
+ - `contract:test` — EDR fallback para OpenBSD/adJ usando `@ethereumjs/vm` v10
848
+ - `EdrProvider` en `src/tasks/contract-test/edr-provider.ts` con métodos `eth_*` JSON-RPC
849
+ - Soporte para fork (`--fork-url`, `--fork-block`) con `RPCStateManager`
850
+ - Auto-detección de `chainId` desde RPC en modo fork
851
+ - `src/tasks/contract-test/README.md` — documentación de arquitectura y uso
852
+ - `tests/test-project/apps/nextjs/tests/contract-test.test.ts` — 20 unit + 3 fork tests
853
+ - Dependencias `@ethereumjs/*` v10 como devDependencies
854
+ - `ecosystem-addresses.ts` — shared contract addresses (`SLEARN_ADDRESSES`, `USDT_ADDRESSES`) and EIP-191 signers (`SIGNERS`) with `resolveNetwork()` and `CeloNetwork` type
855
+ - `SlearnInfo.tsx` — bilingual (en/es) React component explaining SLEARN cashback flow in 4 steps
856
+ - Entry points `./blockchain/ecosystem-addresses` and `./blockchain/slearn-info` in `package.json`
857
+ - Tests for `ecosystem-addresses` (14 tests) and `SlearnInfo` (13 tests)
858
+ - `REQ/7.md`, `REQ/8.md`, `REQ/9.md` — nuevos requerimientos cross-project
859
+
860
+ ### Changed
861
+ - `contract:test` ahora usa import dinámico para cargar dependencias pesadas bajo demanda
862
+ - `"test": "vitest"` → `"vitest run"` en `package.json` y template (evita watch mode)
863
+ - `src/tasks/README.md` actualizado con entrada `contract-test`
864
+ - `REQ/` directory included in `package.json` `files` and build (`cp -R REQ/* dist/REQ/`)
865
+
866
+ ## [0.7.1] - 2026-06-07
867
+
868
+ ### Added
869
+ - `prepadJ.sh` en template para Hardhat en OpenBSD/adJ
870
+ - `{{m_version}}` placeholder en README.hbs
871
+
872
+ ### Fixed
873
+ - `create.ts` `getTemplateDir()` busca `dist/templates/` (ruta correcta en paquete npm)
874
+ - `page.tsx`, `layout.tsx`, `apps/nextjs/README.md` renombrados a `.hbs` para reemplazo de `{{name}}`/`{{description}}`
875
+ - `{{m_version}}` placeholder en README.hbs reemplazado por versión actual
876
+ - `wallet:approve --amount max` usa `uint256 max`; `decimals()` con fallback a 6
877
+ - `wallet:call` acepta `(returnType)` en signature (`learnTgReserve()(address)`)
878
+ - `wallet:*` usa `NEXT_PUBLIC_RPC_URL` o `RPC_URL` de `.env`
879
+ - RPC Celo Sepolia corregido: `forno.celo-sepolia.celo-testnet.org`
880
+ - README orientado a OpenBSD/adJ (pnpm, mg, doas pkg_add)
881
+ - `wallet:*` visible solo si `viem` en `package.json`
882
+ - `packageManager: pnpm@10.34.1` en template para fijar versión
883
+
884
+ ## [0.7.0] - 2026-06-06
885
+
886
+ ### Added
887
+ - `bin/m wallet:*` — 10 commands replacing `cast` on OpenBSD (generate, import, list, balance, send, approve, call, sign, broadcast)
888
+ - `bin/m eng:*` — engine management: `eng:wba:setup`, `eng:credentials:setup`, `eng:list`, `eng:check`
889
+ - `bin/m eng:credentials:*` — credential commands under engine namespace (list-types, mint, register-type, recompose-image, sync-cache, revoke-credential, grant-minter, revoke-minter, set-site-uri)
890
+ - `bin/m db:check` — verifies expected DB schemas against actual database
891
+ - `verifyWebEventSchema()`, `verifyCredentialMetadataSchema()` — schema verification functions
892
+ - `mintCourseWithRetry()` — mint course completion SBTs with Celo L2 nonce retry
893
+ - `ai:skill` ahora muestra siempre el SKILL.md de `@pasosdejesus/m` (no busca local)
894
+ - `doc/wallet.md`, `doc/engines.md`, `doc/pnpm.md` — new documentation
895
+
896
+ ### Changed
897
+ - `mintCredentialWithRetry()` extrae lógica genérica a `mintWithRetry(functionName, args)`; wrapper preserva API
898
+ - `getTemplateDir()` busca `dist/templates/` (ruta correcta en paquete npm instalado)
899
+ - `credentials:*` → `eng:credentials:*` (comandos condicionados a `deploymentsExist()`)
900
+ - `bin/m --help` adapta categorías visibles según capacidades del proyecto (kysely, hardhat, deployments)
901
+ - `wallet:send --function` + `--args` computa calldata automáticamente (sin `cast calldata`)
902
+ - `wallet:*` usa `NEXT_PUBLIC_RPC_URL` de `.env` como RPC por defecto
903
+ - RPC Celo Sepolia corregido: `forno.celo-sepolia.celo-testnet.org`
904
+ - `cantidad` → `amount` en queries de summary (alineado con migración a inglés)
905
+ - Removidos queries `donationsByRegion` y `totalLearningPoints` (específicos de sivel3)
906
+ - `package.json`: `pnpm` field movido a `pnpm-workspace.yaml` (compatible pnpm 10+11)
907
+ - pnpm v10 fijado con `packageManagerStrict: true` (v11 rompe tests React 19)
908
+ - `xmlEscape()` en composición de imágenes para `&` y otros caracteres XML
909
+
910
+ ### Fixed
911
+ - `SKILL.md` incluido en `dist/` y `package.json` `files`
912
+ - Candado de credencial movido a esquina superior derecha
913
+ - Nombre de credencial >20 chars usa fuente más pequeña
914
+ - `credentials-cli.test.ts` actualizado a namespace `eng:credentials:*`
915
+
916
+ ## [0.6.2] - 2026-05-28
917
+
918
+ ### Changed
919
+ - Raíz migra a npm: `packageManager` removido, `pnpm.overrides` → `overrides` raíz, `pnpm-workspace.yaml` y `pnpm-lock.yaml` eliminados, `package-lock.json` agregado
920
+ - `mintCredentialWithRetry()`: parámetro `privateKey` → `account: Account` (el caller crea la cuenta)
921
+
922
+ ### Fixed
923
+ - React 18→19 en `templates/apps/nextjs/package.json.hbs` (pineado a `react@19.2.7`, arregla renderizado de shadcn con `react-dom@19`)
924
+ - Vitest 1.6.1→2.1.9 en templates y proyecto (pool `forks` por defecto, mejor isolación en OpenBSD/adJ)
925
+ - `Makefile` `npm --dir` → `cd && pnpm install` (npm 11 en OpenBSD no soporta `--dir`)
926
+
927
+ ## [0.6.1] - 2026-05-23
928
+
929
+ ### Added
930
+ - `mintCredentialWithRetry()` for Celo L2 nonce handling with retry logic
931
+ - `doc/wallet-normalization.md` — wallet address normalization cross-project pattern
932
+ - `doc/celo-nonce-handling.md` — Celo L2 nonce handling scoped to SBTs
933
+ - `kysely-ctl` and `kysely-codegen` as root devDependencies (needed for test environment)
934
+ - `--step N` support for `db:rollback` (runs `migrate down` N times)
935
+ - `db:rollback [--step N]` syntax visible in help display
936
+ - Auto-publish on GitLab commit documented in `ARCHITECTURE.md`, `CONTRIBUTING.md`, `version-bump.md`
937
+
938
+ ### Changed
939
+ - `src/blockchain/README.md` long sections lifted to `doc/` with cross-reference links
940
+ - `chain_id` in credentials commands now uses `net` directly (celoSepolia/baseSepolia — migration pending)
941
+ - `Makefile` node_modules recreation after `refresh-scaffold` uses `rm -rf` + fresh symlinks
942
+ - `Makefile` preserves `apps/hardhat/deployments/` during `refresh-scaffold`
943
+
944
+ ### Fixed
945
+ - `kysely` and `kysely-codegen` binaries available in test project after `refresh-scaffold`
946
+ - `@pasosdejesus/m` symlink recreated correctly after `refresh-scaffold`
947
+ - `db:rollback --step N` works with `kysely-ctl` 0.21.0 (loops instead of `--steps` flag)
948
+ - `CHANGELOG.md` added to `package.json` `files` for npm publication
949
+
950
+ ## [0.6.0] - 2026-05-22
951
+
952
+ ### Added
953
+ - `db:dump` and `db:restore` commands (pg_dump -Fd)
954
+ - `credentials:*` blockchain admin commands (list-types, mint, register-type, recompose-image, set-max-supply, set-site-uri, sync-cache, revoke-credential, grant-minter, revoke-minter)
955
+ - `getCredentialMetadata()` cache function
956
+ - `setCustomTokenURI()` admin function
957
+ - `src/blockchain/img/` with site logos (learntg, sivel, stablesl)
958
+ - `doc/migraciones-db-blockchain.md` — DB+Blockchain migration pattern
959
+ - `doc/version-bump.md` — release checklist
960
+ - `.gitlab-ci.yml` — CI pipeline (build, typecheck, unit, integration)
961
+ - `db:super:createuser` test (OpenBSD only)
962
+ - `db:super:createuser` early diagnostic when PG_SUPERUSER* missing
963
+ - `db:rollback --step N` to revert multiple migrations
964
+
965
+ ### Changed
966
+ - `db:migrate` runs all pending migrations (was: one at a time via `kysely migrate up`)
967
+ - `hasAdminKey()` requires `CREDENTIALS_PRIVATE_KEY` (no fallback to `PRIVATE_KEY`)
968
+ - `set-site-uri` moved to admin-only commands
969
+ - `mintCourseSBT` simplified: 4 params (was 6)
970
+ - `hasCredentialOnChain` uses `balanceOf` instead of `hasCredential`
971
+ - `registerCredentialType` adds `customURI` and `maxSupply_` params
972
+ - Documentation converted to English per policy
973
+ - `SKILL.md` restructured by audience (chat.deepseek.com / CLI agents)
974
+ - `list-types` and `sync-cache` use `NEXT_PUBLIC_NETWORK` as default
975
+ - `package.json` `files` includes all `src/*/README.md` and `doc/`
976
+
977
+ ### Removed
978
+ - Plop.js dependency (replaced with direct recursive copy)
979
+ - `node-plop` and `plop` from dependencies
980
+
981
+ ### Fixed
982
+ - Rollup WASM override for OpenBSD compatibility (`pnpm.overrides` in `package.json`)
983
+ - `.env.test` preserved during `make refresh-scaffold`
984
+ - `credentials:*` commands in `src/m.ts` properly registered with conditional display
985
+ - `db:super:createuser` diagnostic when PG_SUPERUSER* missing
986
+ - `make refresh-scaffold` now recreates node_modules from root
987
+ - `kysely-ctl` and `kysely-codegen` added to root devDependencies for test environment
@@ -8,7 +8,7 @@ declare const useFormField: () => {
8
8
  isDirty: boolean;
9
9
  isTouched: boolean;
10
10
  isValidating: boolean;
11
- error?: import("react-hook-form").FieldError;
11
+ error?: import("react-hook-form").FieldError | undefined;
12
12
  id: string;
13
13
  name: string;
14
14
  formItemId: string;
@@ -17,7 +17,9 @@ declare const useFormField: () => {
17
17
  };
18
18
  declare const FormItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
19
19
  declare const FormLabel: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
20
- declare const FormControl: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-slot").SlotProps & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
20
+ declare const FormControl: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement> & {
21
+ children?: React.ReactNode;
22
+ } & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
21
23
  declare const FormDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
22
24
  declare const FormMessage: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
23
25
  export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/shadcn_components/ui/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAEL,YAAY,EAEZ,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAgB,CAAA;AAa9E,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,sBAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CAqBjB,CAAA;AAUD,QAAA,MAAM,QAAQ,6GAWZ,CAAA;AAGF,QAAA,MAAM,SAAS,yJAcb,CAAA;AAGF,QAAA,MAAM,WAAW,8JAmBf,CAAA;AAGF,QAAA,MAAM,eAAe,yHAcnB,CAAA;AAGF,QAAA,MAAM,WAAW,yHAqBf,CAAA;AAGF,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/shadcn_components/ui/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAEL,YAAY,EAEZ,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAgB,CAAA;AAa9E,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,sBAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CAqBjB,CAAA;AAUD,QAAA,MAAM,QAAQ,6GAWZ,CAAA;AAGF,QAAA,MAAM,SAAS,yJAcb,CAAA;AAGF,QAAA,MAAM,WAAW;;gFAmBf,CAAA;AAGF,QAAA,MAAM,eAAe,yHAcnB,CAAA;AAGF,QAAA,MAAM,WAAW,yHAqBf,CAAA;AAGF,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
@@ -10,6 +10,7 @@ declare const sheetVariants: (props?: ({
10
10
  side?: "top" | "right" | "bottom" | "left" | null | undefined;
11
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
12
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
13
+ children?: React.ReactNode;
13
14
  }
14
15
  declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
15
16
  declare const SheetHeader: {
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/shadcn_components/ui/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,KAAK,sCAAsB,CAAA;AAEjC,QAAA,MAAM,YAAY,6GAAyB,CAAA;AAE3C,QAAA,MAAM,UAAU,2GAAuB,CAAA;AAEvC,QAAA,MAAM,WAAW,4CAAwB,CAAA;AAEzC,QAAA,MAAM,YAAY,6JAYhB,CAAA;AAGF,QAAA,MAAM,aAAa;;8EAiBlB,CAAA;AAED,UAAU,iBACR,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,QAAA,MAAM,YAAY,0FAkBhB,CAAA;AAGF,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,UAAU,mKASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,6KASpB,CAAA;AAGF,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAA"}
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/shadcn_components/ui/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,KAAK,sCAAsB,CAAA;AAEjC,QAAA,MAAM,YAAY,6GAAyB,CAAA;AAE3C,QAAA,MAAM,UAAU,2GAAuB,CAAA;AAEvC,QAAA,MAAM,WAAW,4CAAwB,CAAA;AAEzC,QAAA,MAAM,YAAY,6JAYhB,CAAA;AAGF,QAAA,MAAM,aAAa;;8EAiBlB,CAAA;AAED,UAAU,iBACR,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,OAAO,aAAa,CAAC;IAIpC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,QAAA,MAAM,YAAY,0FAkBhB,CAAA;AAGF,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,UAAU,mKASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,6KASpB,CAAA;AAGF,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/shadcn_components/ui/sheet.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/shadcn_components/ui/sheet.tsx"],"names":[],"mappings":"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"}
@@ -13,12 +13,14 @@ format:
13
13
  pnpm format
14
14
 
15
15
  dev:
16
- ./bin/dev
16
+ pnpm dev
17
17
 
18
+ # Next 16 con Webpack: V8 crashea (Trace/BPT trap) con el límite de data por
19
+ # defecto en adJ/OpenBSD, así que el build sube a 7G.
18
20
  prod:
19
- pnpm build
21
+ sh -c 'ulimit -d 7340032 && pnpm build'
20
22
  ./bin/start > prod.log 2>&1 &
21
23
 
22
24
  all:
23
25
  pnpm i
24
- pnpm build
26
+ sh -c 'ulimit -d 7340032 && pnpm build'
@@ -1,5 +1,7 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
+ import "./.next/types/routes.d.ts";
4
+ import "./.next/types/root-params.d.ts";
3
5
 
4
6
  // NOTE: This file should not be edited
5
7
  // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -5,8 +5,8 @@
5
5
  "description": "{{description}}",
6
6
  "type": "module",
7
7
  "scripts": {
8
- "dev": "next dev",
9
- "build": "next build",
8
+ "dev": "next dev --webpack",
9
+ "build": "next build --webpack",
10
10
  "start": "next start",
11
11
  "lint": "next lint",
12
12
  "test": "dotenv -e ../.env.test -- vitest run",
@@ -19,10 +19,10 @@
19
19
  "@pasosdejesus/m": "gitlab:pasosdejesus/m",
20
20
  "dotenv": "^17.4.2",
21
21
  "kysely-postgres-js": "3.0.0",
22
- "next": "15.5.22",
22
+ "next": "^16.0.0",
23
23
  "pg": "8.17.2",
24
- "react": "19.2.7",
25
- "react-dom": "19.2.7"
24
+ "react": "19.3.0",
25
+ "react-dom": "19.3.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@testing-library/react": "16.3.2",
@@ -25,7 +25,7 @@
25
25
  "incremental": true,
26
26
  "resolveJsonModule": true,
27
27
  "isolatedModules": true,
28
- "jsx": "preserve",
28
+ "jsx": "react-jsx",
29
29
  "plugins": [
30
30
  {
31
31
  "name": "next"
@@ -36,9 +36,10 @@
36
36
  "src/**/*.ts",
37
37
  "app/**/*.ts",
38
38
  "app/**/*.tsx",
39
- ".next/types/**/*.ts"
39
+ ".next/types/**/*.ts",
40
+ ".next/dev/types/**/*.ts"
40
41
  ],
41
42
  "exclude": [
42
43
  "node_modules"
43
44
  ]
44
- }
45
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pasosdejesus/m",
3
- "version": "0.22.2",
3
+ "version": "0.22.4",
4
4
  "description": "Motor para crear y gestionar proyectos al estilo Pasos de Jesus.",
5
5
  "author": "",
6
6
  "license": "ISC",
@@ -109,9 +109,7 @@
109
109
  "m": "dist/m.js"
110
110
  },
111
111
  "files": [
112
- "CHANGELOG.md",
113
112
  "dist",
114
- "doc",
115
113
  "src/tasks/README.md",
116
114
  "src/util/README.md",
117
115
  "src/wba/README.md",
@@ -168,7 +166,7 @@
168
166
  "kysely-codegen": "^0.20.0",
169
167
  "kysely-ctl": "^0.21.0",
170
168
  "lucide-react": "^1.16.0",
171
- "next": "^15.5.21",
169
+ "next": "^16.0.0",
172
170
  "next-auth": "^4.24.15",
173
171
  "pg": "^8.21.0",
174
172
  "postcss": "^8.5.15",
@@ -219,7 +217,7 @@
219
217
  },
220
218
  "scripts": {
221
219
  "clean": "rm -rf dist tsconfig.tsbuildinfo",
222
- "build": "rm -rf dist tsconfig.tsbuildinfo && npx tsc -b && perl -pi -e 'print \"#!/usr/bin/env node\\n\" if $. == 1 && $_ ne \"#!/usr/bin/env node\\n\"' dist/m.js && mkdir -p dist/templates dist/blockchain && cp -R templates/* dist/templates/",
220
+ "build": "rm -rf dist tsconfig.tsbuildinfo && npx tsc -b && perl -pi -e 'print \"#!/usr/bin/env node\\n\" if $. == 1 && $_ ne \"#!/usr/bin/env node\\n\"' dist/m.js && mkdir -p dist/templates dist/blockchain && cp -R templates/* dist/templates/ && cp ../../CHANGELOG.md dist/CHANGELOG.md",
223
221
  "start": "node dist/m.js m:create",
224
222
  "test": "npx vitest run",
225
223
  "typecheck": "npx tsc -b --pretty false",