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