@@ -6,9 +6,12 @@ seguridad: cada vez que un test no encajaba con lo que esperaba, había
66que entender por qué — y a veces el "por qué" era un bug latente que
77nadie había disparado todavía.
88
9- Cinco cosas en total. Cuatro tienen fix concreto (la mayoría de 1-3
10- líneas). Una requiere una decisión tuya. Ninguna te bloquea hoy mismo;
11- todas las descubrió la suite haciendo su trabajo.
9+ Cinco cosas en total: ** cuatro bugs reales** (3 con fix incluido, 1 que
10+ requiere decisión tuya), y ** un falso positivo (F-02)** que reporté como
11+ bug pero al verificarlo en Terminal nativa no era. Ninguna te bloquea
12+ hoy mismo; las verdaderas las descubrió la suite haciendo su trabajo, y
13+ la falsa la descubrí yo metiendo la pata — ambas cosas están aquí
14+ documentadas porque la honestidad importa más que la apariencia.
1215
1316Cada finding tiene:
1417- ** Resumen en cristiano** — qué pasa, sin tecnicismos.
@@ -28,7 +31,7 @@ Cada finding tiene:
2831| ID | Severidad | Área | Estado | Fix |
2932| ----| -----------| ------| --------| -----|
3033| F-01 | Alta | Build (Watcom) | ✅ aplicado en commit ` fix(dat,build) ` | Sí, en este PR |
31- | F-02 | Media | Build (Node) | ✅ aplicado vía ` engines.node ` en ` package.json ` | Sí, en este PR |
34+ | F-02 | ~~ Media~~ ninguna | ~~ Build (Node)~~ | ❌ ** falso positivo ** — descartado | No aplica (mi error de diagnóstico) |
3235| F-03 | Media | Documentación | abierto | No — requiere decisión tuya |
3336| F-04 | Alta | Codegen DAT | ✅ aplicado en commit ` fix(dat,build) ` | Sí, en este PR |
3437| F-05 | Crítica | Codegen DAT | ✅ aplicado en commit ` fix(dat,build) ` | Sí, en este PR |
@@ -106,59 +109,73 @@ roto sin que nadie lo notara.
106109
107110---
108111
109- ## F-02 — Editor falla en arranque con Node 25 (Electron 33 incompat )
112+ ## F-02 — Falso positivo (descartado tras verificación en Terminal nativa )
110113
111- ** Severidad:** Media · ** Estado:** ✅ aplicado · ** Fix incluido :** Sí (en ` package.json ` de este PR)
114+ ** Severidad:** ninguna · ** Estado:** ❌ descartado · ** Fix:** no aplica
112115
113- ### Resumen en cristiano
116+ ### Honestidad primero: yo (Claude) me equivoqué
114117
115- ` npm run dev ` peta al arrancar Electron si tienes Node 25+ instalado.
116- Con Node 20-22 (LTS) funciona. ` npm run build ` sí compila siempre. La
117- solución es decirle a ` package.json ` qué versiones de Node aceptamos
118- para que ` npm install ` avise si la local no encaja .
118+ Reporté inicialmente que ` npm run dev ` rompía con
119+ ` TypeError: Cannot read properties of undefined (reading 'whenReady') `
120+ y propuse pinear ` engines.node ` como fix. Lo documenté como bug del
121+ proyecto y lo metí en este mismo PR .
119122
120- Tú probablemente estás en LTS y no lo has visto. El siguiente
121- contributor (o tú dentro de 6 meses con Node nuevo) sí lo verá.
123+ ** Estaba mal** . Marcos verificó en su Terminal nativa de macOS y
124+ ** el editor arranca sin problema, la app de Electron abre y se usa
125+ con normalidad** . El bug que yo veía es un falso positivo del entorno
126+ donde corro como Claude Code, no del repo.
122127
123- ### Reproducción
128+ ### Explicación técnica
124129
125- ```
126- $ node --version
127- v25.9.0
128- $ npm run dev
129- ...
130- TypeError: Cannot read properties of undefined (reading 'whenReady')
131- at out/main/index.js:208
132- ```
130+ Cuando ejecuto ` npm run dev ` desde mi tool Bash, este lanza el comando
131+ en un sub-shell (` sh -c ` / ` zsh -c ` no interactivo) que el sandbox de
132+ Claude Code envuelve para capturar stdout/stderr y aplicar permisos.
133+ ` electron-vite ` invoca a su vez el binario ` electron ` como sub-proceso,
134+ y dentro de ese proceso Electron carga ` out/main/index.js ` .
133135
134- ` npm run build ` sí compila. Solo el arranque del proceso Electron
135- (` whenReady ` ) explota. Conocido en Electron 33 con Node ≥ 23.
136+ Algo en esa cadena de wrapping (probablemente cómo el sandbox
137+ intercepta stdio o el environment de variables) hace que el módulo
138+ nativo ` electron ` no se inyecte correctamente en el contexto del
139+ script main. El bundle resuelve ` require('electron') ` a algo
140+ incompleto (` electron.app ` queda ` undefined ` ) y al ejecutar
141+ ` electron.app.whenReady() ` se cae.
136142
137- ### Impacto
143+ En tu Terminal nativa de macOS, el binario ` electron ` se invoca
144+ directamente sin esa capa de wrapping y el módulo se inyecta
145+ correctamente. Por eso el editor arranca como debe.
138146
139- Cualquier contributor con Node moderno no puede ejecutar el editor en dev
140- mode. La build de producción y el packaging sí funcionan.
147+ Es el mismo error que dispararía cualquier sandbox que intercepta
148+ stdio o reescriba ` argv0 ` (Docker mal configurado, Snap, ciertos
149+ launchers). Pero ** no es bug del proyecto** — es del entorno desde el
150+ que yo lanzo el comando.
141151
142- ### Fix
152+ ### Lo que dejamos en el PR a pesar de ser falso positivo
143153
144- ` package.json ` :
145- ``` json
146- "engines" : {
147- "node" : " >=22.0.0"
148- }
149- ```
154+ ` engines.node: ">=22.0.0" ` se queda en ` package.json ` , pero la
155+ justificación cambia:
156+
157+ - ❌ NO es fix de F-02 (no había bug que arreglar).
158+ - ✅ SÍ es saneamiento: Node 20 LTS terminó en abril 2026 (ya en
159+ mantenimiento, EOL septiembre 2026); Node 22 es LTS activa hasta
160+ abril 2027. Pin a ` >=22.0.0 ` ayuda a contributors a saber qué
161+ versiones se prueban en CI sin bloquear futuras LTS (24 cuando
162+ llegue).
163+
164+ ### Lección
150165
151- Node 22 es la LTS activa; Node 20 ya entró en mantenimiento en abril
152- 2026 y deja de tener soporte oficial en septiembre. Pin a ` >=22.0.0 `
153- sin límite superior para no bloquear actualizaciones futuras.
166+ La conclusión de "Electron 33 incompat con Node ≥ 23" la generé sin
167+ verificar fuera del sandbox. Carmack-style, debí probarlo en al
168+ menos dos entornos (Terminal nativa + sandbox) antes de declarar
169+ diagnóstico.
154170
155- ` npm install ` avisa si la versión local no encaja. Commit propuesto:
156- ` chore: pin node engine to LTS range ` .
171+ Para futuros bugs reportados por mí: ** si solo lo veo desde la tool
172+ Bash, no es un bug confirmado** . Hay que verificar en Terminal
173+ nativa o CI antes de incluirlo en findings.
157174
158175### Para ti, ahora mismo
159176
160- Cero urgencia si tu Node local está dentro del rango. Aplícalo cuando
161- toque para que el repo sea autodefensivo .
177+ Nada que hacer. El editor te arranca. Si te interesa, mantienes el
178+ pin Node como saneamiento; si te molesta, lo quitas y no pasa nada .
162179
163180---
164181
@@ -480,12 +497,12 @@ vez en DOSBox-X, y si todo funciona ya estás cubierto.
480497
481498## Plan de commits sugerido
482499
483- Estos hallazgos sugieren cinco commits separables. El orden recomendado:
500+ Estos hallazgos sugieren cuatro commits separables. El orden recomendado:
484501
4855021. **` fix (build): - O2 - > - ox in release flags` ** (F-01) — 1 línea, urgente.
4865032. **` fix (dat): sort chunks before writing index` ** (F-05) — 3 líneas, runtime crítico.
4875043. **` fix (dat): align serializeScript size- calc with writer` ** (F-04) — ~10 líneas.
488- 4. **` chore: pin node engine to LTS range ` ** (F-02) — 3 líneas .
505+ 4. **` chore: pin node engine to LTS ` ** (saneamiento, ya aplicado en este PR; **NO** es fix de F-02 — F-02 era falso positivo) .
4895065. **` feat: test suite + golden files + TDD harness` ** — el resto del trabajo.
490507
491508Como trabajas solo en ` main` sin PRs, puedes:
0 commit comments