Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b195b76fea |
@@ -1,22 +0,0 @@
|
|||||||
# Propuesta: claves por agente y por host (dejar de usar la clave maestra)
|
|
||||||
|
|
||||||
Problema: la clave ED25519 gustavo@blinkbtc.com (~/.ssh/blink_vps_key_v2 en el
|
|
||||||
Mac) es la ÚNICA autorizada en vm2047 y la usó el actor no identificado de
|
|
||||||
octubre (trader v2.4, burbujas, sfeed, respondedor). Un solo secreto, todo el
|
|
||||||
poder, cero trazabilidad por agente.
|
|
||||||
|
|
||||||
Propuesta (por orden de adopción):
|
|
||||||
1. Un par de claves POR AGENTE y POR HOST: <agente>-<host> (ej: opencode-vm2047,
|
|
||||||
hermes-vm2047, cayce-dev-gitea). ed25519, sin passphrase, en ~/.ssh/ del
|
|
||||||
proceso que las usa, NUNCA en la Mac del operador salvo la del operador.
|
|
||||||
2. authorized_keys con restrict + command= forzado (patrón ya probado con
|
|
||||||
backup-pull/rrsync): el agente solo puede ejecutar su comando permitido.
|
|
||||||
3. Usuario propio por agente en cada host (opencode, hermes, cayce-dev) con
|
|
||||||
sudo acotado por reglas sudoers específicas (no ALL).
|
|
||||||
4. Auditoría: sudoers con log_output + AcceptEnv GIT_AUTHOR/COMMITER para que
|
|
||||||
cada commit lleve el agente; session log en docs/sessions/ (este documento).
|
|
||||||
5. Rotación de salida: retirar gustavo@blinkbtc.com de authorized_keys cuando
|
|
||||||
las 3 primeras estén operativas; la clave maestra solo para emergencias,
|
|
||||||
guardada offline.
|
|
||||||
6. En Gitea/GitHub: tokens de solo-lectura o scope mínimo por agente, nunca la
|
|
||||||
cuenta del operador.
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Vía de publicación de bitcoinhotels (diseño mínimo)
|
||||||
|
|
||||||
|
Objetivo: las guías del sitio entran como PRs, y si pasan publish-guard + build,
|
||||||
|
se mergean y despliegan solas (directiva 2026-11-01, punto 4). El código del
|
||||||
|
sitio NO entra aquí: sigue siendo PR con merge humano.
|
||||||
|
|
||||||
|
## Piezas
|
||||||
|
|
||||||
|
1. **Repo `cayce/bitcoinhotels-content`** (privado): SOLO `content/guides/*.md`
|
||||||
|
+ `manifest.json` (orden, títulos). Cambios fuera de `content/` → el
|
||||||
|
auto-merger los ignora y quedan para revisión humana.
|
||||||
|
2. **Auto-merger** (`cayce-ops/cayceops/plugins/bitcoinhotels_prague.py` o
|
||||||
|
script node en cayce-core — se decide en implementación):
|
||||||
|
- corre cada 5 min (systemd timer),
|
||||||
|
- lista PRs abiertos con label `auto-content`,
|
||||||
|
- por PR: descarga diff → si toca algo fuera de `content/` → skip,
|
||||||
|
- pasa CADA fichero .md nuevo/modificado por el mismo `guard.mjs`
|
||||||
|
(canal `bitcoinhotels`, tipo `guide`),
|
||||||
|
- si todo aprobado → merge via API (cuenta bot `cayce`),
|
||||||
|
- post-merge: build (`npm run build` en el sitio con el content montado)
|
||||||
|
→ si build verde → deploy a `/srv/bitcoinhotels` + restart,
|
||||||
|
→ si build rojo → revert del merge + PR de vuelta + log.
|
||||||
|
3. **Protección**: main con push deshabilitado; solo el bot mergea via
|
||||||
|
whitelist; tope 1 guía/día (guard caps); guard rechaza duplicados 30d.
|
||||||
|
4. **Trazabilidad**: cada auto-merge escribe en `guard_rejections`-style log
|
||||||
|
(`publish_log`) y en el DM semanal al supervisor.
|
||||||
|
|
||||||
|
## Lo que NO hace la V1
|
||||||
|
- No publica sin PR (no hay escritura directa al sitio).
|
||||||
|
- No toca código/diseño del sitio (eso es PR humano).
|
||||||
|
- No genera contenido sin pasar el guard (el generador escribe al repo, no al sitio).
|
||||||
|
|
||||||
|
## Pendiente de decisión
|
||||||
|
- Bot dedicado (`cayce-content`) vs usar la cuenta `cayce` (recomendado: bot
|
||||||
|
dedicado cuando exista cuenta personal del operador).
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# Sesión 2026-11-01 — OpenCode/GLM en m1s-macbook-pro (operador: patternn)
|
|
||||||
|
|
||||||
Hosts: vm2047.lnvps.cloud (ssh lolvm), blink-vps (lectura), GitHub (gh, patternn), Gitea git.cayce-co.xyz.
|
|
||||||
|
|
||||||
## Contención y forense (trader)
|
|
||||||
- cayce-trader ya disable/stop (respondedor 31-oct); verificado. /etc/hosts: 16 endpoints Binance a 0.0.0.0, curl sin conexión.
|
|
||||||
- Journald exportado a /var/backups/cayce/forensics/ (7 artefactos + manifest sha256).
|
|
||||||
- Atribución: TODA sesión "desde blink" = proceso en el Mac (exit node Tailscale) con ~/.ssh/blink_vps_key_v2. v2.4 futures x5 escrito en el Mac 14-oct 17:38Z (sin commit), desplegado 15-oct 05:44-58, borrado ~05:58. Harness no identificado. Informes: FORENSICS-REPORT-20261101.md, ACTIONS-20261101.md.
|
|
||||||
|
|
||||||
## Infra
|
|
||||||
- Gitea TLS https://git.cayce-co.xyz (LE); :8092 cerrado (Caddy+iptables); ROOT_URL; secretos rotados (SECRET_KEY/JWT/INTERNAL_TOKEN, sin impresión). Usuario pattern (merge exclusivo) + script gitea-set-merge-owner.
|
|
||||||
- Puertos: 3000/3002/3003/8080/8090 a loopback; access log Caddy + middleware hardcap (método/ruta/status/IP). 8080 era host-matcher malentendido, no bind.
|
|
||||||
|
|
||||||
## Publicación autónoma
|
|
||||||
- Fuga kind 3 explicada y corregida (POST /follows fuera del gate) + kind0/replies ya gateados.
|
|
||||||
- guard.mjs R1-R8 (+17 tests) en outbox de cayce-core y cayce-social y en admin de hardcap. Rechazos → guard_rejections.
|
|
||||||
- Voz v3 (PR #23 Gitea), diseño bitcoinhotels (PR #24), recuperación SPEC/cayce-dev (PR #25), repo cayce/btcpay-events + SPEC PR #1 (protección main).
|
|
||||||
- Calibración: 3 piezas aprobadas por el guard (~/calibracion-20261101 en VPS).
|
|
||||||
- ACTIVADO live 2026-11-01 20:19 UTC (4 .env, servicios restart, gate verificado, kill switch PUBLISH_OFF disponible).
|
|
||||||
|
|
||||||
## Backups
|
|
||||||
- age recipient nuevo (Mac ~/.config/cayce-backup/age.key, secreto jamás impreso) + clave backup-pull instalada con rrsync -ro. Bugs: fallback PGURL, GRANT posts_log, NoNewPrivileges. Primer backup OK (3 .age, 1.6M) y pull del Mac verificado (manifest 3xOK). Cadena: VPS 03:15 UTC / Mac 23:30 + launchd.
|
|
||||||
|
|
||||||
## hardcap (burbujas)
|
|
||||||
- Forense: burbujas = Bubbles v2 VPS-only desde 3-oct (actions_log home_pills_removed, runtime+supervisor); NUNCA reemplazadas; vacías desde ~23-oct (Gemini 402 → sin PUBLISHED en 7d). 402 exacto: prepayment credits depleted (AI Studio), key válida.
|
|
||||||
- PR GitHub #2 "production state" MERGED (16 ficheros, 734 líneas: burbujas + drift completo). PR #1 (treemap, premisa errónea) CLOSED.
|
|
||||||
- /srv/hardcap-news = checkout git único para FE+BE (swap con rollback .pre-git-20261101; health 200; working tree limpio). Timer cayce-check-clean-trees diario 09:10 UTC.
|
|
||||||
- scripts/reprocess-pending.ts añadido (para cuando vuelvan créditos AI Studio).
|
|
||||||
|
|
||||||
## IG
|
|
||||||
- META_PAGE_TOKEN del .env = placeholder (16 chars); sfeed usa tokens de su servicio (subscripción inactiva). BLOQUEADO hasta token Meta real (permisos instagram_basic, instagram_content_publish, pages_read_engagement para la página 61578421352848).
|
|
||||||
|
|
||||||
## Pendientes del operador
|
|
||||||
- Recargar créditos AI Studio (aistudio.google.com → Billing) y correr reprocess.
|
|
||||||
- Token Meta para IG. Rotar tokens automation/automation2 de Gitea.
|
|
||||||
- Merges Gitea pendientes: #23 (voz v3), #24 (bitcoinhotels), #25 (recuperación), btcpay-events #1.
|
|
||||||
Reference in New Issue
Block a user