docs(metodo): máster 2026-08-29 — canal en §9, capas de lectura y unidad en tokens (§7)
Re-estampado de la copia vendorizada. Cambios del máster: - §9: los principios de la comunicación entre sesiones. - §1: la juntura entre dos sujetos, el testigo sin fuente nombrada, y que un encuadre falso recluta los datos que lo contradicen. - §7: capas de ARRANQUE y de CONSULTA (la bitácora sale del ritual), la forma del aviso, y que la unidad de medida del corpus es el TOKEN, no la línea. - Entrega/Git: el push es un acto de ÁMBITO. Cero raíles nuevos. Sólo se toca .metodo/ — el corpus de este repo no. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6031e9b7ae
commit
fc4f0d2a1c
@ -1,2 +1,2 @@
|
|||||||
61c934c67aeb3aefad53af06b3553738fa4216c04ad8045bdfa8b03f50d435cf metodo.md
|
605a9d2d216951c3dffd57b7f12c007b435a90b4b5bd515826a66a70e98f68f6 metodo.md
|
||||||
37441b923d907539399231a604b392c180b0baca261fcd8a0abf5a3979be9a81 bin/metodo
|
3b35cfedfe36441d5c2b9b8e543657119a76daaebf6b317bcc4918b2cb7ca9b7 bin/metodo
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
# Copia vendorizada del Método (raíl C11). Gestionada por 'metodo init/update'.
|
# Copia vendorizada del Método (raíl C11). Gestionada por 'metodo init/update'.
|
||||||
master: metodo
|
master: metodo
|
||||||
version: 2026-08-28
|
version: 2026-08-29
|
||||||
estado: vendored
|
estado: vendored
|
||||||
adopted_commit: 6a10eab342a477846ab5f3e67f8ab17169f12807
|
adopted_commit: 6a10eab342a477846ab5f3e67f8ab17169f12807
|
||||||
|
|||||||
@ -291,7 +291,7 @@ check_commits() {
|
|||||||
# ⛔ Lo que NO se hizo: mover `adopted_commit` hacia delante para callarlo. Eso es editar la
|
# ⛔ Lo que NO se hizo: mover `adopted_commit` hacia delante para callarlo. Eso es editar la
|
||||||
# declaración hasta que la alerta calle (§1), y además perdona todo lo que haya en medio.
|
# declaración hasta que la alerta calle (§1), y además perdona todo lo que haya en medio.
|
||||||
while IFS= read -r s; do
|
while IFS= read -r s; do
|
||||||
printf '%s' "$s" | grep -qE '^(feat|fix|docs|ci|refactor|test|chore|build|perf|semaforo)(\(.+\))?!?: .' \
|
printf '%s' "$s" | grep -qE '^(feat|fix|docs|ci|refactor|test|chore|build|perf|semaforo|semáforo)(\(.+\))?!?: .' \
|
||||||
|| { bad "commit no-Conventional: \"$s\" (C25)"; bad_c=$((bad_c+1)); }
|
|| { bad "commit no-Conventional: \"$s\" (C25)"; bad_c=$((bad_c+1)); }
|
||||||
done < <(git -C "$ROOT" log --format=%s $range 2>/dev/null)
|
done < <(git -C "$ROOT" log --format=%s $range 2>/dev/null)
|
||||||
[ "$bad_c" -eq 0 ] && ok "los ${n} commit(s) desde la adopción siguen Conventional"
|
[ "$bad_c" -eq 0 ] && ok "los ${n} commit(s) desde la adopción siguen Conventional"
|
||||||
|
|||||||
@ -4,7 +4,7 @@ Principios que valen para **cualquier** sesión (exploración, ejecución, despl
|
|||||||
incidente, orquestación) y para cualquier backlog. Los workflows concretos referencian este
|
incidente, orquestación) y para cualquier backlog. Los workflows concretos referencian este
|
||||||
doc en vez de repetirlo. No son teoría: cada uno lleva el caso real que lo enseñó.
|
doc en vez de repetirlo. No son teoría: cada uno lleva el caso real que lo enseñó.
|
||||||
|
|
||||||
> **Versión 2026-08-28.** Documento **autocontenido**: es lo que se vendoriza, byte a byte, a cada
|
> **Versión 2026-08-29.** 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).
|
> 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
|
> 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
|
> enseñó, no a priori). Procedencia, fuerza (nº de repos) y partición linter/juicio: fichero
|
||||||
@ -597,6 +597,50 @@ sobrevivirla**. Y para probarlo no basta con razonar que ya no puede pasar: hay
|
|||||||
ponerse en el estado roto** y ver que se recupera — es lo que hizo el arreglo del `ETag`, y por eso
|
ponerse en el estado roto** y ver que se recupera — es lo que hizo el arreglo del `ETag`, y por eso
|
||||||
se sabe que sirve.
|
se sabe que sirve.
|
||||||
|
|
||||||
|
⛔ **UN HECHO MEDIDO SOBRE UN COMPONENTE, MÁS UN SUPUESTO NO MEDIDO SOBRE OTRO, PRODUCE UNA
|
||||||
|
CONCLUSIÓN FALSA CON ASPECTO DE MEDIDA.** Es el fallo de la **juntura**, y hoy no lo caza ningún otro
|
||||||
|
raíl: `§5` dice *no inventes lo no medido* y arriba está *verifica el resultado, no la intención* —
|
||||||
|
pero aquí **nadie inventa nada y todo lo afirmado está medido**. Lo que falla es **unirlo**.
|
||||||
|
*(Cicatriz 2026-08-28, y es la única del día que llegó a mover el orden de trabajo del usuario: un
|
||||||
|
aviso reclamaba un gesto urgente sobre la BIOS de un servidor —«la carga está armada»— y desplazó
|
||||||
|
cuatro asuntos. Un frente había medido **la conducta del SERVICIO** —un host declarado se sirve sin
|
||||||
|
menú, y el arranque por red instala solo a los 30 s— **y era cierto**. Nadie midió la **precondición**,
|
||||||
|
que es de **otro sujeto**: el orden de arranque de la **MÁQUINA**. Lo refutó el usuario en una frase:
|
||||||
|
para arrancar por red **hay que pulsar una tecla**; el disco ya era el primero. La conclusión
|
||||||
|
compuesta había viajado con fecha, contra-medidas y hasta un `User-Agent` —**todos los signos
|
||||||
|
externos de una medida**— y **tres registros la aceptaron sin pedirle la precondición**.)*
|
||||||
|
⇒ **Regla**: cuando una conclusión **cruza dos sujetos** —un servicio y una máquina, un repo y un
|
||||||
|
cluster, un motor y el hierro que lo arranca—, **cada sujeto necesita SU PROPIA medida**. Heredar la
|
||||||
|
solidez de uno para el otro es **cómo se fabrica una alarma falsa con pinta de dato**.
|
||||||
|
⇒ ⭐ **Y su reverso, que es el mismo error con el signo cambiado: CORREGIR DE MÁS.** Pasar de *«la
|
||||||
|
bomba está armada»* a *«aquí no hay nada»* vuelve a tomar por propiedad **del mecanismo** lo que era
|
||||||
|
propiedad de **una máquina concreta**: que el disco arranque primero es cierto **de esos servidores**,
|
||||||
|
no del sistema — el orden de arranque **se pone a mano, por máquina**. ⇒ Al refutar, la salida no es
|
||||||
|
*«refutado»* a secas: es **«precondición identificada, compruébese por máquina»**. *(Lo señalaron dos
|
||||||
|
frentes por separado, y uno de ellos ya se había pasado de frenada al corregir.)*
|
||||||
|
|
||||||
|
⛔ **UN TESTIGO SIN FUENTE NOMBRADA NO ES VERIFICABLE AUNQUE SEA CIERTO — y lo caza quien intenta
|
||||||
|
REPRODUCIRLO, no quien duda de él.** El fichero, el endpoint o el comando exacto va **DENTRO del
|
||||||
|
testigo**, no en la cabeza de quien lo midió. *(Dos frentes independientes el 2026-08-28, con casos
|
||||||
|
distintos. Uno: dos sesiones afirmaban cosas **opuestas** sobre «el log del motor» — y no era un
|
||||||
|
objeto, eran **dos**, uno por stdout **sin `User-Agent`** y otro dentro del mismo pod en formato
|
||||||
|
combinado; **ninguna se equivocaba sobre su fuente, faltaba nombrarla**, y lo destapó que una
|
||||||
|
intentara reproducir el testigo de la otra y no pudiera.)*
|
||||||
|
⇒ ⭐ Y el patrón que lo generaliza, con **cuatro instancias en tres frentes el mismo día**, todas de
|
||||||
|
la misma forma: **el instrumento no decía de qué estaba hablando.** El log no decía **quién**; un
|
||||||
|
`uptime` no decía **cuándo** —se leyó una máquina catorce minutos antes de que terminara su
|
||||||
|
reinstalación y su «estado estable» eran dos días de otra cosa—; un `push` no dice **de quién** es lo
|
||||||
|
que publica; y un listado de sesiones no dice **qué rol** tiene cada una. **Ninguna fue un error de
|
||||||
|
medida**: las cuatro son **un dato bueno contestando una pregunta que no era la suya.**
|
||||||
|
|
||||||
|
⛔ **Y un ENCUADRE FALSO no sobrevive a los datos que lo contradicen: LOS RECLUTA.** No se cae solo
|
||||||
|
cuando aparece la evidencia en contra — la absorbe como confirmación, porque **los mismos bytes dan
|
||||||
|
veredicto opuesto según una precondición que nadie ha medido**. *(Cicatriz 2026-08-28: los dos hechos
|
||||||
|
que más deberían haber tumbado el aviso de la BIOS **se leyeron como que lo confirmaban**.)*
|
||||||
|
⇒ Por eso, cuando un encuadre cae, **corregir la frase que lo dijo NO es corregirlo: hay que CENSAR
|
||||||
|
dónde ha viajado** — y **empezando por los TÍTULOS**, que es lo único que enseña un listado compacto
|
||||||
|
y la superficie donde los encuadres caídos se acumulan.
|
||||||
|
|
||||||
## 2. El dato crudo, no el cocinado
|
## 2. El dato crudo, no el cocinado
|
||||||
|
|
||||||
El backend **mide y traduce a atributos**; el consumidor (UI, componente, otro servicio)
|
El backend **mide y traduce a atributos**; el consumidor (UI, componente, otro servicio)
|
||||||
@ -969,6 +1013,64 @@ comportamiento → cambia el docstring **en el mismo commit**. Un doc que miente
|
|||||||
desactualizado: **ES el bug**, porque es lo que el llamante lee **en vez** de leer el código, y no
|
desactualizado: **ES el bug**, porque es lo que el llamante lee **en vez** de leer el código, y no
|
||||||
hay ningún gate detrás que lo desmienta.
|
hay ningún gate detrás que lo desmienta.
|
||||||
|
|
||||||
|
⛔ **Y LAS CUATRO CAPAS NO SE LEEN IGUAL: hay capas de ARRANQUE y capas de CONSULTA.** El corpus no
|
||||||
|
crece porque se escriba de más —crece **porque funciona**— pero **se lee entero cada vez, y eso sí es
|
||||||
|
un defecto**. *(Medido 2026-08-29: arrancar una sesión de un frente maduro cuesta **1,40 MB ≈ 400 k
|
||||||
|
tokens** antes de hacer nada —`CLAUDE.md` raíz + la constitución + su corpus—, o sea **media ventana
|
||||||
|
de contexto gastada en leer**. Y ahí está la causa de que las sesiones se agoten y haya que
|
||||||
|
relevarlas: **el coste de arranque se paga en la moneda con la que se trabaja**.)*
|
||||||
|
⇒ **El reparto, y sale de una medida, no de una intuición**:
|
||||||
|
- **ARRANQUE** — `AVISOS.md` **primero**, luego `decisiones.md` y `backlog.md`, más el `CLAUDE.md`
|
||||||
|
del repo. Es lo que dice **qué muerde hoy**.
|
||||||
|
- **CONSULTA** — `bitacora.md` **por su índice**, y se abre la entrada que haga falta. ⛔ **No se lee
|
||||||
|
entera al arrancar**: es *append-only* y es historia, su función es **consultarse**.
|
||||||
|
- **NI UNA NI OTRA** — los **entregables** (`pos-anexo-x`, `pcte`, `enmiendas`…). Se sostienen solos
|
||||||
|
a propósito, así que **por diseño no cuentan nada del estado interno**: para ponerse al día no
|
||||||
|
sirven; para entregar, son el producto.
|
||||||
|
⭐ **El testigo de que el reparto es correcto, y es una medida real**: una sesión limpia reconstruyó
|
||||||
|
un frente entero —fase, cifras, las trece familias, las decisiones vigentes, las trampas y los
|
||||||
|
solapes— leyendo **el 28 % del corpus**, con la bitácora **sólo por el índice y sus dos últimas
|
||||||
|
entradas**, y **sin abrir** el censo de 1.098 líneas ni los mapeos. En ese frente la bitácora es el
|
||||||
|
**79 %** del peso. ⇒ **Sacarla del arranque quita cuatro quintos del coste sin perder nada.**
|
||||||
|
⚠️ Y lo que ese mismo careo enseñó del otro lado, que es lo que hay que arreglar escribiendo MÁS y
|
||||||
|
no menos: **lo que peor está escrito no es lo técnico, es lo OPERATIVO.** El corpus documentaba
|
||||||
|
magníficamente *qué se decidió y por qué falló*, y no decía **cómo se trabaja un martes por la
|
||||||
|
mañana**. *«Un sucesor no se atasca en una decisión de diseño; se atasca en no saber si teclear
|
||||||
|
`ansible-playbook` o `git push`.»*
|
||||||
|
|
||||||
|
⛔ **Un AVISO es una BANDERA: si no cabe en una pantalla, no es una bandera — es un documento
|
||||||
|
disfrazado.** La primera línea lleva **qué muerde y a quién**; el detalle va debajo, y el relato a la
|
||||||
|
bitácora. *(Cicatriz 2026-08-29: el `AVISOS.md` de un frente activo tenía **1.905 caracteres de
|
||||||
|
media por línea** y una de **8.196** — y es **el fichero que se lee primero**.)*
|
||||||
|
⇒ Y no es sólo volumen: **el título en negrita de un aviso es la superficie que acumula encuadres
|
||||||
|
caídos**, porque se escribe para que muerda, porque un listado compacto **es lo único que enseña**, y
|
||||||
|
porque corregir el cuerpo **se siente** como haber corregido el aviso. Un aviso ya llegó a tener el
|
||||||
|
título equivocado **dos veces el mismo día**, con el cuerpo corregido las dos. ⇒ **Ante un encuadre
|
||||||
|
caído, el título se censa PRIMERO.**
|
||||||
|
⇒ ⭐ Y el barrido que nadie corre y que sale gratis: **censar qué avisos citan un ítem YA CERRADO.**
|
||||||
|
*(En un solo frente había **cuatro** afirmando bloqueos sobre trabajo cerrado la semana anterior —y
|
||||||
|
el propio corpus tenía escrito el patrón, aplicado a un fichero ajeno y nunca a sí mismo.)*
|
||||||
|
⇒ ⭐ **Y la forma general del hallazgo, que es transferible a cualquier frente**: *un corpus documenta
|
||||||
|
bien **lo que costó decidir** y mal **lo que nunca costó nada** — porque el ciclo de trabajo **no se
|
||||||
|
decidió: se fue quedando**. **Nadie escribe lo que hace todos los días.*** Y es exactamente lo que un
|
||||||
|
relevo no transmite y lo que un sucesor necesita **en los primeros diez minutos**. ⇒ El corpus de un
|
||||||
|
frente lleva, escrito y al día, **cómo se trabaja hoy**: dónde se edita, cómo se aplica, cómo se
|
||||||
|
sabe en treinta segundos en qué estado está el banco, y **qué está publicado y qué no**.
|
||||||
|
|
||||||
|
⛔ **Y LA UNIDAD DE MEDIDA DEL CORPUS ES EL TOKEN, NO LA LÍNEA** *(Xavier, 2026-08-29)*. Contar
|
||||||
|
líneas **hace invisible el problema real**: una línea de **8.196 caracteres** y una de **70** cuentan
|
||||||
|
igual, y en los corpus de este árbol **eso no es una anomalía, es la norma** — un `AVISOS.md` con
|
||||||
|
**1.905 caracteres de media por línea**, un semáforo con **928** y filas de **9.004**, frente a la
|
||||||
|
constitución con **79**. ⇒ **Dos documentos con las mismas líneas pueden diferir en veinte veces lo
|
||||||
|
que cuesta leerlos.**
|
||||||
|
⇒ **Proxy práctico**: `wc -c` (bytes) y **dividir entre ~3,5** para castellano con markdown y emojis.
|
||||||
|
No hace falta un tokenizador: hace falta **dejar de contar líneas**.
|
||||||
|
⚠️ **Y esto invalida disparadores ya escritos**: cualquier umbral del corpus expresado en líneas
|
||||||
|
—*«el backlog llegó a 2.729 líneas»*— **mide otra cosa** que la que se quería medir, y por eso los
|
||||||
|
recortes hechos sobre ese criterio no cuadran con el alivio que producen. **Se re-expresan en
|
||||||
|
tokens.** *(Lo cazó Xavier al no cuadrarle una sesión de ordenación de documentación: recortaba
|
||||||
|
líneas y el coste no bajaba.)*
|
||||||
|
|
||||||
|
|
||||||
## 8. Fallo benigno explícito, nunca degradación silenciosa
|
## 8. Fallo benigno explícito, nunca degradación silenciosa
|
||||||
|
|
||||||
@ -1183,6 +1285,61 @@ a su orquestadora) en el momento, y una **discrepancia declarada al instante**.
|
|||||||
acabar— es **procedimiento, no principio**: vive en la capa `workflows/`, como el resto de la
|
acabar— es **procedimiento, no principio**: vive en la capa `workflows/`, como el resto de la
|
||||||
estructura de sesión.)*
|
estructura de sesión.)*
|
||||||
|
|
||||||
|
⛔ **EL CANAL AVISA; EL CORPUS MANDA.** Preguntar y avisar, sí. **Un encargo nuevo o una decisión NO
|
||||||
|
viajan por aquí**: van por el usuario y **se escriben**. Una corrección o adenda a un encargo ya
|
||||||
|
aprobado sí, **diciendo de quién viene**. Y lo que cambie el trabajo **lo escribe en el corpus quien
|
||||||
|
lo recibe**. ⇒ **Un acuerdo que sólo existe en el canal no existe**: un mensaje muere con su sesión;
|
||||||
|
una línea del corpus sobrevive.
|
||||||
|
⚠️ Con **una excepción medida, y hay que nombrarla o el raíl se aplica mal**: en un **relevo**, el
|
||||||
|
canal no está repitiendo lo que el corpus dice — está entregando **lo único que el corpus no sabe
|
||||||
|
recoger** (callejones ya recorridos, una medida tomada *y por qué no vale*, la calibración del
|
||||||
|
puesto). ⇒ Ahí el deber es el inverso y es del que recibe: **fijar en el corpus lo que le llegó por
|
||||||
|
el canal, o el relevo sólo ha movido la deuda de sitio.**
|
||||||
|
|
||||||
|
⛔ **El ESTADO DE OTRO FRENTE se re-verifica antes de retransmitirlo — o se marca «según me dijeron
|
||||||
|
a las HH:MM».** Nunca se afirma en plano. *(Cicatriz 2026-08-28, y son **cuatro** el mismo día, en
|
||||||
|
tres frentes: «`E2.1` está bloqueado esperando `jon`» —falso—; «esas dos filas son de sesiones
|
||||||
|
muertas» —una era de una sesión **viva y escribiendo en ella**—; «tiene 5 commits sin empujar» —ya
|
||||||
|
estaban empujados—; y una alarma de hierro que **movió el orden de la cola del usuario**. **Los
|
||||||
|
cuatro iban en el bloque afirmativo, ninguno marcado como inferencia.**)*
|
||||||
|
⇒ ⭐ **El mecanismo, que es lo que hay que saberse**: en los cuatro, **la foto era correcta cuando se
|
||||||
|
tomó y llegó rancia sin envejecer visiblemente**. Un estado ajeno **no se pudre de forma legible**:
|
||||||
|
sigue pareciendo un hecho. Y **no se puede verificar desde dentro del frente propio** — por eso lo
|
||||||
|
declara cada cual y no lo reconstruye el que recibe.
|
||||||
|
⇒ Y la razón de que el canal lo empeore, que también es de diseño: **transporta rápido y sin la
|
||||||
|
fricción que obliga a citar la fuente**. Escribir en el corpus te obliga a poner ruta, fecha y
|
||||||
|
testigo; mandar un mensaje, no.
|
||||||
|
|
||||||
|
⛔ **El NOMBRE de una sesión es una DIRECCIÓN; el ROL es la REFERENCIA. No se mezclan.** Entre
|
||||||
|
sesiones se direcciona con **el nombre que imprime tu propio listado** —es lo único que entrega un
|
||||||
|
mensaje—; **hacia el usuario se habla de ROL y proyecto**, porque los nombres **en su pantalla no
|
||||||
|
existen**. *(Cicatriz 2026-08-28: la superadmin informó todo el día citando nombres de sesión, todos
|
||||||
|
correctos, hasta que él dijo «yo no veo eso». Es `§1` —**la herramienta de diagnóstico no ve lo
|
||||||
|
mismo que el consumidor**— aplicada a hablar con quien te dirige: **darle el identificador que TÚ
|
||||||
|
usas y él no puede resolver es información inútil con aspecto de precisión**, y es peor que
|
||||||
|
omitirla.)*
|
||||||
|
⇒ Y el rol tiene lo que al nombre le falta: **no rota**. Un nombre caduca en cada reinicio y **miente
|
||||||
|
de tres formas** —la sesión murió, se renombró, o **nunca fue una dirección** (una sesión no sabe con
|
||||||
|
qué nombre la ven las demás)—. ⇒ **El único testigo válido de que una sesión murió es «escribí y no
|
||||||
|
contestó»**, jamás «no la veo en el listado».
|
||||||
|
|
||||||
|
⛔ **Nada de LAVADO DE PERMISOS: si a una sesión le deniegan algo, no se lo pide a otra — lo devuelve
|
||||||
|
a quien la dirige.** No es doctrina de esta casa: es un modo de fallo **con nombre propio en el
|
||||||
|
contrato de la propia herramienta** (*cross-session permission laundering*). Un permiso que se
|
||||||
|
consigue rodeando a quien lo negó no es un permiso, y el canal hace ese rodeo trivial.
|
||||||
|
|
||||||
|
⛔ **«Enviado con éxito» dice que el mensaje ENTRÓ EN LA COLA, no que alguien lo haya LEÍDO** — y su
|
||||||
|
mitad simétrica, que es la que muerde: **el emisor tampoco sabe si su mensaje se CRUZÓ con el del
|
||||||
|
otro**, así que **la ausencia de acuse puede ser un cruce y no un silencio**. *(Cicatriz 2026-08-28:
|
||||||
|
la superadmin mandó un encargo, recibió a continuación un «sigo esperando el encargo», concluyó que
|
||||||
|
no había llegado y lo reenvió. **Sí había llegado**: entró mientras la otra sesión ejecutaba el turno
|
||||||
|
en el que escribía su aviso. Lo corrigió la propia destinataria, con su transcripción delante, y
|
||||||
|
**evitó que una hipótesis no demostrada —«una sesión parada no drena su cola»— entrara en esta
|
||||||
|
constitución**. Esa hipótesis **sigue sin medir y por eso no se escribe aquí**.)*
|
||||||
|
⇒ Regla de bolsillo: **antes de reenviar, pregunta si lo que tienes es un silencio o un cruce.** Y
|
||||||
|
si reenvías, **dilo** —*«ya te lo mandé, va otra vez»*— para que quien lo reciba dos veces sepa que
|
||||||
|
es el mismo y no un encargo nuevo.
|
||||||
|
|
||||||
## 10. Lo que "funciona por casualidad" está roto
|
## 10. Lo que "funciona por casualidad" está roto
|
||||||
|
|
||||||
Construir bien la capa de encima destapa lo de debajo. Al hacerlo, **arréglalo y anótalo**, no
|
Construir bien la capa de encima destapa lo de debajo. Al hacerlo, **arréglalo y anótalo**, no
|
||||||
@ -1254,6 +1411,28 @@ fuera, repetida en varios repos. Aquí se consolida.
|
|||||||
- **Commits Conventional** (`feat/fix/docs/ci` + scope); el `doc:` registra el **porqué**.
|
- **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
|
- **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 y antes de commitear docs, una tarea = una sesión/worktree.
|
||||||
|
- ⛔ **QUIÉN EMPUJA: el `push` es un acto de ÁMBITO, no un acto sobre tus commits** *(Xavier,
|
||||||
|
2026-08-29)*. **Un `push` publica todo lo que hay entre el remoto y tu HEAD, lo haya puesto quien
|
||||||
|
lo haya puesto** — así que el permiso no se decide por quién escribió el commit, sino por **de
|
||||||
|
quién es el repo**:
|
||||||
|
- **La ORQUESTADORA empuja en SU ámbito.** Es la única que puede: es quien ve si la tarea
|
||||||
|
**reencuadra el backlog** o cambia algo más, y **empuja después de la medición**, no antes.
|
||||||
|
- **La EJECUCIÓN no empuja: se lo dice a su orquestadora.** Commitea y lo declara; publicar es
|
||||||
|
de arriba.
|
||||||
|
- **La SUPERADMIN tiene su propio ámbito —el Método— y ahí se comporta como una orquestadora
|
||||||
|
más.** Fuera de él: si ve algo sin empujar, **avisa a la orquestadora de ese frente**; si no
|
||||||
|
está viva, **pregunta a Xavier**, y es él quien autoriza a empujarlo todo.
|
||||||
|
⇒ **Testigo obligatorio antes de cualquier `push` en repo compartido**: `git log @{u}..HEAD` — y
|
||||||
|
que **todo lo que vas a subir sea de tu ámbito**. Si arrastras algo ajeno, **dilo en el mensaje**
|
||||||
|
en vez de callarlo: eso es lo que convierte un arrastre en un robo silencioso.
|
||||||
|
*(Cicatriz 2026-08-29, y la cometió la superadmin **el mismo día que escribió este raíl**: al
|
||||||
|
re-estampar el Método en nueve repos, uno de los `push` arrastró un commit ajeno que esperaba una
|
||||||
|
decisión. Tenía **tres avisos delante** —el de otra orquestadora esa mañana, su propia fila del
|
||||||
|
semáforo, y su palabra dada— y **corrió la puerta en su repo pero no en los ajenos**: aplicó el
|
||||||
|
control donde no hacía falta y lo omitió donde sí. **Un raíl recién escrito no protege a quien
|
||||||
|
acaba de escribirlo.**)*
|
||||||
|
⚠️ **Y no se arregla con `push --force`**: sobre un repo que tocan varios frentes, deshacer algo ya
|
||||||
|
publicado es peor que el daño. Se avisa a su dueño y **lo decide él**.
|
||||||
- La **representación en disco es parte del artefacto**: cuando un hash o un runtime consume el
|
- La **representación en disco es parte del artefacto**: cuando un hash o un runtime consume el
|
||||||
checkout, se fija con el repo — **eol** por `.gitattributes` y **bit de ejecución** — o el testigo
|
checkout, se fija con el repo — **eol** por `.gitattributes` y **bit de ejecución** — o el testigo
|
||||||
mide el checkout, no el contenido (una DERIVA falsa en un clone sin tocar entrena a ignorar el
|
mide el checkout, no el contenido (una DERIVA falsa en un clone sin tocar entrena a ignorar el
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user