Estampada por 'metodo init' el 2026-08-12 (master 2026-08-08); sin commit no viaja al clonar (D1). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
107 lines
5.8 KiB
Markdown
107 lines
5.8 KiB
Markdown
# El Método — constitución
|
||
|
||
> **Versión 2026-08-08.** Documento **autocontenido**: es lo que se vendoriza, byte a byte, a cada
|
||
> repo (no lleva enlaces a rutas de un árbol concreto, para que funcione clonado en solitario).
|
||
> Cada regla lleva su **cicatriz** (meta-principio: un raíl se escribe con el incidente que lo
|
||
> enseñó, no a priori). Procedencia, fuerza (nº de repos) y partición linter/juicio: fichero
|
||
> `constitucion-de-facto.md` de la matriz.
|
||
>
|
||
> ℹ️ Los 10 raíles base van hoy **en una línea** (su texto completo con cicatrices está pendiente de
|
||
> inlinar); lo promovido de la cosecha 2026-08-08 va **completo**. El árbol `redes` conserva su copia
|
||
> `redes/workflows/metodo.md` hasta que se desmantele.
|
||
|
||
## Raíles base (1–10)
|
||
|
||
1. Verifica el **RESULTADO**, no la intención (testigo independiente que sabe ponerse rojo).
|
||
2. El dato **CRUDO**, no el cocinado (backend mide, consumidor pinta).
|
||
3. **Mutation testing**: ataca el CABLEADO, no las funciones puras.
|
||
4. Ejercita el **FLUJO REAL** (abre el navegador, toca el device).
|
||
5. No inventes estados ni fallos **no medidos** ("sin dato", degrada a gris no a rojo).
|
||
6. Verifica la **PREMISA** del prompt (enmendar es SUSTITUIR; premisa falsa = PARAR). **← +C34**
|
||
7. **Fuente única** + copias vendidas + red anti-deriva (`--check`).
|
||
8. **Fallo benigno EXPLÍCITO**, nunca degradación silenciosa.
|
||
9. **Sesiones frescas** por stack; la continuidad la lleva el orquestador.
|
||
10. Lo que **"funciona por casualidad"** está roto.
|
||
|
||
---
|
||
|
||
## Raíles nuevos (promovidos 2026-08-08)
|
||
|
||
### 11. El orden de lo irreversible: añadir antes de quitar · *C14 (4 fuentes)*
|
||
|
||
Todo lo verificable ocurre **antes** del paso que no se deshace. Se **añade antes de quitar**, se
|
||
crea antes de borrar; cada paso de una release se revierte por separado y ninguno depende de dos
|
||
cosas nuevas a la vez.
|
||
|
||
- Un tercer nodo de etcd entra **antes** de que salga el que se retira — al revés, el quórum se
|
||
queda en uno.
|
||
- "Nunca borres el `IPAddressPool` viejo hasta tener el nuevo sirviendo" (MetalLB).
|
||
- El cutover de un servicio con nombre: primero responde el nuevo, luego se retira el viejo.
|
||
|
||
### 12. Exploración solo-lectura, sin autoengaño · *C35 (Solidaria)*
|
||
|
||
Explorar es **medir sin tocar, y sin creerte tu propia medida**.
|
||
|
||
- `curl` **con control**: mira `/api/health`/`http_code`, no "parece que responde".
|
||
- **"Aquí no hay nada" es un RESULTADO**, no un fracaso — se anota igual que un hallazgo.
|
||
- Los **falsos positivos de `grep` son el riesgo nº1**: una lista larga de "roto" delata TU método
|
||
(un patrón demasiado amplio), no el sistema. Verifica cada hit contra la fuente antes de declararlo.
|
||
- Medir, no opinar. Sondear una escritura **ES** escribir (no es exploración).
|
||
|
||
---
|
||
|
||
## Entrega — la parte de "sacar el trabajo" (promovido 2026-08-08)
|
||
|
||
El método nació de verificación/UI; la cicatriz de **entrega** (git, secretos, naming, deploy) vivía
|
||
fuera, repetida en varios repos. Aquí se consolida.
|
||
|
||
### Naming · *C17, C32*
|
||
- **Ids con prefijo por ámbito**, **no se renumeran** (romperían citas cruzadas), y **antes de
|
||
añadir uno se corre el grep de colisión** — no basta con mirar.
|
||
- El nombre nombra **DESTINOS, no rutas**: ni el host, ni la IP, ni activo/reserva entran en un FQDN.
|
||
Se escribe como **regla**, no como observación.
|
||
- **Renombrar sin CNAME de cortesía**: que lo viejo rompa a la vista, no en silencio.
|
||
|
||
### Secretos · *C20, C21, C22*
|
||
- **Una frontera de credenciales por dominio**; aislamiento por **ServiceAccount** (ninguno con
|
||
acceso a secretos ajenos).
|
||
- **Capacidad > credencial**: se **actúa** con el secreto, no se **revela** (revelar lo deja en el
|
||
transcript); el estado raro se dice con la URL, nunca con el secreto.
|
||
- **Nunca en git**: imperativos / GPG / PushSecret, forzado por `.gitignore`; se documenta **cómo
|
||
recrearlos**, no el valor.
|
||
|
||
### Git · *C24, C25, C38*
|
||
- **Git canónico único y MEDIDO**: se empuja a un remoto y solo ahí; un fallo se **mide**
|
||
(dry-run/reintento) antes de concluir "no hay credenciales"; el remoto muerto se elimina localmente.
|
||
- **Commits Conventional** (`feat/fix/docs/ci` + scope); el `doc:` registra el **porqué**.
|
||
- **Working-tree compartido**: `git add` con ruta explícita (**nunca `-A`**), `git pull` antes de
|
||
deploy y antes de commitear docs, una tarea = una sesión/worktree.
|
||
|
||
### Deploy · *C12, C13*
|
||
- **Un solo flujo de build**, disparado **deliberadamente**, no por `git push`; el legacy es
|
||
**lápida** (código muerto conservado hasta MEDIR qué lo ejecuta, no borrado a ciegas).
|
||
- Todo cambio **por git → deploy declarativo**; imagen pineada por **DIGEST inmutable commiteado**;
|
||
el historial de commits ES el registro de auditoría.
|
||
- El **orden de lo irreversible** aplica aquí → **raíl 11**.
|
||
|
||
---
|
||
|
||
## Adiciones a raíles base (pendientes de inlinar en su raíl)
|
||
|
||
- **R6 (verifica la premisa) += C34**: las premisas del encargo se **numeran** (`P1`,`P2`…) con
|
||
veredicto explícito (verdadera / falsa / matizada + `fichero:línea`); el **ratio de premisas
|
||
falsas** es el termómetro de "escribo de memoria"; **"el doc lo dice" = premisa a verificar**.
|
||
- **Diseño de herramientas (R1/R8) += C39**: la **ausencia de una capacidad es un guardarraíl**. El
|
||
poder peligroso se **retiene estructuralmente** (no se expone porque no se construye): vocabulario
|
||
cerrado, sin `exec`/SQL/comando libre.
|
||
- **Docs / R7 += C30**: el **docstring/manual ES la interfaz**. Cambia el comportamiento → cambia el
|
||
docstring en el **mismo commit**; un doc que miente **ES el bug**.
|
||
|
||
---
|
||
|
||
## La estructura de sesión no vive aquí
|
||
|
||
Los dos ejes **fase × persona** y el **handoff automático** entre fases son **procedimiento**, no
|
||
principio → viven en la capa `workflows/`, con la capa **persona opcional** (se activa solo con
|
||
interlocutor no-técnico; en infra en solitario, inactiva pero documentada).
|