Pedido de Leo (28-oct, 18:00): Michelle comenta antes de mover y luego tenía que escribir lo mismo otra vez. El «¿por
qué?» lista tus últimos comentarios del pendiente; si comentaste después del último cambio de columna, ya viene elegido.
PATCH /api/tarea acepta _nota_de (el «cuando» de un comentario tuyo; 400 si no existe o es de otra persona): la entrada
guarda «ref», no repite el texto en el hilo y lleva un extracto para la Actividad. En el hilo, el comentario elegido lleva
«→ Hecho»; un porqué pegado igual que un comentario anterior también se ve una sola vez. «Comentar» revisa el texto al
hacer clic. Pruebas: tests-comentarios.sh (26) y las demás; caso de Michelle en el navegador. DESPLIEGUE A14; lote
2026-10-28_comentarios-elegir.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013SfRSvDd335NPYEbBrDFGE
Pedido de Leo (28-oct, 12:57 y 16:12). El detalle tiene «Comentarios» (hilo + caja; cualquiera con sesión comenta, aunque
no sea el campeón) y la tarjeta dice cuántos. Al mover pregunta «¿por qué?»: a Hecho (la evidencia, D-27-6), al reabrir
desde Hecho, a Bloqueado y de En curso a Por hacer; «Cancelar» o Esc la deja donde estaba. Vale para arrastrar, la franja,
las flechas, «Mover a…» y los botones del detalle. En el teléfono el detalle cabe en la pantalla.
Backend: _nota hasta 1000 caracteres y guardada aparte en historial[-1].nota. Pruebas: tests-comentarios.sh (16) +
1027 (55) + 1028 Compras (58) + 1023 (35) + campeón (25) + tests-actas-documentos.sh (15, antes tests-1028.sh, nombre que
pasó a Compras). Desplegado (DESPLIEGUE A13). Lote 2026-10-28_comentarios-pendientes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013SfRSvDd335NPYEbBrDFGE
Pedido del equipo de campo (Leo, 28-oct 12:10). Cada foto de un acta tiene «Tomar foto» (cámara) y «Elegir de la
galería»; sección «Documentos» al final de toda acta para el documento terminado. /api/archivos acepta PDF, Word,
Excel, ODT/ODS y PowerPoint revisando los primeros bytes; /api/adjunto con nosniff, descarga lo que no es foto, PDF
o texto. Pruebas: tests-1028.sh (15) + 1027 (55) + 1023 (35) + campeón (25). Desplegado: páginas con rsync y
backend con HUP a gunicorn (DESPLIEGUE A12). Lote 2026-10-28_actas-galeria-documentos.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013SfRSvDd335NPYEbBrDFGE
Pedido de Leo (27-oct): mover un pendiente a otra columna sin arrastrar y bajar a la vez,
cambiar la columna desde el detalle, y un solo campeón por pendiente que es quien lo mueve.
- backend/app.py: campo «campeon» (uno de los responsables; por omisión el primero).
PATCH /api/tarea y POST /api/tareas/orden solo cambian la columna o el campeón si quien
escribe es el campeón, un administrador o TAREAS_MUEVEN_SIEMPRE (claude, por los lotes).
GET /api/tareas trae campeon y mueven_siempre.
- kanban.js / tablero.css: avatar del campeón primero y con anillo; flechas ← → en la
tarjeta; franja fija arriba con las 4 columnas mientras se arrastra; botones de Columna
y selector de Campeón en el detalle; tarjetas de otros sin arrastre ni flechas.
- tablero.py y lotes/README.md: «campeon» se puede poner en un lote.
- tests-campeon.sh (25 pruebas); tests-1014.sh: el PATCH de bob ya no cambia la columna.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013SfRSvyewSyFLfK9mjbGL8
backend/cuentas.py: restablece en bloque (todos menos leo y claude) y da de alta
a varios desde backend/cuentas/2026-10-23_alta-sitios.json (jesush, miguel, joel,
antonio, danielg); la contraseña la pide en la terminal. Miembros con sitio,
correo y correo_alt; marca contrasena_inicial con aviso en el sitio hasta que la
persona la cambie. Los ids de responsable se recalculan con el equipo de hoy.
Lote 2026-10-23_usuarios-campo. Pruebas: tests-cuentas.sh (47).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X4CAujMuib2tDqt9JRg6X
Una pestaña por sitio (ICAVE, TIMSA, EIT, LCT, Querétaro): lo que hay, lo que va en camino
y lo que falta del kit para instalar. Movimientos con sitio, envío/recepción, origen «fuera».
Lote 2026-10-23_inventario-sitios.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X4CAujMuib2tDqt9JRg6X
- backend Flask (backend/): recibe formularios firmados, guarda JSON por
numero de serie en /srv/projects/drogheda/actas, indice CSV, GET /api/actas
+ systemd unit + README de instalacion (nginx /api proxy)
- formularios (docs/formularios/): acta.css/acta.js (motor con autoguardado
y envio), V5 fiel al procedimiento verificado, V4 borrador adaptado,
checklist de ensamble borrador; firma = nombre + conformidad
- docs/actas/index.md + guia-ensamble-qc.md; nav actualizada
- probado end-to-end (headless): envio + validacion + guardado por serie
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJ4eAB6zjQT49RVwpgfKdt