2026-08-07 — marvelousdb: modo VS Battle (dominio publico vs comercial)
Contexto: el usuario pidio “enfrentar a los de public domain vs los comerciales como un boton”. Se implemento un modo batalla entre los dos datasets.
Decisiones
- Carga multi-dataset:
DATA_DIRacepta lista separada por:(ej.data/pdsh:data). Cada dataset se distingue porwiki.universe(“Public Domain” vs “Marvel Universe”). Ambos se indexan en el mismo Map. El default en.envahora esdata/pdsh:data. - Heuristica de poder (
/api/battle): escanea powers/abilities/bio con 20 patrones de poder (vuelo, telepatia, magia, super fuerza, invulnerabilidad, velocidad, energia, poder cosmico, viaje en el tiempo, dimensiones, deidad, inmortalidad, regeneracion, teleportacion, intangibilidad, metamorfosis, control de clima, piro/criokinesis, super inteligencia). Score = 1 + poderes- 30% de “suerte”. Sin sesgo por universo.
- UI: ruta
/vscon dos luchadores lado a lado (imagen grande, universo, debut, poderes como chips, power level), “VS” al centro, ganador destacado con borde rojo brillante, boton “Rematch”. Link “VS Battle” en el nav. CSS anadido al final depublic/css/main.css(flexbox, coherencia con el rojo be0606 del diseno de 2014). - Endpoint parametrizable:
?universeA=X&universeB=Y; 404 si un universo no tiene personajes (mensaje claro).
Bugs encontrados y corregidos
- La reescritura de carga multi-dataset perdio el subdirectorio
characters//comics/(leia el dir raiz → 0 personajes). Corregido.
Verificacion
- 15 tests verdes (incluye
battle: public domain vs marvel). /vsrenderiza: ejemplo Horned Hood (PD, godhood, 3) vs Excalibur (Marvel, flight+magic+dimensional travel+godhood, 5).- Todas las rutas 200 con
DATA_DIR=data/pdsh:data.
Pendientes
- Animar la batalla (estado “fighting” antes de revelar el ganador) — el usuario puede quererlo como siguiente paso.
- Selectores de universo por cada lado en /vs (hoy son defaults via query).