Evidencia de Koru 0.2.0-dev
Resultados obtenidos el 2026-10-13. Los archivos son salidas reales; no fixtures que simulen ejecución Android. Herramientas oficiales solo se usan en QA, fuera del build normal.
Este informe conserva las mediciones y salidas capturadas antes del cambio a
Cobra. Después se añadió Cobra exclusivamente al CLI; la suite actual go test ./..., go vet ./... y go test -race -count=1 ./... volvió a pasar. Los
porcentajes de cobertura y snapshots CLI de abajo no incluyen ese cambio.
En esta página
Compilador y toolchain
- 114 casos/subcasos Go aprobados en 16 paquetes: go-tests.jsonl.
- Cobertura medida: 74.2% global, incluyendo CLI/validadores nuevos: coverage.txt.
- El lector de string pools limita coste decodificado a 64 MiB, contabilizando cada referencia y unidades UTF-16; evita amplificación por offsets compartidos. La prueba adversarial y el APK byte a byte inalterado están registrados.
- go vet y go test -race: sin errores, vet.txt y race.txt.
- Node: 2 pruebas del protocolo aprobadas, js-tests.txt.
- JNI C: referencias y attach/detach comprobados con tabla controlada, native-unit.txt.
- Fuzz AXML/ARSC/firma: sin fallos en campañas registradas. Se conserva también la campaña XML inicial de solo 12 ejecuciones; estas campañas cortas no representan exploración exhaustiva. Ver fuzz-*.txt.
- dexdump, aapt y apksigner oficiales aceptan salida propia: official-tests.txt.
- Binario Linux estático CGO=0, trimpath y buildvcs=false para reproducirlo desde una entrega sin metadata Git. Build con PATH vacío y APK byte a byte idéntico: offline-isolated.txt. El build no descarga herramientas ni lanza subprocesses.
- Compilación cruzada, sin ejecución en otros hosts: host-portability.txt.
Android real
Emulador oficial, Android 11/API 30, x86_64, imagen default r11. Ejecución software sin KVM. Se instalaron y arrancaron APKs generados por Go, y se actualizaron con la misma identidad. El certificado de las muestras es bfee8015a6fbf4e44d5ac5f01d59470a08e33ea3534b5da1e3cbe82da6f719f5. La clave privada no se distribuye.
- android-smoke.json: origen HTTPS local, HTML/JS/CSS/SVG, módulo ES, errores estructurados, dispositivo/app/storage/vibración/notificación y native.info JNI en el hilo principal. Red Wi-Fi y datos desactivados, sin permiso INTERNET.
- android-back.json: navegación a second.html, Atrás a index.html y almacenamiento después de reinicio. WebView reemplaza el target DevTools al restaurar historial; la prueba se reconecta. Los logs back-diagnosis son fallos anteriores corregidos.
- android-worker.json: service worker registrado y respuesta local offline.
- android-keyboard.json: entrada real KoruKeyboard, IME visible y cierre con Atrás. La prueba se reconecta también cuando WebView reemplaza el inspector al redimensionar.
- android-share.json: chooser nativo mostrado y cancelado, sin enviar a destinatarios.
- external-navigation-result.json: navegación a un origen externo bloqueada.
- demo-install/demo-launch: APK release portable instalado y Activity iniciada. demo-release-screen.png muestra CSS, SVG, JavaScript y Contador: 1 tras toque real.
- wifi-state/mobile-state: ambos 0 en la prueba final.
- storage-after-restart.json: valor conservado después de force-stop/nuevo arranque.
- update-* registra instalación de versionCode 3 y conservación de datos con la misma firma.
Los logs iniciales contienen fallos de desarrollo corregidos y diálogos de System UI durante el arranque del emulador. Las capturas first/controlled/all son evidencia histórica; la captura demo-release-screen corresponde a la entrega final.
Medidas reproducibles
benchmarks.txt (Linux amd64, AMD EPYC 9V74; resultado puntual):
| Operación | Tiempo | Bytes/op | Allocations/op |
|---|---|---|---|
| DEX mínimo | 6.414 µs | 3,926 | 70 |
| Activity experimental mínima | 239.823 µs | 98,662 | 1,422 |
| Build APK con caché | 11.602 ms | 13,266,993 | 6,266 |
El benchmark Activity mide el experimento inicial, no todo el runtime con plugins. El APK release portable ocupa 22,852 bytes en esta muestra. El APK debug con JNI x86_64 tiene otro tamaño y no es una medición equivalente. bridgeMillis es una latencia puntual en emulación software, no una comparación de rendimiento.
Límites de la evidencia
La matriz ejecutada solo cubre API 30/x86_64. Faltan pruebas en hardware ARM, otros API y fabricantes, y del diálogo POST_NOTIFICATIONS de API 33+. El APK portable no incluye bibliotecas nativas y no impone una ABI, pero eso no equivale a haberlo probado en todas las arquitecturas. No se ha comparado con Capacitor.
No implementados: firmas v3/v4, AAB, alarmas programadas, multidex, anotaciones DEX generales y análisis completo de tipos por registro. Los seis plugins iniciales usan framework/DEX; JNI es opcional y su prebuilt incluido solo es x86_64.