Imported from wandersepulveda2013/toolisto-web (
AGENTS.md). Install upstream withnpx skills add wandersepulveda2013/toolisto-web. Copyright stays with the author.
Apluno — Reglas permanentes para agentes autónomos
Identidad del producto
Apluno es un Workspace gratuito y local-first cuya promesa es:
"Convertir cualquier fotografía, archivo o documento desorganizado en un resultado editable, calculable, visual y profesional sin salir del proyecto".
Flujo estrella:
archivo → escaneo → OCR → documento → tabla → gráfico → informe → PDF
Restricciones de Phase 3C
- No añadir herramientas durante Phase 3C.
- No añadir módulos.
- No ampliar Flow, Query, ni Dashboards.
- No rediseñar la interfaz.
- No modificar las 144 rutas existentes.
- No crear botones decorativos.
- No regenerar
workspace/workspace.jsconscripts/build-workspace-js.mjs. - No usar mocks en el E2E principal.
- No eliminar pruebas fallidas.
- No bajar criterios para hacer pasar pruebas.
- No cambiar el texto esperado para ajustarlo al OCR incorrecto.
- No utilizar reintentos para ocultar inestabilidad.
- No aumentar timeouts globales.
- No declarar una fase terminada con pruebas fallidas.
- No describir una función parcial como completa.
- No instalar dependencias sin justificar necesidad, tamaño y carga.
- No introducir servicios de pago ni API keys.
- No duplicar imágenes grandes en IndexedDB.
- No almacenar URLs
blob:como referencias persistentes. - No usar emojis como iconos.
- No utilizar Times New Roman.
- Mantener la interfaz en español.
Git
Prohibido:
git push,git merge,git rebase,git reset,git clean- eliminación de ramas, force checkout, force push
- cualquier comando destructivo equivalente
Permitido:
git status,git diff,git log,git showgit add,git commit- creación de ramas de respaldo
Definición de terminado
Una tarea solo está completa cuando:
- La implementación existe.
- La interfaz realmente la utiliza.
- La persistencia funciona.
- Las pruebas relevantes pasan.
- Fue validada en navegador cuando corresponde.
- No hay errores de consola no controlados.
- La evidencia fue guardada.
- Las limitaciones están documentadas.
- Se creó un commit descriptivo.
- Se actualizó el roadmap.
Estado actual verificado
- Phase 3B: COMPLETA.
- Phase 3C: COMPLETA (fixture difícil medido honestamente; pipeline OCR mejora como TODO).
- E2E Star-Flow: 85/85.
- OCR Source Selection: 34/34.
- Phase 3A: 80/80.
- Phase 3B tests: 59/59.
- Phase 11: 106/106.
- Workspace structure: 157/157.
- Phase 3 integridad (3a/3b): 52/52.
- Phase 4a migraciones: 34/34.
- Phase 4b integridad referencial: 43/43.
- Phase 5 bundle trust (export/import): 49/49.
- Phase 6 prueba negativa de red: 51/51 (intercepta fetch/XHR/beacon/WebSocket; marcador secreto nunca sale por red; cero egress externo).
- CSV BOM E2E: 20/20.
- Engine idle release: 10/10.
- Workflow export MD: 30/30.
- Workflow UI: 65/65.
- Capture-flow-chain: 12/12.
- Dist workspace smoke: 28/28.
- Autosave lock: 18/18.
- Cross-entity integrity: 55/55.
- Review status persistence: 15/15.
- Persistence sequence cert: 48/48.
- Persistence adversarial audit: 66/66.
- Persistence lifecycle audit: 95/95.
- Storage failure injection: 52/52.
- Storage recovery lifecycle: 69/69.
- Storage multicontext migration: 86/86.
- Storage rejection & perf: 84/84.
- Multi-tab concurrency: 113/113.
- Stale-delete-lifecycle: 120/120.
- Runtime-isolation-review: 110/110.
- Cross-store integrity (CE-061): 77/77.
- Storage surface audit (CE-061): 79/79.
- ID collision & serialization (CE-061): 103/103.
- Release gate: 30/30 suites PASS.
- Performance regression: 548/548 PASS.
- Total: 2225 workspace + 548 performance = 2773 pass, 0 fail.
El modelo OCR spa.traineddata.gz se sirve localmente (vendor/tesseract/lang-data) para tiempos E2E estables.
La extracción doc-to-table reconstruye columnas por ancla numérica y normaliza el signo negativo del OCR: 15/15 celdas en el Star-Flow.
extractTextFromScan ya NO hace upscale ≥800px: degradaba imágenes ruidosas (74%→47% chars en el fixture difícil) y producía el artefacto 1-30 en el limpio. Fixture limpio verificado al 100% chars / 100% words en el E2E integrado.
Desde 2026-08-03 el OCR usa OEM 3 (DEFAULT: LSTM + legacy, Tesseract elige el mejor por bloque) en vendor/js/engine-loader.js: mejora el fixture difícil a 76% chars / 43% words (desde 74%/39%) SIN degradar el limpio (sigue 100/100). La mejora de preprocesado para el difícil queda como límite documentado (el texto efectivo es ~8px con ruido determinista; ninguna binarización/upscale probado supera a la vía cruda con OEM 3).
Sistema autónomo (OpenCode — Evolución Continua)
El sistema corre en Evolución Continua (etapa Production Readiness cerrada al aparecer
workspace/PRODUCTION_READINESS_DONE). El runner NO se detiene por backlog vacío ni por DONE:
al crearse DONE transiciona solo a CONTINUOUS_EVOLUTION y sigue. Solo un humano lo detiene
(AUTONOMOUS_STOP), o un límite de ciclos explícito, o un fallo grave de su propia infraestructura.
Archivos canónicos:
workspace/AUTONOMOUS-CONTEXT.md— dispatcher de modo (PR vs CE).workspace/CONTINUOUS-EVOLUTION-MISSION.md/-STATUS.md/-QUEUE.md— misión permanente, memoria persistente y backlog (TODO/ACTIVE/BLOCKED/DONE/DISCOVERED/DEFERRED; P0>P1>P2>P3).workspace/PRODUCTION-READINESS-MISSION.md/-STATUS.md/-QUEUE.md— etapa previa (PR).RUN-OPENCODE-AUTONOMOUS.ps1— runner v2 (default-MaxCycles 20finito;-Unlimited/0= sin límite, backoff 1/5/15/30 min, métricas por ciclo, transición PR→CE,-TestCycles, logs enartifacts/autonomous-logs/y estado por run enartifacts/autonomous-runs/workspace-runner-state.json).workspace/WORKSPACE-AUTONOMOUS-RUNNER.md— estado verificado del runner y validación controlada (2-CYCLE TEST).STATUS-OPENCODE-AUTONOMOUS.ps1/STOP-OPENCODE-AUTONOMOUS.ps1— estado (modo, uptime, productividad, regla de salud) y parada suave.WATCHDOG-OPENCODE-AUTONOMOUS.ps1/INSTALL-OPENCODE-AUTO-START.ps1— vigilancia de ciclos colgados y arranque automático opcional al iniciar sesión.workspace/OPENCODE-AUTONOMOUS-GUIDE.md— guía de uso.
Reglas del orquestador: un ciclo = una tarea atómica; sesión nueva de OpenCode por ciclo; memoria
solo en repo (MISSION/STATUS/QUEUE/git/evidencias); resultado mínimo por ciclo
(FEATURE/BUG_FIX/PERFORMANCE_IMPROVEMENT/UX_IMPROVEMENT/ARCHITECTURE_IMPROVEMENT/SECURITY_FIX/
MEANINGFUL_TEST_COVERAGE/DOCUMENTED_BLOCKER), anti-ciclo-vacío, anti-churn de evidencia y flake
limitado a ~3 intentos (BLOCKED_FLAKY). El antiguo workspace/AUTONOMOUS_DONE.md NO detiene nada.
Anti-bucle (obligatorio para todos los ciclos)
- Tarea ACTIVE estancada: si una tarea lleva >= 2 ciclos ACTIVE sin cambio de HEAD y conserva el mismo fallo reproducible, el siguiente ciclo entra en modo RECOVERY de esa tarea: cambia de estrategia de diagnóstico, demuestra la causa raíz (navegador real cuando corresponda) y la cierra o degrada con plan concreto. Un ciclo con HEAD sin cambio y el mismo fallo NO cuenta como progreso.
- Cambio de técnica: si una técnica falla o rechaza permisos en un ciclo, el siguiente usa otra; no reintentar la misma ruta esperando otro resultado.
- Scripts de diagnóstico: exclusivamente en
_toolisto_autopilot/tmp/dentro del repositorio. PROHIBIDO%TEMP%,AppData\Local\Tempyexternal_directorypara debugging. - PowerShell en Windows: solo comandos disponibles (Get-Content, Select-String, Select-Object,
Get-ChildItem, Where-Object, Measure-Object); PROHIBIDO
rg/head/tail/grep/sed/awk.
Puerto del servidor
El servidor E2E usa E2E_PORT (por defecto 8082). Las suites Node usan puerto 8081.
Evidencia determinista
Toda evidencia TLT-*.json escrita por un gate debe pasar por tests/evidence-helper.mjs
(writeEvidence): sin timestamps absolutos, sin puertos efímeros de loopback y con claves
ordenadas de forma estable. Regenerar una evidencia debe producir diff cero;
tests/evidence-determinism.mjs protege esta regla dentro de node tests/run-all.mjs.