feat(episode): BACKFILL_q-13f4d77e-8ee8-5c25-be65-c4f167b575f2_S20260426.INST19752_XX.bkf.0.warm_qdr.orphan.in.cc.es.000.BKF_J.EE99E_E.C30-B
Skill: AEGIS | Type: chronicle Summary: [TESSERA S20260426.INST19752.R1] | sesion=S20260426.INST19752 turno=R1 tipo=assi
This commit is contained in:
parent
7ce00ce5e6
commit
14eef51139
1 changed files with 79 additions and 0 deletions
|
|
@ -0,0 +1,79 @@
|
||||||
|
---
|
||||||
|
episode_id: "ee99ec30-b528-5568-b30b-8b499324c24d"
|
||||||
|
puente_flat: "BACKFILL_q-13f4d77e-8ee8-5c25-be65-c4f167b575f2_S20260426.INST19752_XX.bkf.0.warm_qdr.orphan.in.cc.es.000.BKF_J.EE99E_E.C30-B"
|
||||||
|
session_code: "S20260426.INST19752"
|
||||||
|
acto_dialogico: "informar"
|
||||||
|
actor_flujo: "ember_internal"
|
||||||
|
criticidad_aegis: "moderate"
|
||||||
|
skill_dominante: "AEGIS"
|
||||||
|
fase_proyecto: "maintenance"
|
||||||
|
tipo_semantico: "chronicle"
|
||||||
|
summary_one_line: "[TESSERA S20260426.INST19752.R1] | sesion=S20260426.INST19752 turno=R1 tipo=assistant | dominio=infrastructure modo=ejecución emocion=urgencia | hora=20:52 --- # 📋 Bloque 2 — Runbook entregado, esper"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "default"
|
||||||
|
created_at: "2026-04-26T20:52:25.286566+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "pending"
|
||||||
|
---
|
||||||
|
|
||||||
|
[TESSERA S20260426.INST19752.R1] | sesion=S20260426.INST19752 turno=R1 tipo=assistant | dominio=infrastructure modo=ejecución emocion=urgencia | hora=20:52
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📋 Bloque 2 — Runbook entregado, esperando checkpoint granular
|
||||||
|
|
||||||
|
## ✅ B1 cerrado
|
||||||
|
|
||||||
|
```
|
||||||
|
-rw------- /home/johnember/ember-mcp-server-v3/.env (era 0644)
|
||||||
|
-rw------- /home/johnember/ember-ecosystem/crisol/workers/.env (era 0664)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📦 Runbook B2 entregado
|
||||||
|
|
||||||
|
**Path:** `docs/RUNBOOK_ROTACION_3_CREDENCIALES_S20260426_AEGIS.md` (~280L con passport completo)
|
||||||
|
|
||||||
|
### Estructura del runbook
|
||||||
|
|
||||||
|
| Sección | Contenido |
|
||||||
|
|---------|-----------|
|
||||||
|
| Contexto | Por qué rotar pre-cifrado |
|
||||||
|
| Orden recomendado | Neo4j → Qdrant → PostgreSQL (riesgo creciente) |
|
||||||
|
| Rotación 1 — Neo4j | 5 fases (PRE-CHECK + BACKUP + ROTATE + UPDATE + VERIFY) + ROLLBACK |
|
||||||
|
| Rotación 2 — Qdrant | 5 fases con detección triple `.env` drift |
|
||||||
|
| Rotación 3 — PostgreSQL | 5 fases con `pg_dump` backup completo |
|
||||||
|
| Post-rotación | Limpieza backups + paso a B3 cifrado SOPS |
|
||||||
|
| Riesgos R-01..R-06 | 6 mitigaciones documentadas |
|
||||||
|
| Checkpoints granulares | 3 frases exactas que necesito de John |
|
||||||
|
|
||||||
|
### Resumen de comandos críticos por rotación
|
||||||
|
|
||||||
|
| # | Credencial | Comando central |
|
||||||
|
|---|-----------|-----------------|
|
||||||
|
| 1 | NEO4J_PASS | `cypher-shell ALTER CURRENT USER SET PASSWORD FROM 'old' TO 'new'` |
|
||||||
|
| 2 | QDRANT_API_KEY | `openssl rand -hex 32` + update 3 `.env` + `docker restart qdrant` |
|
||||||
|
| 3 | PostgreSQL plex | `psql -c "ALTER USER plex WITH PASSWORD '...'"` + update DSN URL |
|
||||||
|
|
||||||
|
### Riesgos consolidados (resumen)
|
||||||
|
|
||||||
|
- **R-01** Container `ember-mcp` queda sin acceso → mitigado por backup `.env.bak` + rollback documentado
|
||||||
|
- **R-02** Password con caracteres URL-rompedores → `tr -d '=/+'` filtra `+`, `/`, `=`
|
||||||
|
- **R-03** Workers ocultos con misma credencial → `grep -l` global busca TODOS los `.env`
|
||||||
|
- **R-04** Password queda en bash history → `unset HISTFILE` o heredoc
|
||||||
|
- **R-05** Rotación interrumpida deja inconsistencia → atomicidad por rotación
|
||||||
|
- **R-06** Dump SQL contiene plaintext → `shred -u` post-verificación
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ Esperando 3 checkpoints granulares
|
||||||
|
|
||||||
|
| Checkpoint | Frase exacta tuya | Lo que ejecuto |
|
||||||
|
|------------|-------------------|----------------|
|
||||||
|
| **CP-1** | `rota Neo4j` | Fases 1.1-1.5 (~5 min, riesgo bajo) |
|
||||||
|
| **CP-2** | `rota Qdrant` | Fases 2.1-2.5 (~10 min, riesgo medio — 3 `.env` drift) |
|
||||||
|
| **CP-3** | `rota PG` | Fases 3.1-3.5 (~10 min, riesgo medio-alto — pipeline crítico) |
|
||||||
|
|
||||||
|
**Mi recomendación:** empezar por **CP-1** (Neo4j) porque tiene menor blast radius. Si VERIFY pasa sin issues, procedo con CP-2 cuando confirmes. Si VERIFY falla, ejecuto rollback de ESA rotación únicamente y reporto antes de continuar.
|
||||||
|
|
||||||
|
**Alternativa:** si prefieres ejecutar las 3 en cadena sin checkpoints intermedios, dime `rota las 3 en cadena` (riesgo más alto pero más rápido).
|
||||||
|
|
||||||
|
---
|
||||||
Loading…
Reference in a new issue