Session:17:38
(taller-ia — replicación de encuesta para curso de IA genérico)
Proyecto nuevo:taller-ia/ replicando
la arquitectura de emprende/ (PWA offline + encuesta
pública + worker Cloudflare) para un curso de inteligencia artificial
genérico.
Instrumento (2 modos): Profesional/Independiente
(18 preguntas) y Comercio/Negocio local (16 preguntas). Skip logic: si
responden "No por ahora" en interés → única pregunta "¿por qué no?" y
termina. Opciones exclusivas en multi (flag exclusive).
Contacto opt-in al final. Tagging temático con hints para
entrevistador.
Review Rule of 5 aplicada: 3 HIGH fixes (contacto
opt-in, opciones exclusivas en multi, ancla conductual de pago) + extras
(barrera para usar IA, "atraer más clientes" en temas, edad <18,
hints).
Deploy: KV namespace nuevo
(ENCUESTAS_TALLER), worker taller-ia-api,
Pages admin + encuesta. URLs: taller-ia-admin.pages.dev,
taller-ia-encuesta.pages.dev, worker en
sasha-hipervinculos.
Bug visual corregido: "Otro" duplicado en 5
preguntas (flag noOtro:true), TAG_LABELS vieja en encuesta
pública, emoji del header.
Genericización: removidas todas las referencias
user-facing a "Suipacha" y "Biblioteca Popular" — la encuesta ahora es
reutilizable en cualquier contexto.
Gotcha wrangler 4: los comandos
kv key get/put/delete/list en contexto no interactivo
operan sobre almacenamiento local (miniflare) a menos
que se pase --remote. Documentado en el whisper del
repo.
Next: probar la PWA en el celular (instalar como
app offline); diseñar ruta de comercios para el relevamiento; definir
fechas del taller cuando haya datos.
Contexto: de la sesión del 3/9 quedó pendiente el
review Rule of 5 de la config del stream
Review Rule of 5 (convergió en Stage 4): 2 CRITICAL
+ 4 HIGH + 6 MEDIUM + 3 LOW
CRITICAL: VM sin linger (timers user mueren al cerrar SSH —
verificado Linger=no); timeout borraba grabación parcial
(2h de audio válido a la basura)
HIGH: pkill -x mataba TODO ffmpeg (scopeado a URL); timer local
duplicado (deshabilitado, VM primaria); scripts en 2 máquinas sin sync
(just deploy-stream-vm); docs inexistentes
MEDIUM/LOW: scp sin timeout, validación de duración ≥90% en
.partial, date -d fallback, retención últimas 12, NTFY_URL
opcional, guard para timer deshabilitado
Todo aplicado en commit a34b3d2
(verificado con just check-stream-timer y
--vm)
VM Oracle: creada instancia gratis x86 (2 vCPU, 1GB
RAM, 95GB), Ubuntu 24.04, timezone -03, ffmpeg+rclone, alias SSH
oracle-stream, enable-linger (CRITICAL fix),
scripts deployados
Timer de prueba diario en VM:download-stream-test.timer 9:00-10:00 -03 →
~/grabaciones-test/ (para verificar sin esperar al jueves);
producción jueves 18:45 → ~/grabaciones/; smoke test 1m OK
(00:01:00 exactos)
Hooks lefthook nuevos: shellcheck
-S warning (glob scripts/ con negaciones para los bash sin
extensión) + typos global (_typos.toml: excluye prosa
española, identity-maps palabras es legítimas). Ya atrapó su primer
falso positivo (falso). Fix SC2207 en publish-episodio
(mapfile)
Clave SSH:~/Downloads/ssh-key-2026-09-07.key →
~/.ssh/id_oracle (pattern id_<host>),
config actualizado, NO va a dotfiles (privada)
Docs:docs/workflow-programa.org
reescrito (arquitectura VM→pull, setup VM completo, timer de prueba,
ubicación clave); AGENTS.md actualizado; whisper env.md actualizado
R2 de Cloudflare: descartado por ahora — scp
directo local↔︎VM alcanza; R2 queda como opción futura si se quiere
backup
Next: martes 8/9 9:00 → primera grabación de prueba
diaria (verificar con
ssh oracle-stream 'ls -la grabaciones-test/'); jueves 10/9
18:45 → primera grabación de producción en la VM (pull automático
20:30); cuando termine el período de prueba, desactivar el timer diario
de test EOF echo "log escrito"
Session:17:44
(uarup — WhatsApp downloader with Baileys)
Scaffoldeduarup repo: WhatsApp
conversation + attachment downloader via
@whiskeysockets/baileys v7 (QR/pairing login, history sync,
deep fetch, live capture, transcript/media export)
Rule of 5 review applied — 14 findings fixed
(CRITICAL hang on loggedOut, HIGH path traversal in media filenames,
export wired with live socket, env-overridable data dir, tests, timeout,
SIGINT handler, sanitization)
Config-driven periodic downloads
(uarup.toml + watch command): TOML config
loader, scoped history sync, on-demand deep fetch per chat, live window,
transcript export — designed for cron/systemd timers; docs include
cron+systemd examples
Login bug fixed:runLogin lost
session.ready during watch refactor — QR never appeared,
.auth/ stayed empty; also fixed 515 auto-reconnect + silent
Baileys logger
Episodio 04 publicado (Castillo/Schweblin): portada
nueva (resources/images/004.svg, candelabro de plata +
cuadrado 40 cm², paleta cobalto via new-cover.mjs),
image_alt descriptivo, typos de acentos
Portadas 001–03 rediseñadas: motivo de los cuentos
en la capa decoracion (casa entre 10 pinos + guirnalda;
abanico A♠ + sombrilla; disco de vinilo + pelota), autores con nombre
real en vez de tags, títulos partidos si desbordaban
Corrección de motivo: en 003 asumí boxeo por el
nombre — era disco + pelota (corregido en cc80ebc)
Bug fix build-index.mjs: hero del
homepage linkeaba a /episodios/undefined/ — nunca calculaba
el slug con slugify(); visible recién cuando
el 04 pasó a ser hero
Bug fix lefthook.yml: negaciones de
glob no excluían .mjs → shellcheck frenaba commits que
tocaban JS; filtro movido al cuerpo del comando
Iteración visual: loop
magick -density 96 x.svg /tmp/c.png + Read — atrapó título
tapado, sombrilla-que-parecía-sol, guantes fundidos con el badge
Follow-up: issue eq-dw9 — og:image es
SVG, los crawlers sociales no lo muestran (generar PNG en el build)
Todo pusheado:0322be1,
3ffaba4, cc80ebc — pre-push verde, deploy
automático a GH Pages
Next: en la próxima portada, decidir tema/paleta
con el contenido real del episodio antes de dibujar (evita rehacer
motivos como el de 003)
Evaluación de toolpath (empathic/toolpath,
path CLI 0.16.1): ingirió 1,076 sesiones (pi 855, claude
107, gemini 88, codex 26). Veredicto: buen futuro reemplazo de los 4
extractores del tracker (parsers frágiles → JSON con schema +
conformance matrix en CI), pero NO soporta Amp ni calcula costos ($
suscripciones + pricing siguen siendo del tracker), y pierde sesiones
pre-2026-01-28 y ~5% de sesiones pi. Enfoque híbrido decidido; full eval
en whisper notes.md
Bug hallado vía validación cruzada con toolpath:
extract_pi() ignoraba
cacheRead/cacheWrite y
extract_claude() no guardaba cache tokens en filas → v4.1
(commit 1138c32): cache_read/write en todas las agregaciones. Totales:
1.25B → 10.5B tokens (8.4x). Costos sin cambio real
Review rule-of-5 (0 CRITICAL, 3 HIGH corregidos,
commit fc7a0fc): per-tool breakdown del hourly incluye cache_read/write
(antes julio's 5.7B cache-read invisible en entry openrouter); dedup key
agrega project (recupera 14 filas Pi colisionando en mismo
segundo entre sesiones); cache_write facturado a 1.25x en estimate_cost;
metadata.token_accounting documenta semántica
Números actuales: 135,436 reqs · eff $3,800.84 ·
real 369.58(230 sub + $139.58 p-p-t) ·
9.19B cache-read · 144 días
Validación julio vs toolpath: ~5% diff, explicada por sesiones que
toolpath no ingiere
Follow-ups a inbox: congelar reporte para el post (cutoff avanza
solo); renombrar usage_report_v3.json → v4
Next: escribir Parte 1 del post con cifras v4.1
congeladas; opcional migrar extractores a
path p import