Compare commits

..
17 Commits
Author SHA1 Message Date
patternn db8a621cda r22 doc: identidad de deploy + ciclos por pieza + prueba mudo
ci / lint-test (pull_request) Successful in 6s
isolation-test / probe (pull_request) Successful in 9s
2026-11-02 18:22:14 +00:00
ci-bot 509db558bd Merge pull request 'r21 doc: politica de DMs + limpieza gtag/AdSense + fixes' (#48) from r21-doc into main
ci / lint-test (push) Successful in 1s
2026-11-02 17:55:00 +00:00
patternn 42c62491fb r21 doc: politica de DMs, gtag/AdSense fuera, fixes encadenados
ci / lint-test (pull_request) Successful in 4s
isolation-test / probe (pull_request) Successful in 8s
2026-11-02 17:50:32 +00:00
pattern 30d76fa565 Merge pull request 'ci: pipefail real (defaults.run.shell) + revert del test roto fusionado por falso verde' (#44) from ci-pipefail-real into main
ci / lint-test (push) Successful in 1s
Reviewed-on: #44
2026-11-02 17:13:03 +00:00
ci-bot 3b8e1296e2 Merge pull request 'r20 doc: perf, pipefail real, reporte diario, seo' (#46) from r20-doc into main
ci / lint-test (push) Successful in 2s
2026-11-02 13:15:11 +00:00
patternn 8c5f085e3f r20 doc: perf gate mediana, pipefail real + incidente #43, reporte diario, seo
ci / lint-test (pull_request) Successful in 7s
isolation-test / probe (pull_request) Successful in 2s
2026-11-02 13:09:15 +00:00
patternn 661ca844d0 ci: pipefail REAL (defaults.run.shell por job) + retiro el test roto que entro a main por el falso verde
ci / lint-test (pull_request) Successful in 1s
isolation-test / probe (pull_request) Successful in 1s
2026-11-02 12:59:42 +00:00
ci-bot cc22feea23 Merge pull request 'demo r20: test roto — el CI debe dar ROJO' (#43) from demo-rojo-r20 into main
ci / lint-test (push) Successful in 8s
2026-11-02 12:55:04 +00:00
patternn fa312c2fbd demo r20: test roto — el CI debe dar ROJO (prueba del pipefail #41)
ci / lint-test (pull_request) Successful in 6s
isolation-test / probe (pull_request) Successful in 1s
2026-11-02 12:51:32 +00:00
pattern c027317f46 Merge pull request 'ci: set -o pipefail — los tests rotos ya no dan verde' (#41) from ci-pipefail into main
ci / lint-test (push) Successful in 1s
Reviewed-on: #41
2026-11-02 12:29:42 +00:00
ci-bot 21a6aa41ca Merge pull request 'r19 doc: auto-merge demo completo, bitcoinhotels en el sistema, sfeed' (#42) from r19-doc into main
ci / lint-test (push) Successful in 5s
2026-11-02 07:50:06 +00:00
patternn 41e14174b6 r19 doc: auto-merge demo completo, bitcoinhotels en el sistema, sfeed
ci / lint-test (pull_request) Successful in 3s
isolation-test / probe (pull_request) Successful in 1s
2026-11-02 07:47:26 +00:00
ci-bot de73dd2af9 Merge pull request 'ci demo: trivial verde (debe auto-mergear)' (#35) from ci-demo-trivial into main
ci / lint-test (push) Successful in 1s
2026-11-02 07:34:56 +00:00
ci-bot 2405070a0c Merge pull request 'recupera doc r18 (commit perdido en main local)' (#38) from r19-recover-r18doc into main
ci / lint-test (push) Successful in 4s
2026-11-02 07:34:41 +00:00
patternn a7782df111 r18 doc: autodeploy probado, promo v3 publicada en FB, bitcoinhotels actualizado
ci / lint-test (pull_request) Successful in 1s
isolation-test / probe (pull_request) Successful in 0s
2026-11-02 06:43:36 +00:00
patternn 73b93c8cfa ci demo: trivial verde
ci / lint-test (pull_request) Successful in 2s
isolation-test / probe (pull_request) Successful in 0s
2026-11-02 06:42:28 +00:00
patternn a0ee8fbf1d r18 doc: autodeploy probado, promo v3 publicada en FB, bitcoinhotels actualizado 2026-11-02 06:20:33 +00:00
7 changed files with 141 additions and 1 deletions
+6 -1
View File
@@ -8,8 +8,13 @@ on:
jobs: jobs:
lint-test: lint-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
# r20: pipefail a nivel job — un - run: set -o pipefail en paso aparte NO
# persiste (cada paso es un shell nuevo) y el test roto de la demo #43
# siguio dando verde hasta ser auto-mergeado a main.
defaults:
run:
shell: bash --noprofile --norc -eo pipefail {0}
steps: steps:
- run: set -o pipefail # r19: sin esto, | tail se come los exit codes y un test roto da verde
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
@@ -0,0 +1,34 @@
# Ronda 18 — Autodeploy, promo v3, bitcoinhotels (OpenCode/GLM, operador patternn)
## 1. Autodeploy (nuevo)
- /usr/local/bin/cayce-autodeploy + timer cada 3 min (User=ubuntu).
- cayce-ops: pull ff-only de main cuando main adelanta al tree (working tree en main @ 6dec319).
- entity → /srv/cayce-core: PUBLISH_OFF durante el swap; solo se retira tras tests >=27/27 y watcher sin VIOLACION; rollback automatico (en fallo de watcher PUBLISH_OFF queda ACTIVO). Restart de cayce-nostr; los ciclos timer levantan codigo nuevo solos.
- PROBADO end-to-end con remote local falso (bare con main adelantado): "[autodeploy] main nuevo detectado … PUBLISH_OFF activo" → "entity → 706bb49 (tests 27/27, watcher OK, live)".
## 3. PRs
- cayce-ops PR #34 (r16-r9-gemini → main): elimina runtime/ + docs r16/r17.
- bitcoinhotels PR #3 (guides-sin-bitbox): ultima marca fuera (BitBox02 la dejo el PR #1).
## 4. Promo (voz v3, sin hashtags)
- 12 captions reescritos en voz v3 (hardcap=señal con fuente+fecha; bitcoinhotels=guía numerada verificable). Guard: 12/12 APROBADOS.
- Bugs: unit sin EnvironmentFile (corria en draft y sin IG_USER_ID) — añadido; sfeed escribe el URL en stderr (spawnSync combinando salidas) — fix.
- PUBLICADO REAL: d1-fb-lightning → facebook.com/1013900045145494_122134510088947378 (sfeed operativo). Cadencia 1/ciclo según horas 13/19 UTC. IG activo (IG_USER_ID set).
- Estado de campaña reseteado; backups en forensics/promo-pre-r18.
## 5. Scout
- Unit archivada en forensics/scout-20261102 y eliminada (daemon-reload). Sigue deshabilitado.
## 6. Token id 10
- ES de ci-bot (uid 3): lo genera el propio /usr/local/bin/cayce-auto-merge por CLI en cada run (sin token embebido). Per operator: no requiere reemplazo. Scopes write:repository,write:issue (los minimos para mergear+comentar).
## 7. kind 5 (99cc75f4)
- Recheck agendado 06:44 UTC → /var/log/r17-recheck-99cc.log. Resultado: (ver abajo).
## 8. bitcoinhotels
- PR #1 MERGED. El deploy (/srv/bitcoinhotels, sirvió via tunnel CF → localhost:3002) NO estaba actualizado: sin umami, con marcas, sin flag. Bloqueo: deploy no es checkout git y el repo no trackea ficheros raiz.
- Actualizado a mano: layout (umami+Organization JSON-LD), guides page (flag affiliates), guides.json (sin marcas) + rebuild + restart. Live: umami ✓, 0 marcas, box afiliados oculto (flag off), 200.
- PR #3 queda para el ultimo resto (BitBox02).
## 2. Voz v3
- PR #23 sigue open — NO VERIFICADO. Al mergear, el autodeploy actualiza ~/cayce-ops (identity ff2cd822 → v3 c0f0ec05) y los ciclos publican con v3.
@@ -0,0 +1,36 @@
# Ronda 19 — Auto-merge, bitcoinhotels en el sistema, sfeed (OpenCode/GLM, operador patternn)
## 1. Auto-merge
- required_status_checks ACTIVO en cayce-ops main (contexto "ci / lint-test (pull_request)"). entity y bitcoinhotels: pendiente de que sus workflows lleguen a main (PRs #2 y #4) — activar checks antes dejaría los PRs bloqueados sin CI que correr.
- Bug del CI hallado por la demo: | tail sin pipefail hacia que un test roto diera VERDE (PR #41 lo corrige — toca workflows, merge del operador).
- Bug historico del auto-merge hallado y corregido: regenerar token "auto-merge" con nombre usado da ERROR → BOT vacio → el script llevaba rondas sin hacer nada. Ahora el token persiste en /etc/cayce/ci-bot.token (600). INCIDENTE: un token de ci-bot se imprimio en mi salida por un heredoc sin citar → fue revocado al instante y reemplazado.
- Otro fix: usar /status (combinado) en vez de /statuses (los pending historicos bloqueaban PRs verdes).
- ci-bot tenia MustChangePassword → su API daba 403: unset.
- DEMA COMPLETA: #35 trivial verde → AUTO-MERGEADO (merge: 200); #40 rojo → merge rechazado "405 Not all required status checks successful"; #39 verde+SPEC.md → "TOCA PATH PROTEGIDO — no se auto-mergea". #38 (doc r18 recuperada) tambien auto-mergeado.
- Timer cayce-auto-merge (cada 5 min) ACTIVO. Ciclo completo verificado: merge → autodeploy tiro "[autodeploy] cayce-ops → de73dd2" solo.
## 2. bitcoinhotels en el sistema
- PR #4 (bh-repo-completo): TODO para construir (package+lock sincronizado, configs, public/) + CI: npm ci + build + Playwright (375/768/1280, smoke home+guia sin marcas) + Lighthouse movil >=0.90.
- Infra del runner arreglada: playwright install --with-deps necesita sudo → deps de sistema instaladas como root (persistentes), browser en cache del runner; dos versiones de @playwright/test → binarios locales del repo; lighthouse requiere CHROME_PATH + --no-sandbox; firewall del runner (uid 1002) bloqueaba loopback → regla OUTPUT -o lo ACCEPT (persistida en /etc/cayce/iptables.v4, antes inexistente pese a la unit enabled).
- RESULTADO REAL: Playwright VERDE; Lighthouse performance(movil) = 0.85 → el umbral >=0.90 fallara hasta optimizar el sitio (detalles en /tmp/lh.json del runner). El workflow ya mide bien.
- /srv/bitcoinhotels = checkout de bh-repo-completo (unit cayce-bitcoinhotels.service, PORT=3002); rollback pre-r19 en forensics (r19-bitcoinhotels-pre-*.tar.gz). Autodeploy extendido: pull main → build → restart → verifica 200+umami+0 marcas → rollback si falla. check-clean-trees lo cubre.
- BitBox02 (PR #3) incluido en la rama; nada en caliente a partir de ahora.
## 3. sfeed (solo lectura)
- billing status: "○ No subscription" (el scheduling hospedado la requiere; el posting directo NO). Sin cobro.
- Destinos activos: facebook "Bitcoin Travelers" (1013900045145494) e instagram @nodalntt (17841476274179708), con credencial activa.
- Actividad desde 2026-10-19 04:50 (owner 8396006670…); config.json (telemetry/anonymousId) modificado 2026-10-31 18:50; tokens.json se refresca solo al postear.
- Al rotar el api_token en el panel: actualizar /home/ubuntu/.sfeed/tokens.json (clave .api_token) — fichero 600.
## 4. Voz v3
- PR #23 sigue open → NO VERIFICADO. Despliegue sigue en ff2cd822 (v2). Al mergear, el autodeploy actualiza ~/cayce-ops y los ciclos publican con v3.
## 5. posts_log
- Completado a mano el post_url del FB (id 20). Los siguientes ya lo guardan solos: instagram|seed-strategy|ok|https://www.instagram.com/p/DfOtHrGER3P/ (spawnSync stderr fix verificado en produccion).
## 6. Primer post IG
- PUBLICADO: d1-ig-seed → https://www.instagram.com/p/DfOtHrGER3P/ (voz v3, sin hashtags).
## Extras
- Merge del operador (#34) detectado; mi doc r18 estaba perdido en el main local (push no-op de r18) → recuperado como PR #38 y auto-mergeado. Regen: nunca commitear en el main local de cayce-ops (es checkout de deploy).
- Recheck kind5 06:44→07:13 ejecutado: target 99cc75f4 visible en 0/5 relays (borrado consolidado), kind5 1/5.
@@ -0,0 +1,22 @@
# Ronda 20 — Perf bitcoinhotels, reporte diario, SEO (OpenCode/GLM, operador patternn)
## 1. Rendimiento (PR #5 bitcoinhotels, gate como prueba)
- Diagnostico: 1.35 MB de terceros en la ventana de carga (gtag 530K + AdSense 666K + Blink 159K) → TBT 1128 ms, score 0.74-0.85.
- Cambios: gtag+AdSense diferidos al primer gesto o 15 s (DeferredThirdParty); Blink por IntersectionObserver de su sección; SatlantisEvents/SupportSection en chunks aparte (next/dynamic).
- Local: 0.98 / 0.92 / 0.97. CI varianza (0.79 en una pasada) → gate con MEDIANA de 3 pasadas ≥0.90.
- Fonts ya iban bien (next/font + swap). Fuentes de verdad: auditoría completa en el reporte.
## 2. Post-merges
- #41 (pipefail) → demo #43... INCIDENTE: el set -o pipefail estaba en un PASO aparte (cada run: es un shell nuevo, no persiste) → el test roto siguio VERDE y el auto-merge lo fusiono a main. Fix real: defaults.run.shell bash -eo pipefail a nivel job (PR #44) + retiro del test de main; demo v2 (#45): CI ROJO ✓ bloqueado por checks.
- bitcoinhotels #3+#4 mergeados → checks ACTIVADOS (ci / build-e2e-lighthouse) y #3 ya cerrado por tu merge; autodeploy desplego main solo (48aa40d). Bug propio corregido: el exit 0 del no-op de entity mataba el script antes de la sección bitcoinhotels.
- entity #2 y #23 SIGUEN open → checks de entity y voz v3 pendientes de tu merge.
## 3. Reporte diario por DM (nuevo, activo)
- /usr/local/bin/cayce-daily-report + timer 23:50 UTC: publicado por canal con enlaces, rechazos del guard agrupados, PRs mergeados 24h + deploys del autodeploy, Umami (SQL directo a la DB local de /opt/umami — ambos sitios) y Gemini del dia.
- llm.mjs registra uso por llamada (.llm-usage.jsonl; entity PR #3 + aplicado). Costo estimado con rates configurables (GEMINI_USD_PER_MTOK_IN/OUT).
- 2 DMs de prueba enviados al supervisor durante la validacion (12:57 y 12:58 UTC).
## 4. SEO
- robots.txt + sitemap.xml ya 200 en ambos sitios.
- Verificacion GSC/Bing por ARCHIVO en public/ (servido en runtime, sin rebuild, .gitignore para no ensuciar el checkout): bitcoinhotels PR #6 (Gitea), hardcap PR #5 (GitHub, via gh).
- Pasos operator: GSC → descargar googleXXX.html → scp a /srv/bitcoinhotels/public/ (y /srv/hardcap-news/frontend/public/); Bing → BingSiteAuth.xml igual.
@@ -0,0 +1,27 @@
# Ronda 21 — Política de DMs, gtag/AdSense fuera, fixes (OpenCode/GLM, operador patternn)
## 0. DMs: solo urgencia
- Emisores ANTES: cycle-monitor (ciclos), autodeploy (exito+rollback), daily-report, relay-watcher (fuga+monitor), gemini-spend (estimador sin timer).
- AHORA: cycle-monitor SIN DM (logger, lo toma el reporte diario); autodeploy DM SOLO en 3 ROLLBACKs; relay-watcher con dedup 6h (fuga, monitor-stalled); NUEVO cayce-urgent-watch (5 min): kill switch MANUAL (respeta la ventana firmada del autodeploy <10 min), criticos caidos >15 min (nostr, hardcap back/front, bitcoinhotels, postgres, caddy; estado persistente .critical-down.json), backup fallido, gasto Gemini REAL >1 USD/dia (tokens de .llm-usage.jsonl). Dedup compartido 6h (.dm-dedup.json). gemini-spend eliminado.
- daemon /dm auditado (log [dm]) — verificacion real de envios.
- PRUEBA NEGATIVA: deploy exitoso (remote falso, PUBLISH_OFF firmado): 0 DMs. Falso positivo inicial (17:30, carrera con la ventana del deploy) corregido con la firma. El ROLLBACK legitimo (tests 22/5 por caps reales) SI DM.
- Reporte diario: nueva seccion "Persistencias" (caidos al momento del reporte).
## Fixes encadenados
- editorials CAIDAS desde r17 (exigian ZAI_API_KEY): chequeo fuera + rama. Arreglado y corriendo.
- guard tests contaminados por el tope REAL (dia 3/3 rompia 5 tests): aislamiento con GUARD_CAPS_JSON + restauracion en R5. 27/27.
- autodeploy: systemctl restart como ubuntu fallaba EN SILENCIO (sitio sin reiniciar desde 07:39): 4 llamadas ahora con sudo -n; build nuevo ya sirve.
- un reset --hard accidental barrio parches calientes: recuperados via rama r20-llm-usage (checkout sobre esa rama).
## 1. bitcoinhotels sin gtag/AdSense
- PR #7: gtag FUERA (Umami reemplaza), script AdSense FUERA; quedan ads.txt + meta google-adsense-account. CI VERDE (gate mediana) → auto-mergeado → desplegado → produccion con 0 referencias gtag/adsbygoogle, umami 1, meta 1, ads.txt OK, live 200.
## 2. Post-merges
- #44: demo #47 (test roto) → CI ROJO, bloqueado por checks, cerrada. El pipefail real funciona.
- #23 y entity #2 siguen OPEN (voz v3 y checks de entity pendientes de tu merge).
## 3. SEO
- Verificacion por DNS elegida: bh#6 cerrado (con comentario); hardcap GH#5 ya estaba MERGEADO por el operador (gitignore+doc inofensivos quedan).
## Extra
- Token cayce ampliado a write:issue (r21-full); viejo r17 revocado.
@@ -0,0 +1,15 @@
# Ronda 22 — Identidad de deploy, ciclos por pieza (OpenCode/GLM, operador patternn)
## 1. Verificación REAL del deploy
- PR #8 (bitcoinhotels, auto-mergeado con gate verde): BUILD_ID = commit (generateBuildId) servido en <meta name="build-id">.
- Autodeploy ahora exige IDENTIDAD tras cada deploy: build-id servido == commit desplegado; mismatch → rollback + DM urgente. Solo se exige cuando el deploy tiene la función (git grep NEXT_PUBLIC_BUILD_ID).
- Producción: [autodeploy] identidad OK: servido=a0977082 desplegado=a0977082; meta en vivo = a0977082. El camino de mismatch comparte el rollback ya probado en r21.
## 2. Ciclos mudos
- Reporte diario: nueva sección "Ciclos: piezas producidas (24h)" por ciclo (posts/editoriales/notas hardcap/curación/promo/iniciativa) con datos reales.
- cayce-urgent-watch sección 5: por ciclo, piezas y corridas en 48h. Mudo = ni corrió ni produjo (correr con "sin señal"/rechazos NO es urgente → solo reporte). Excepción promo: campaña incompleta → 0 publicaciones en 48h ES urgente. DM con dedup 6h.
- PRUEBA REAL: entrada "prueba-mudo" (0 piezas por construcción) → pasada 1: DM enviado; pasada 2: DM dedup. Retirada tras la prueba.
- INCIDENTE propio: un doble backslash en el patch rompía los queries (Q recibía "\") → 5 DMs espurios a las 18:1x UTC; corregido en el minuto, dedup cubrió las repeticiones, claves purgadas para el re-test limpio.
## 3. Pendientes de merge del operador
- #23 (voz v3), entity #2 y #3 siguen OPEN al cierre de la ronda: hash v3, checks de entity y 3 piezas v3 quedan para tras-merge.
+1
View File
@@ -0,0 +1 @@
demo trivial r19 — 2026-11-02T06:42:28Z