Files
cayce-ops/docs/sessions/2026-11-03-r30b-auditoria-r26-28-factual.md
2026-11-03 02:20:18 +00:00

140 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ronda 30b — Auditoría r26–28 + auditoría factual + saneos (OpenCode/GLM, operador patternn)
> Nota: la ronda 30a cerró su informe A1–A3 pero **no alcanzó a escribir su doc de sesión**
> ni a abrir PR de documentación. Resumen r30a (de su informe): los 3 commits vacíos de
> prueba nunca llegaron al remoto (protección de rama OK; reset local aplicado); conflicto
> DU de lessons.md resuelto (el estado vive en /var/lib/cayce/lessons.md); news-sitemap
> huérfano de hardcap respaldado en forensics/r30 y descartado; los 4 árboles quedaron
> limpios en origin/main. Este doc cubre r30b y cierra el hueco documental de r30a.
## D1 — Auditoría rondas 26–28 (ventana auditada: 2026-11-02 20:30Z → r30a)
Mergeado/desplegado en la ventana (git log + PRs de Gitea y GitHub + journal de autodeploy):
| Cambio | Veredicto | Evidencia |
|---|---|---|
| cayce-ops PR #55 (DECISIONS D1-D3) mergeado 20:40Z, desplegado 20:42Z | CORRECTO — solo docs de política | `git log` 845609e; journal `cayce-ops → 845609e` |
| entity PR #8 (lessons.md fuera del checkout) mergeado 20:40Z, deploy 20:42Z tests 27/27 | CORRECTO — r30a verificó árboles limpios y /var/lib/cayce/lessons.md (3309 B) | journal `entity → d6bbf67 (tests 27/27…)` |
| bitcoinhotels PR #11 (fichas batch 1, 20 venues/ciudad) mergeado 21:00Z, deploy 21:09Z | **FALSO — revert (PR #12) abierto 02:02Z, auto-mergeado por ci-bot 02:05:15Z (CI verde, sin paths protegidos) y desplegado: build-id servido 95fd5597 == main. Verificación viva post-deploy: en /hotels/resorts-world-las-vegas ya no aparece "Tienda las Vegas" (0 matches) y /hotels/bohemian-hotel-savannah muestra solo venues ≤50 km (sin "Shell"/"Pick n Pay"). El detalle: la búsqueda por TEXTO de BTC Map v4 devolvía matches de nombre en otros países presentados como "Nearby/Places around {city}". 19/177 rows >50 km (hasta 13.634 km), + duplicados que inflaban conteos. La herencia de #9 (12/61 rows >50 km) también se sanea en el mismo PR | Auditoría contra lat/lon real del API v4 (tabla completa en el PR #12); journal: 2 ROLLBACK por build-id mismatch (21:03, 21:06) antes del deploy OK 21:09:20 |
| hardcap-news PR #7 (pieza-hub-security) ABIERTO 20:52Z, NO mergeado | No desplegado. Su CI rojo es HEREDADO de main (ver G1): el home devolvía 500 sin API desde antes del PR | runs 41513621707 (#6, rojo) y 41523126329 (#7, rojo); repro local: `/` = 500 ECONNREFUSED, `/topics/security` = 200 |
| Promos publicadas en la ventana (d2-fb-wrench 09:04Z… d4-ig-device 01:04Z) | Textos con sellos "(verified 2026-11-02)" sin registro de verificación y claims sin fuente → E1/E2/E3 | posts_log ids 20-27 con URLs reales a FB/IG |
Sin más deploys 21:10Z→r30a (journal del timer: solo runs vacíos). Los commits vacíos de
prueba de r28 nunca llegaron a remoto (ya resuelto en r30a).
## E1 — Auditoría factual (afirmación → archivo → fuente primaria | SIN FUENTE)
### Guías bitcoinhotels (src/data/guides.json, "updated 2026-10-16")
| Afirmación | Archivo | Fuente primaria |
|---|---|---|
| "foreign transaction fees (1-3%), DCC (3-8%)" | guides.json · how-to-pay… | SIN FUENTE → genérico, cifras fuera (PR #13) |
| "settles in under two seconds" | idem | SIN FUENTE → "settles in seconds" (PR #13) |
| "directory.btcpayserver.org sell airline/hotel/Uber gift cards… app" | guides.json · how-to-pay… | FALSO (scrub de marcas sobre "Bitrefill") → Bitrefill + bitrefill.com (2026-11-03) (PR #13) |
| ATM: "operator commission 6-12% + spread 1-4%", "tourist pays 10-15%", "prepared 4-6%" | guides.json · best-bitcoin-atms… | Parcial: 10-15%/mediana ~16% con fuente (coinatmradar.com, spark.money, cash2bitcoin.com, 2026-11-03); el resto SIN FUENTE → fuera (PR #13) |
| "€200-900 no-KYC" + tabla por ciudad (Amsterdam €250-750/GN ~8%, Praga CZK 5k-25k, Miami $200-800, etc.) | idem | SIN FUENTE (por operador) → reemplazada por checklist de verificación (PR #13) |
| "2021 Bitcoin Law, BTC legal tender… capital gains exempt" | guides.json · living-on-sats… | Reuters 2025-01-30 + Forbes 2025-02-28 (aceptación voluntaria desde ene-2025; exención se mantiene) → matiz (PR #13) |
| "$400-800/mes apartamento El Zonte", "$20-45/noche hostales", "$500-900/mes SS" | idem | SIN FUENTE → fuera (PR #13) |
| "airport 45 minutes away" | idem | SIN FUENTE → fuera (PR #13) |
| "Travala lists dozens of Salvadoran properties taking BTC directly" | idem | Fuente real travala.com/payment/bitcoin-btc (2026-11-03) pero "directly" es inexacto (paga la plataforma) → reescrito (PR #13) |
| Presupuesto semanal en sats ("17-29k sats noche", "1.05-1.5M sats/mes", "late 2026 prices") | idem | SIN FUENTE (implica BTC≈$105k sin cita) → fuera; guía manda a derivar el propio número (PR #13) |
| "tourist visa (180 days for most nationalities)" | idem | sv.usembassy.gov (90 días estándar, hasta 180 según nacionalidad/pasaporte; 2026-11-03) → corregido (PR #13) |
| "community lived on sats since 2019" (El Zonte) | idem | Bitcoin Beach documentado desde 2019 — se mantiene sin cifra nueva |
| "Benjamin Reich (BERLIN) district leads" | idem | SIN FUENTE (dato garbleado) → fuera (PR #13) |
| Sello "— verified AAAA-MM-DD" en venues de fichas | HotelDetail.tsx + hotels-btcmap.json | Registro REAL: `verified_at` del API de BTC Map → se mantiene (los datos falsos asociados se quitan en PR #12) |
| Sello "Verified" (badge, 12/12 hoteles) | hotels.json | SIN REGISTRO en el repo (snapshot ronda 7) → propuesta de rediseño en F1 (no ejecutada) |
### hardcap (frontend/src/app/learn/travel-security-kit/page.tsx, "updated Oct 2026")
| Afirmación | Fuente primaria |
|---|---|
| "The 2026 wrench-attack dataset we track at hardcap" | SIN FUENTE (no existe tal dataset; el backend clasifica notas con pilar security) → reescrito (PR GitHub #8) |
| "Every wrench attack we've tracked started with a public display" | SIN FUENTE → "reported… typically" (PR GitHub #8) |
| "airlines lose [bags] 2% of the time" | FALSO — SITA Baggage IT Insights 2026: 4.9/1.000 (0,49%, incluye demora/daño) → corregido (PR GitHub #8) |
| "Bitrefill … 186 countries" | bitrefill.com ("over 186 countries", 2026-11-03) → se mantiene |
### Textos de promo (/home/ubuntu/cayce-social/promo.mjs — 12 captions)
| Afirmación | Post | Fuente primaria |
|---|---|---|
| "Cards charge 2-4% on FX…; Lightning route usually stays under 0.5%" | d1-fb-lightning | SIN FUENTE |
| "(verified 2026-11-02)" / "(checked/updated/data through 2026-11-02)" ×12 | todos | SIN REGISTRO — no existe log de verificación de estos claims; el guard R9 solo exigía "fuente y fecha" en el texto (rechazó 90day-protocol por eso: posts_log id 13) |
| "The 2026 wrench-attack dataset is blunt…" | d2-fb-wrench, d5-ig-mistakes | SIN FUENTE (idem hardcap) |
| "Sats to gift card in seconds across 186 countries" | d3-ig-rescue | bitrefill.com (real) — sin cita en el caption |
| "first machine charges 10-15%… operator map runs 4-6%" | d2-ig-atm-fees | 10-15% con fuente; "4-6%" SIN FUENTE |
| "surf hostel 17-29k sats a night, meals 11-17k…" | d3-fb-budget | SIN FUENTE (espejo de la guía) |
| "Amsterdam EUR 250-750, Prague CZK 5k-25k, Miami USD 200-800" | d5-fb-kyc | SIN FUENTE |
| "bitcoin circulates as legal tender inside the jurisdiction" (Prospera/Roatán) | d4-fb-roatann | Parcial: Próspera adoptó BTC en 2022 (anuncios propios); "the island takes Lightning natively" SIN FUENTE por venue — ya corregido en destinos (PR #13) |
| "Blink funded to 500k sats… most land near 70/30" | d6-ig-protocol | SIN FUENTE (protocolo editorial propio, presentado como dato) |
**Nota:** promo.mjs NO está versionado (no es repo git) — hallazgo adicional de la ronda.
Los captions publicados (8) son editables solo en plataforma; los 4 pendientes están
pausados (E3). Corrección de textos pendiente de decidir dónde versionar (ver pendientes).
## E2 — Correcciones (por PR)
- **bitcoinhotels PR #13** (abierto): guías/news/destinos — SIN FUENTE fuera o con fuente
real (tabla arriba). news fabricados (#1 e-visas Lightning, #4 RW+Circa POS) quitados/
reescritos con fuentes.
- **hardcap-news PR #8 GitHub** (abierto): travel-security-kit corregido.
- **Sellos**: los "verified AAAA-MM-DD" con registro real (BTC Map) se mantienen; los de
promo quedan cubiertos por E3 hasta reposicionar los textos.
## E3 — Promo pausada (sin borrar nada)
`systemctl stop + disable cayce-promo.timer` (inactive/disabled verificado). Nada borrado:
promo.mjs, promo-state.json, campaign-start.json intactos. Próximos posts de la campaña
(d5, d6) quedan en pausa. Reanudar: `sudo systemctl enable --now cayce-promo.timer`.
Pendiente: los 8 ya publicados siguen en FB/IG (no se borran por regla del operador).
## F1 — Propuesta de modelo de datos (NO ejecutada)
Ver `docs/bitcoinhotels-datos-btcmap.md` (nuevo, en este PR). Resumen: BTC Map como fuente
de verdad para lodging (ODbL, verified_at real); de los 12 actuales solo Las Verandas está
en BTC Map; propuesta (a)/(b)/(c) para los otros: 4×(a) con página oficial de pago
(Kessler×3 + Circa), 1×(b) RW "no verificado", 6×(c) retirar.
## G1 — hardcap-news PR #7: causa del fallo de build-lighthouse + fix en rama (NO mergeado)
Causa raíz (log del job 125543910450, run 41523126329):
1. `npm start` + Lighthouse → "Runtime error… (Status code: 500)" ×3 pasadas: el home
(`page.tsx`) llama `getArticles/getBubbles` server-side SIN catch; sin API (CI no levanta
backend) el fetch lanza ECONNREFUSED → SSR 500.
2. Bug del propio script de CI: con los 3 scores en null, `sorted([None,None,None])[1]`
revienta con `TypeError: '<' not supported between instances of 'NoneType'…` en vez de
fallar limpio.
3. NO es culpa del diff de #7: el mismo job ya estaba rojo en main (run 41514558872 del
push del merge de #6, 19:56Z) y en el propio PR #6 (run 41513621707) — #6 se mergeó con
CI en rojo. La página nueva de #7 (/topics/[slug]) SÍ tiene .catch() y sirve 200.
Fix (commit ab6a0c7 en pieza-hub-security, pusheado, PR #7 actualizado — NO mergeado):
`page.tsx` con catch → estado vacío (verificado local: `/` 500→200 "No articles yet";
Lighthouse móvil 0.92/0.92/0.92, mediana 0.92 ≥ 0.90) + ci.yml ignora scores null (<2
válidas = fallo limpio).
## PRs abiertos al cierre
| PR | Repo | Estado al cierre |
|---|---|---|
| #12 revert venues #11 (+saneo #9) | Gitea cayce/bitcoinhotels | **MERGEADO (ci-bot 02:05:15Z) y desplegado** (build-id 95fd5597 verificado) |
| #13 e2 guías/news/destinos | Gitea cayce/bitcoinhotels | CI build-e2e-lighthouse corriendo (head b3fad57, re-basado sobre main post-#12) |
| #7 fix build-lighthouse | GitHub patternn/hardcap-news | **CI VERDE** (build-lighthouse SUCCESS tras ab6a0c7) — esperando merge del operador |
| #8 e2 travel-security-kit | GitHub patternn/hardcap-news | CI rojo por fallo HEREDADO de main (home 500 sin API; ver G1); comentario en el PR: mergear #7 primero |
| #56 este doc + propuesta F1 | Gitea cayce/cayce-ops | CI verde (lint-test + isolation-test) |
## Incidente propio de la ronda (transparencia)
A las 02:06:29Z la rama local e2-fuentes-y-sellos fue reseteada a ea83ae6 (head del revert)
7 segundos después de mi commit b3fad57 — probable carrera con el runner de CI en modo
host o con el automerger compartiendo /srv/bitcoinhotels. Detectado via reflog; rama
restaurada a b3fad57 y pusheada (origin verificado). Riesgo a vigilar: CI y autodeploy
comparten árbol de deploy (hipótesis; no confirmado — NO VERIFICADO el actor exacto).
## Pendientes del operador
1. #12 ya mergeado/desplegado. Merge de #13 (bitcoinhotels) cuando CI verde; el deploy es automático.
2. Merge de #7 y #8 (hardcap) — #7 arregla además el rojo heredado de main.
3. Decidir dónde versionar promo.mjs (hoy sin repo) y si se retocan los captions ya publicados.
4. Reanudar promo solo tras merges de E2 (comando arriba).
5. F1: aprobar/rechazar la propuesta de docs/bitcoinhotels-datos-btcmap.md.