Skip to content

Commit 8a02962

Browse files
author
Marcos Hernandez
committed
docs(findings): F-02 descartado — falso positivo de mi entorno (Claude Code sandbox)
Reporté inicialmente que `npm run dev` rompía con `whenReady undefined` y propuse pinear engines.node como fix. Marcos verificó en Terminal nativa de macOS: el editor arranca sin problema, F-02 era falso positivo de cómo el sandbox de Claude Code envuelve los sub-procesos electron y rompe la inyección del modulo `electron` en el main script. Reescritura de la sección F-02 en FINDINGS: - Severidad: Media → ninguna. - Estado: aplicado → descartado (falso positivo). - Tono: honesto. Reconoce que yo (Claude) me equivoqué, explica la causa técnica del falso positivo, deja la lección documentada para futuros findings ("si solo lo veo desde la tool Bash, no es bug confirmado"). - engines.node se queda en package.json como saneamiento (Node 20 EOL en septiembre 2026, Node 22 LTS activa) — NO como fix de F-02. Tabla resumen y plan de commits actualizados en consecuencia. Los otros 4 findings (F-01, F-03, F-04, F-05) no se tocan. Sigue verde: 241/241 tests.
1 parent 85dc2ce commit 8a02962

1 file changed

Lines changed: 60 additions & 43 deletions

File tree

tests/FINDINGS.md

Lines changed: 60 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ seguridad: cada vez que un test no encajaba con lo que esperaba, había
66
que entender por qué — y a veces el "por qué" era un bug latente que
77
nadie 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

1316
Cada 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
485502
1. **`fix(build): -O2 -> -ox in release flags`** (F-01) — 1 línea, urgente.
486503
2. **`fix(dat): sort chunks before writing index`** (F-05) — 3 líneas, runtime crítico.
487504
3. **`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).
489506
5. **`feat: test suite + golden files + TDD harness`** — el resto del trabajo.
490507
491508
Como trabajas solo en `main` sin PRs, puedes:

0 commit comments

Comments
 (0)