Repository navigation
fix: piezas de la fase 1 en su celda, imagen del USB-C, colaboración y licencia MIT - #6
Merged
Merged
Conversation
… el arnes La verificacion independiente del candidato de los carteles (V1-V5 MET, sin bloqueantes) cazo dos inexactitudes en la explicacion del arreglo y una en un comentario de codigo, y propuso tres comprobaciones que las dejan fijadas: - «la banda empezaba a 0,35 u del centro» es el ALCANCE del vecino (su wrongRadius), no el primer punto que resta: el fallo se cuenta pasado snapRadius (0,6 u), porque antes la pieza coloca. Lo que pasaba de verdad con las filas a 0,95 u es que CUALQUIER tiro de mas de 0,6 u caia dentro de la banda del vecino y se imputaba a el. - «fallar de largo solo deja la pieza sin colocar, sin coste» se pasaba: con el reparto nuevo (columna 1,50 u, fila 1,75 u) el vecino no entra hasta los 0,90 u, asi que el margen sin coste pasa de 0,6 u a 0,9 u, no a infinito. - En el comentario de components.ts, 31 px es el hueco de la misma fila (el peor) y 55 px el de la misma columna, no al reves. Arnes (seccion 19): tres comprobaciones nuevas sobre los datos -que soltar sobre la propia tarjeta coloca siempre (medio lado 0,50 u < snapRadius 0,60 u), que el vecino solo cuenta pasado snapRadius (0,90 u > 0,60 u) y que el tiro de 0,7 u de esta misma seccion no llega a su banda-. Falsadas con las filas a 0,95 u, donde fallan las seis de la seccion. No se reescribe el commit ya publicado 6d5ace4: la correccion va en este. Verificado: tsc -b en 0, lint sin avisos y las secciones 17, 18 y 19 en verde.
La fase 1 tiene una pieza por cada tipo de conector de la placa, así que su número cambia con la placa: 18 con ocho tipos y 19 en la 03, que trae uno más (vga además de dvi). La rejilla estaba fija en 6 columnas x 3 filas = 18 celdas y los carteles se repartían en `ceil(n / 6)` filas, así que con 19 piezas el reparto se rompía por dos sitios a la vez: - la pieza 19 repetía la celda de la 15 (`floor(18 / 3)` se recortaba a la última columna): medido con 200 barajados, la separación mínima entre dos piezas caía a 0,035 u (y en la misma columna visual, 0 u); - los carteles pasaban a 4 filas de 1,75 u y la de atrás caía en z = -6,2 con la mesa acabando en -4,9: cuatro carteles flotando fuera de la mesa, en pantalla a y = 111 px cuando el borde lejano de la mesa está en 154. Entre esos cuatro caían, según el barajado, los tres jacks de audio, que es lo que se reportó. Ahora `gridCols` calcula las columnas que hacen falta para las celdas que hay, hasta el suelo de separación (0,9 u entre piezas: huella 0,75 + aire; 1,5 u entre carteles: snapRadius + wrongRadius) y avisa por consola si ni así caben, en vez de dejar dos piezas compartiendo sitio en silencio. Las filas y sus separaciones no cambian, así que con 18 piezas el reparto sale idéntico al de antes (columnas ±4 a 1,6 u y carteles ±3,75 a 1,5 u) y con 19 pasa a 7 columnas sin salirse de ±4 ni de la mesa. Verificado: tsc -b y lint sin errores; `traySeparation` e `identifyCards` en las placas 01 y 03 (en rojo con la rejilla fija: cuatro comprobaciones fallidas en la 03; en verde después) y la pasada completa del arnés.
Las cuatro piezas que dibuja el código (los tres jacks y el USB-C, las únicas sin PNG ni .glb) no aparecían en la mesa: ni en su celda ni en ningún sitio. Medido preguntándole al lienzo pieza por pieza (pointermove sintético sobre el canvas y lectura de `document.body.style.cursor`, que `TrayItem` pone en `grab`): 0 puntos de geometría en las cuatro y todas las demás correctas. La causa está en `Align`, el ajuste de las piezas procedurales: centraba la pieza midiendo su caja envolvente con `Box3.setFromObject`, que mide en coordenadas de MUNDO, así que el centrado incluía la propia colocación de la pieza en la mesa y la dejaba en el origen del mundo: el centro de la mesa. De ahí el síntoma entero que reportó el alumnado —las cuatro apiladas en el centro (parecían desaparecer, y su cartel con el nombre sí salía, así que daba la impresión de estar fuera de la mesa)— y, al coger una con el ratón, el fantasma del arrastre saliendo en el centro de la mesa en vez de bajo el cursor. `localBox` mide cada malla multiplicada por su matriz relativa al grupo (mundo -> grupo), que es lo que ignora a los padres, y `Align` la usa. Los .glb se ajustan dentro de `GltfModel` y los conectores con imagen son un plano que no se alinea: por eso solo se veía en las procedurales y ninguna prueba lo cogía —el arnés colocaba con la lista y con los marcadores `.mount-center`—. Verificado: ROJO/VERDE con la sección 20 del arnés, que barre las 18 y las 19 piezas de la fase 1 en las placas 01 y 03. Sin el arreglo falla nombrando las cuatro piezas procedurales; con él, todas en su celda. tsc -b, lint y la pasada completa del arnés, en verde.
…s rojos
Cuatro cosas del arnés, todas de esta rama:
- `traySeparation` e `identifyCards` corren ahora en `motherboard-01` y
`motherboard-03` (la única con 19 piezas) y sus comprobaciones llevan la placa en
la etiqueta: el reparto de la fase 1 depende del número de piezas, así que medir
una sola placa no lo cubría.
- Sección nueva (20, `identifyDrawn`): le pregunta al lienzo por la geometría de
cada pieza de la fase 1 y falla si alguna no está donde dice su dato. Usa
pointermove sintéticos sobre el canvas —el mismo evento que escucha R3F, y que no
pasa por los paneles, que son DOM por encima— y nueve muestras por celda, así que
barre las 19 piezas en un par de segundos. Era el único camino que no cubría
ninguna sección: ninguna prueba cogía con el ratón una pieza procedural.
- El socket de HMR de Vite ya no cuenta como error de página: en una pasada larga el
servidor rechazó una reconexión y la sección del examen salió en rojo con todos
sus checks funcionales en verde (esa misma sección sola: TODO OK). Si el servidor
se cae de verdad, las secciones fallan por sus propios checks y el preflight
`requireServer()` avisa antes de empezar.
- El cartel de fase se ESPERA (`waitForSelector('.stage-banner')`) en vez de
mirarlo tras un tiempo fijo: dura 3,6 s y con la máquina cargada se llegaba tarde
a la lectura (falso negativo medido en una pasada de 18 minutos).
Verificado: la sección 20 en rojo sin el arreglo del `Align` (falla nombrando las
cuatro piezas procedurales) y en verde con él; `stageBanner` y `examDrag` en
aislamiento, TODO OK; y la pasada completa.
El cable USB-C (el señuelo de la fase 2) era el único conector sin imagen y se dibujaba con la forma procedural, que es además la que destapó el defecto del `Align` del commit anterior. Se añade `src/assets/connectors/usb-c.png`: la foto de Santeri Viinamäki en Wikimedia Commons, girada para que la clavija apunte hacia abajo como en el resto de imágenes y con el fondo quitado (PNG con transparencia, 398x600, 188 KB). El fondo se detectó por crecimiento de región desde el borde, parando en el brillo del cuerpo, en el croma y en el gradiente suavizado del contorno, y luego se limpiaron islas y agujeros y se desvaneció 1 px el alfa. Es la primera imagen del proyecto con licencia BY-SA, así que queda citada con autor, fuente, licencia y los cambios en `CREDITS.md` y en `src/data/credits.ts` (que se mantienen en paralelo), y con una nota en el README de la carpeta: el archivo se queda bajo CC BY-SA 4.0 y hay que seguir citando autor y fuente. Verificado: la sección 20 del arnés confirma que el USB-C ya no es procedural (quedan los tres jacks) y que sigue dibujado en su celda; tsc -b, lint y la pasada completa, en verde.
Tres cosas de la portada, de la licencia y del registro de decisiones: - El README lleva el enlace al repositorio, el sello «Built with Gentle-AI» (el enlace y la imagen que pide el proyecto) y una sección «Cómo colaborar» con el flujo que se pidió: nunca trabajar sobre `main`, cada cambio en su rama (`feat/…`, `fix/…`, `docs/…`) y una propuesta de cambio (PR) hacia `main` para que la revise el responsable, desde un fork si no hay permiso de escritura. Los tres enlaces responden 200. - El proyecto no tenía licencia: se añade `LICENSE` con MIT —usar, copiar y modificar citando el original—, declarada en `package.json` y explicada en el README y en la cabecera de `CREDITS.md`. Cubre el CÓDIGO: los modelos 3D y las imágenes de terceros mantienen su licencia (CC BY, y CC BY-SA 4.0 la foto del USB-C), que es lo que evita que la MIT se lea como una relicencia de todo. - `AGENTS.md`: la tabla de decisiones recoge las cinco decisiones de esta rama (61 a 65), la colaboración externa en la sección de git y el filtro del socket de HMR en la de verificación. Verificado: `npm run build` (1,47 s), `npm run lint` y la pasada completa del arnés en verde.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué cambia
Arregla el defecto de la fase 1 que reportó el alumnado (dos causas distintas) y añade las tres cosas que se pidieron después: la imagen del USB-C con su crédito, la guía de colaboración y la licencia.
1. Las piezas de la fase 1 no se dibujaban donde toca
.glb) no aparecían:Aligncentraba cada pieza midiendo su caja envolvente en coordenadas de mundo, así que el centrado incluía su colocación en la mesa y la dejaba en el origen del mundo —el centro de la mesa—. Eso explica las dos frases del reporte: «el cable sale en el centro de la mesa» y «el resto desaparecen» (las cuatro acababan apiladas ahí, y su cartel con el nombre sí salía).motherboard-03, una de cada tres partidas por placa aleatoria): una fila entera de carteles caía fuera de la mesa (z = −6,2 con la mesa acabando en −4,9) y dos piezas compartían celda (medido: separación mínima 0,035 u). Ahora las columnas se derivan del número de piezas y avisan por consola si algún día no cupieran.2. Añadidos
src/assets/connectors/usb-c.png) con su crédito completo: foto de Santeri Viinamäki (Wikimedia Commons, CC BY-SA 4.0), recortada, girada y con el fondo quitado. Citada enCREDITS.mdysrc/data/credits.ts.main).LICENSE), declarada enpackage.json: cubre el código; los modelos 3D y las imágenes de terceros mantienen su licencia.Verificación
npx tsc -bynpm run lint: sin errores ni avisos.node tests/run.mjs: TODO OK en la pasada completa (15 min, todas las secciones).identifyDrawn) —cada pieza de la fase 1 tiene geometría en la celda que dice su dato, en las placas 01 y 03— y el reparto de la fase 1 se mide en las dos placas en las secciones 11 y 19. Además, dos falsos rojos que aparecían en pasadas largas (el socket de HMR de Vite y una carrera con el cartel de fase, que dura 3,6 s) quedan filtrados/esperados.R1-console-error-filter(risk,tests/run.mjs:180),R1-license-metadata-scope(risk,package.json:6),R2-001(readability,src/three/ComponentModel.tsx:26-40),R2-002/R2-003(readability,src/data/components.ts:69,92),R2-004(readability,src/data/stages.ts:42-48) yR3-001(reliability,tests/run.mjs:180-182).Notas para la revisión
main, como pide la guía de colaboración del README; si prefieres el flujo dedevelop, se cambia la base del PR con un clic.jmoredev.github.io/PC-Simulator), porque publica en cada push amain.developy aún no enmain(e1b6512, corrección de documentación del arnés): son 6 commits en total.