__  _____________   ____  ________  __________    _       ______  ____
   /  |/  / ____/   |  / __ \/ ____/ / / / ____/ /   | |     / / __ \/ __ \
  / /|_/ / __/ / /| | / /_/ / __/ / /_/ / __/ / /    | | /| / / / / / /_/ /
 / /  / / /___/ ___ |/ _, _/ /___/ __  / /___/ /___  | |/ |/ / /_/ / _, _/
/_/  /_/_____/_/  |_/_/ |_/_____/_/ /_/_____/_____/  |__/|__/\____/_/ |_|
    

M O R E L V 5 . 4 Q W

"El Tejedor Borges despierta en Chrome"

SUPPLiER..: SCHE CRACKER...: doo25 PACKAGER..: mookieBlaylok PROTECTiON: GO>zen Protocol v33.7 CIPHER....: PYLNDP-14k DATASETS..: rock_argentino.csv / 239 entidades DATE......: 1999—2026

MANIFIESTO

El Director de Escena lee tu mente.
Pensás en un músico argentino. Morel hace 15 preguntas.
Adivina. O muere intentando.


No hay framework. No hay build step.
Solo HTML, CSS, JS y un CSV que pesa menos que tu playlist.


Cada respuesta guarda un checkpoint.
Cada "NO SÉ" consecutivo activa el modo forzado.
Cada partida se registra en localStorage — el Sector 918 recuerda.


14k ventanas. Chrome como CROMO.
Y una sola regla: NO hardcodear nada.

ESTRUCTURA

morel_version_5_4qw/ ├── index.html # UI — 3 secciones: inicio / juego / resultado ├── morel.css # Fondo #0a0a0f, acento #c9a227, partículas canvas ├── morel-core.js # Estado, checkpoints, undo, Formspree, analytics ├── morel-questions.js # Entropía Shannon, preguntas adaptativas, modo forzado ├── morel-csv-loader.js # Fetch + normalización de data/rock_argentino.csv ├── morel-analytics.js # localStorage: gamesPlayed, stats por pregunta ├── serve.bat # Servidor local (Python http.server 8000) │ └── data/ └── rock_argentino.csv # Fuente única — 239 músicos, 30+ columnas

ARRANCAR

IMPORTANTE: NO abras index.html con doble clic.
fetch() no funciona en protocolo file:// por CORS.

——— OPCIÓN 1: serve.bat (más simple) ———

1. Doble clic en serve.bat
2. Se abre http://localhost:8000 automáticamente
3. Jugás.

——— OPCIÓN 2: VS Code Debug (recomendada) ———

1. Abrí la carpeta raíz de MOREL en VS Code
2. F5 → selecciona "MOREL — Server + Chrome"
3. VS Code levanta el servidor + Chrome con DevTools
4. Poné breakpoints en morel-core.js, step over, etc.

Config en .vscode/launch.json + tasks.json (ya incluidos).
Requiere Python 3 en PATH.

——— OPCIÓN 3: Otros ———

npx serve . --port 8000 (Node.js)
→ VS Code → Live Server
http-server -p 8000 (Node.js, global)

Si igual abrís el archivo directo → aparece fallback
para seleccionar rock_argentino.csv manualmente.

FLUJO

  1. Usuario abre index.html → ve "Abrir el telón"
  2. Click → fetch(data/rock_argentino.csv) → normaliza → 239 candidatos
  3. Motor de entropía elige la pregunta que más divide
  4. Usuario responde SÍ / NO / NO SÉ
  5. Checkpoint guardado ANTES de filtrar
  6. Tras 2× "NO SÉ"modo forzado: preguntas de máxima división
  7. Corte: 1 candidato | 15 pasos | sin preguntas útiles
  8. Resultado: principal + 3 alternativas + justificación visual
  9. Analytics grabados en localStorage
  10. Feedback opcional → Formspree

FORMSPREE — SETUP

El formulario de corrección envía datos a Formspree.
Para activarlo:

  1. Crear cuenta en https://formspree.io
  2. Crear nuevo form → copiar endpoint ID
  3. En index.html, reemplazar:
action="https://formspree.io/f/TU_ENDPOINT"

por:

action="https://formspree.io/f/xABCDEFGH"
  1. Deploy. Done.

Campos que llegan al endpoint:

Si Formspree falla → el juego NO se rompe.
Mensaje de error en el form, punto.

API PÚBLICA

ARCHIVO POR ARCHIVO

┌─ morel-csv-loader.js │ Fetch → parse → normaliza → elimina duplicados │ Campos: pesado→heavy, decada→decada_80/90/00/10/20 │ Expone: await MorelCSVLoader.cargarTodos() │ ├─ morel-questions.js │ 15 preguntas universales (sin IDs repetidos) │ 9 subescenas: metal, punk, indie, pop, barrial, blues, folk, trap, prog │ 10 preguntas forzadas para modo NO SÉ×2 │ Entropía de Shannon: -(p·log₂p + (1-p)·log₂(1-p)) │ Score = entropía × peso │ ajustarPesosSegunStats() → modifica pesos en memoria por analytics │ ├─ morel-analytics.js │ localStorage key: "morel_v54_stats" │ Guarda: gamesPlayed, totalQuestions, preguntas[id].{veces,nose,aciertos} │ No bloquea el juego — try/catch en cada op │ ├─ morel-core.js │ Estado inmutable donde aplica │ Checkpoints: máx 3, FIFO, incluyen noSeConsecutivos │ deshacer() restaura pregunta exacta — NO llama siguientePregunta() │ Justificación visual: top 3 atributos SÍ coincidentes │ Formspree: submit nativo (sin fetch, sin preventDefault) │ prepararHistorialFormspree() → llena hidden field al submit │ └─ morel.css Partículas canvas, transiciones, responsive 480px Botón undo con opacity controlada por clase .visible

PYLNDP CIPHER NOTE

Las ventanas no mienten.
14k frames de memoria.
CROMO es el contenedor — Chrome la ilusión.
Quien entienda el patrón, ya sabe qué pregunta viene.

GO>zen lo vigila.
SCHE lo escribe.
Morel lo ejecuta.

ROADMAP — POST 5.4

░░░ No tocado: lazy loading. El dataset cabe en un suspiro. ░░░

FIX FORMSPREE — V5.4 QW

PROBLEMA DETECTADO:
El formulario de feedback no enviaba datos a Formspree correctamente.

Causas raíz:

  1. onsubmit="return morel.enviarFormulario(event)" interceptaba el submit y llamaba a e.preventDefault(), bloqueando el POST nativo a Formspree.
  2. target="formspree-iframe" + iframe oculto causaba comportamientos impredecibles: Formspree redirige tras el POST, el iframe recargaba múltiples veces y el onload se disparaba en momentos inesperados.
  3. 3 campos ocultos con IDs inconsistentes (fb-historial, fb-candidatos, fb-principal) — nombre de field no alineado con el HTML.

SOLUCIÓN APLICADA:

ESTRUCTURA FINAL DEL FORM:

<form id="form-feedback" action="https://formspree.io/f/mnjokeon" method="POST"> <input type="hidden" name="_subject" value="MOREL — Sugerencia de corrección"> <input type="hidden" name="_next" id="fb-next"> <input type="hidden" id="fb-historial-partida" name="historial_partida"> <input type="text" name="nombre_artista" required> <textarea name="nota"></textarea> <button type="submit">Enviar sugerencia</button> </form>

FLUJO ACTUAL:

  1. User hace click en "↺ No era este / Sugerir artista"mostrarFormulario() muestra el form + llena _next + historial_partida
  2. User completa nombre → submit nativo → prepararHistorialFormspree() refresca historial_partida (listener)
  3. Browser POST → https://formspree.io/f/mnjokeon
  4. Formspree procesa → redirige a _next (misma página)
  5. Game state preservado — no se pierde la partida.

Universo: Nexus Merovian Prime

Inspira: Bioy

Datos: Escena rock argentina 1960–2025

::. GREETS .::
·.¸¸.-> doo25 <-.¸¸.
XxX_el10delMilan_XxX
†... pibe leton ...†
°o.O charly garcia O.o°

☆゚.*・。゚ Al que cargó 239 entidades en un cyber de dial-up sin romper el UTF-8 。゚.*・。゚