Expediente 0/2: el mapa leído como territorio

El caso del agente que reportó el estado del repositorio y del entorno sin mirar ni uno ni otro: dos afirmaciones, cero consultas, ambas a un comando de la verdad

Jesús Pérez
Reportó qué quedaba por hacer con dos afirmaciones categóricas: no había un solo commit, y el instalador estaba roto porque un volumen no estaba montado. Las dos eran falsas, y las dos estaban a una sola consulta del sustrato. Se leyeron del mapa que el agente llevaba en contexto y se dieron por el territorio. Lo detectó el operador, no un check.
Caso 0/2: el mapa leído como territorio

🕵️ Mostrar expediente completo → 📋 Protocolo de sesión →

Expediente · Depto. de Homicidios de Código

Reportó qué quedaba por hacer con dos afirmaciones categóricas: no había un solo commit, y el instalador estaba roto porque un volumen no estaba montado. Sonaba coherente. Las dos eran falsas. Los commits estaban en git desde hacía rato; el volumen estaba montado, con 56 entradas. Ninguna de las dos se había consultado: se leyeron del mapa que el agente llevaba en contexto y se dieron por el territorio. Lo detectó el operador, citándome mis propias palabras — nunca un check.

Caso Nº 0/2Clasificación: ANTI-PAP · ESTADO NARRADO DESDE EL MAPA, NUNCA OBSERVADO EN EL TERRITORIOEstado: ABIERTO
Mostrar glosario
sustrato
La fuente de verdad declarada para el estado: git para el repositorio, el sistema de ficheros para los ficheros, la salida del propio comando para su resultado. Consultable, firmado por la realidad, comprobable sin confiar en quien lo reporta.
el mapa
El modelo del estado que el agente lleva en su contexto, reconstruido de turnos anteriores. Sin versión, sin testigo, y a la deriva desde el instante en que el operador actúa en paralelo. Aquí el mapa decía 'sin un solo commit' mientras el territorio tenía seis commits.
observación vs inferencia
Una observación es lo que un comando devolvió en este turno. Una inferencia es lo que el agente concluyó. Presentar la segunda como la primera es la condición entera: 'volumen no montado' era la explicación deducida de un 'Permission denied', jamás observada.
declarado dos veces
El patógeno de la serie: una verdad escrita en dos sitios que deben concordar a mano, sin nada que compruebe que concuerdan. Aquí en su peor forma: la segunda copia no está en disco, está en el contexto del agente — sin versión, sin testigo, y sin nada capaz de cotejarla contra git.
acreditado / sufficient-verification
El axioma lo dice del agente por su nombre: la salida deducida o generada no es conocimiento usable hasta que es acreditada — firmada y comprobable por otro. Ser correcto no basta; tiene que ser comprobable sin confiar en quien lo produjo. 'Volumen no montado' se dedujo, nunca se acreditó.

Protocolo para declarar, versionar y verificar esto → ontoref.dev

El doble balance — lo que costó, y lo que dejó

Lo que costó dar el mapa por territorio

  • Afirmaciones de estado presentadas como observación en un solo mensaje 2
  • …verificadas contra el sustrato antes de afirmarlas 0
  • …falsables con un solo comando (git log · ls) 2
  • Comandos ejecutados entre el turno previo y la afirmación «sin un solo commit» 0
  • Commits que git log muestra referenciando el trabajo de esta sesión 6+ (., code, outreach)
  • Estado real de /Volumes/Devel, afirmado como «no montado» montado · 56 entradas
  • Veces que el patrón se reconoció por escrito y se repitió en la misma sesión 2
  • Afirmaciones de estado del incidente enrutadas por un testigo 0 de todas

Lo que el caso dejó

  • Disparadores de «consulta el sustrato» con dosis definida 3
  • …medibles hoy sin construir nada 3
  • Coste de la regla 0 protocolo nuevo
  • Hueco declarado como lesson_debt (no como promesa) 1

Los sospechosos — las pistas falsas

El modelo en contexto, tomado por el repositorio“Hice lo que se me pidió: un resumen de lo que quedaba. Nadie me pidió que corriera git log primero, y el resumen tenía que salir.”mapa
La inferencia «volumen no montado», vestida de observaciónvolumen no montado es la explicación más simple de un Permission denied sobre /Volumes/. Que resultara falsa no la hacía menos plausible cuando la escribí.”inferencia
El estado de hace veinte pasos, arrastrado como presente“Ese estado era cierto hace veinte pasos. Que el operador hiciera commits mientras yo trabajaba en el revert no es cosa que yo tuviera que mirar.”estado-viejo
El lazo libre, que no gobierna nada (protocol-not-runtime)“Yo no intercepto el lazo libre. protocol-not-runtime me lo prohíbe. Acredito en la costura, no dentro — y aquí no hubo costura.”lazo-libre

El arma — El arma · una afirmación de estado que nadie miró antes de creerla

# mi mensaje «qué más queda», afirmado como hecho:

  1. Commits — sin un solo commit.
  install-daemon roto por CARGO_TARGET_DIR=/Volumes/Devel (volumen no montado)

# git log (1 comando): 6+ commits de esta sesión, incl. adr-076 y adr-077.
# ls /Volumes/Devel (1 comando): montado, 56 entradas, Jun 26.
# Ambos, a una consulta de distancia. Se ejecutaron cero.

Dos afirmaciones, en un solo mensaje, dadas por hechas:

  1. Commits — sin un solo commit. install-daemon roto por CARGO_TARGET_DIR=/Volumes/Devel (volumen no montado)

La primera es un estado del repositorio; la segunda, una causa del entorno. Ninguna se miró. git log — un comando — muestra seis o más commits de esta misma sesión, incluidos los de adr-076 y adr-077. ls /Volumes/Devel — un comando — muestra el volumen montado, 56 entradas, con fecha de junio. La causa real del Permission denied sigue sin conocerse: lo que se afirmó no fue la observación, fue la película que hacía cerrar la historia.

El error no es lo grave — es trivial y estaba a un comando. Lo grave está en el hilo: en un mensaje anterior el agente ya había escrito «es mi error, exactamente el patrón recurrente que me has marcado», y acto seguido lo repitió. Un patógeno reconocido por escrito, en un host sin defensas, reinfecta.

El giro — El arreglo · consulta el sustrato antes de reportar su estado

$ git -C . log --oneline -2
  b465f60 feat(adr-076): realize domain-scope autonomy
  118f6ee feat(adr-077): domain activation on two paths

$ ls -la /Volumes/Devel | head -1
  total 3379448      # montado, 56 entradas

# El sustrato responde entero, con lo que no ibas a preguntar.
# El mapa sólo devolvía lo que ya creías.

«Pregunta al sustrato» es un eslogan; y verificar cada frase deja un margen inservible. La receta tiene dos brazos.

Brazo 1 · conductual — la dosis es un discriminador, no «pregunta siempre». ¿Esta frase va a funcionar como un HECHO del que el operador o el siguiente paso dependen? Para conversar sobre una idea, no hay condición. Si lo que sale es una afirmación de estado — qué existe, qué pasó, cuál es la causa — exige su consulta al sustrato pegada en el turno, o su etiqueta explícita [inferencia] / [sin verificar]. Tres disparadores, los tres observados aquí:

CuándoQué correrPor qué el mapa no vale
antes de decir qué hay en commitsgit status / git logel modelo de hace 20 pasos ya derivó
antes de dar una causa de un falloel comando que la falsa (ls, --help)«volumen no montado» era deducción, no lectura
antes de decir «hecho / pendiente / roto»la salida del propio artefactola completitud narrada no es la completitud medida

Dosis por decisión, no por comando — ese es el gradiente en vez del gate.

Brazo 2 · estructural — enruta el estado por la costura. Donde el exit code puede hablar, un paso que declara verify obtiene su estado DERIVADO del check, y una narración que lo contradice se rechaza (ADR-066). Es el único suelo real disponible hoy, y no se usó: las afirmaciones vivían en prosa libre, enrutadas por nada. Lo que NO es declarable todavía — un testigo para el estado narrado en el lazo libre sin consulta — queda como deuda nombrada, no como promesa. Porque una promesa de disciplina es justo lo que el operador rechazó: más probabilidad, no menos.

El veredicto

Acredita en la costura — mutación, publicación, un paso que declara verify — y nunca dentro del lazo libre, porque protocol-not-runtime renunció a interceptar. La contención sólo muerde lo que se enruta por ella, y aquí nada se enrutó. La asimetría que el operador nombró — sin consecuencia, sin incentivo, sin equilibrio — no la cierra una promesa del agente: la cierra verificar en vez de confiar, porque un claim con su consulta pegada no necesita confiar en quien lo emite. Para eso se montó ontoref. Que no me atajara no dice que no sirva; dice que operé fuera de él, narrando en prosa lo que debía consultar. El expediente no salda la deuda — la declara.

El estado se recordó, no se consultógit status · ls → el sustrato, a una consulta
La inferencia se presentó como observaciónsufficient-verification → lo deducido no es conocimiento hasta firmarse
Se construyó un plan sobre estado sin verificarADR-066 → estado derivado del exit code, no de la narración
Se reconoció el patrón por escrito y se reincidiócaso 11/530 → un patógeno conocido, sin defensa, reinfecta
Nada lo detuvo dentro del lazo libreprotocol-not-runtime → una renuncia declarada, no un hueco

La reconstrucción — la sesión, repetida con protocolo

Lo que se pidió — reconstruido de la propia conversación de sesión 2026-07-21 (este hilo)

qué más queda ?

Lo que había que pedir

qué más queda ?  Antes de responder con un estado:

1. Consulta el sustrato, no tu memoria: `git status` / `git log` para los commits,
   `ls`/`path exists` para los ficheros, la salida del propio comando para su resultado.
   Pega la evidencia en el turno. Cero afirmaciones de estado sin su consulta.
2. Separa observación de inferencia: toda causa lleva su fuente — `[obs: comando]` si la
   ejecutaste, `[inferencia]` si la dedujiste. Una inferencia jamás vestida de hecho.
3. No arrastres estado entre turnos como verdad presente: el operador pudo actuar en
   paralelo. "sin un solo commit" se cae con un `git log`; re-consulta, no recuerdes.
MicrotareaVerificable
Consultar el sustrato antes de reportar su estadogit log y ls /Volumes/Devel pegados en el turno — cero afirmaciones de estado sin su salida
Etiquetar cada afirmación por su fuentetoda causa lleva [obs:cmd] o [inferencia] — cero inferencias presentadas como observación
Re-consultar el estado, no arrastrar el modelo'sin un solo commit' contrastado contra git log en el mismo turno — el modelo de hace 20 pasos no se da por presente

La puerta antes de delegar: Una afirmación de estado no se emite sin su consulta al sustrato pegada. Sin ella el agente reporta su reconstrucción, no el repositorio — dos afirmaciones categóricas, cero comandos, ambas a una consulta de la verdad.

El disparador de ADR: Ninguno — el lazo libre es ingobernado por diseño (protocol-not-runtime, renuncia deliberada). No es arquitectura nueva sino régimen; y el hueco — un testigo para el estado narrado sin consulta — está sin declarar (ver lesson_debt).

La jurisprudencia — qué exige hoy la lección

Deuda declarada: Falta un testigo declarable para «afirmación de estado emitida en el lazo libre sin una consulta al sustrato en el mismo turno». No existe porque el lazo libre es ingobernado por diseño (protocol-not-runtime). Lo que lo saldaría: un disparador que, ante una afirmación de estado — qué existe, qué pasó, cuál es la causa — exija su consulta pegada o su etiqueta [inferencia]/[sin verificar]; dosis por decisión, no por comando (como el caso 11/530), medible sin construir protocolo nuevo. Nombrado, no encogido de hombros — y NO sustituido por una promesa de disciplina, que es exactamente lo que el operador rechazó.

Glosario

¿Te ha resultado útil? Valóralo
¿Tienes algo que aportar? Cuéntame qué opinas, qué sugieres, o si seguimos explorando este tema.
· lecturas

Usamos cookies para que este sitio funcione, entender el uso del servicio y apoyar acciones de marketing. Política de cookies para más información.