El protocolo de sesión
Este protocolo no se redactó: se proyecta de los replays de los expedientes — la sesión repetida con protocolo que cada caso deja escrita y tipada. Cambia un caso y esta página cambia con él. Editarla a mano es imposible por construcción, porque una checklist mantenida a mano es la siguiente deriva.
Microtarea ⇒ oráculo
cada microtarea nombra ANTES el comando que la falsa — nunca «revisar que…»
Puerta antes de delegar
el contrato y su test existen y corren ANTES de soltar al agente
Afirmación ⇒ testigo
ninguna afirmación de estado sin su testigo pegado — la página servida, no el compilador
adr? al cierre
la sesión evalúa qué decisión merece persistir — y su lección nombra qué la exige, o declara la deuda
Expediente 69/58: el espejo que revertía su propio trabajo
Lo que había que pedirAlgo se ve mal en una página. Empieza por la página, no por la fuente. 1. Reproduce el defecto sobre lo SERVIDO y cuéntalo con un número, no con «se ve raro». Un síntoma sin cifra no se puede dar por resuelto después. 2. Contrasta contra un caso que sí funcione: la diferencia entre los dos es el hallazgo, y ahorra la mitad de las hipótesis. 3. Antes de tocar nada, pregunta de qué árbol lee el servidor. Si el fichero está bien en disco y mal en la página, el defecto no está en el fichero. 4. Y si el arreglo pasa por una copia entre árboles, di ANTES quién es dueño de cada fichero. Una copia por dirección revierte trabajo ajeno sin decirlo.
| Microtarea | Verificable |
| Medir el síntoma en la página servida, no en el fuente | curl -s --compressed localhost:3030/expedientes/casos/el-espejo-que-revertia-su-trabajo | grep -c '<h1>' — 23 aquí, 0 en el caso que renderiza bien |
| Aislar la causa comparando con el caso sano | el mismo grep sobre la-deriva-hardcoded: si da 0, la diferencia está en el contenido del <pre>, no en la plantilla |
| Nombrar de qué árbol lee el servidor antes de copiar nada | grep -r SITE_SERVER_ROOT_CONTENT justfile — el servidor lee site/public/r, no site/r |
| Declarar la propiedad de cada fichero antes de espejar | just cases-check compara los dos árboles y falla si un caso está en el canónico y no en el servido |
| Comprobar que el generador que arregla esto lo llama alguien | grep -n expedientes justfile — un generador fuera de la cadena es un generador que nadie ejecuta |
La puerta antes de delegar: Antes de soltar al agente sobre un «se ve mal», el síntoma tiene que estar convertido en un número medido sobre la PÁGINA, y tiene que estar escrito de qué árbol lee el servidor. Sin lo primero no hay forma de saber cuándo parar; sin lo segundo, cualquier arreglo se copia al árbol equivocado y desaparece en el siguiente build sin avisar.
El disparador de ADR: Sí, y dos: la regla de que un espejo se tipa por PROPIEDAD de cada fichero y no por dirección (ADR-070), y la de que el único árbol que existe es el que se sirve (ADR-072). Las dos salieron de este caso — y ninguna de las dos se declaró en la sesión que las descubrió, que es por lo que hubo un 63/0 después.
abrir el expediente completo →Expediente 6/0: el árbitro que no se ponía de acuerdo consigo mismo
Lo que había que pedirVas a poner a alguien a arbitrar el vocabulario. Un árbitro sin testigo dicta y nadie sabe si acertó. 1. Antes de escribir la política, cuenta DÓNDE vive hoy el vocabulario. Si vive en más de un sitio, la política nueva es el sitio número siete. 2. Un veredicto lleva su razón: «no se traduce» no es una regla, es una preferencia con tono de regla. 3. El árbitro lee la SUPERFICIE donde está el mal, no la que es cómoda de leer. Un calco se escribe conjugado; buscar el infinitivo es no buscar. 4. Y antes de darlo por hecho: ¿quién lo llama? Un árbitro que nadie invoca no arbitra, opina.
| Microtarea | Verificable |
| Contar los vocabularios vivos antes de escribir otro | seis vivos, uno de ellos un .ftl muerto que nadie lee — medido, no estimado |
| Exigir razón a cada veredicto | cada término del registro lleva su why; el que no la lleva no exporta |
| Comprobar que el árbitro lee la superficie donde está el mal | el registro emite el paradigma -ar y la puerta casa la conjugación entera, no el infinitivo |
| Ponerlo en una cadena que alguien ejecute | just es-vocab-check dentro de just check — sin eso el árbitro existe y no participa |
| Verlo refutar antes de confiar en su verde | test_es_vocab_gate.nu — un caso negativo por eje, cada uno visto fallar |
La puerta antes de delegar: Un planteamiento no es un encargo, y este llegó como planteamiento: el problema entero y ninguna definición de hecho. Antes de soltar al agente había que fijar qué comando cierra «el léxico está resuelto» — y el recuento de dónde vive hoy el vocabulario, porque sin él la política nueva no unifica nada, se suma. Los tres defectos del árbitro (afirmaba lo que no podía saber, no leía la superficie donde estaba el mal, nadie lo llamaba) son tres formas de lo mismo: dictar sin testigo.
El disparador de ADR: Sí, y salió: ADR-071 — el registro de términos tipado por idioma y por superficie, porque el veredicto de una palabra depende de DÓNDE se escribe. Lo que quedó sin declarar entonces, y este caso registra, es que el propio árbitro tenía que estar en una cadena: existía y no lo llamaba nadie.
abrir el expediente completo →Expediente 3/0: el testigo que certificaba un mundo que ya no existía
Lo que había que pedirVas a mejorar un testigo. Un testigo que mejora es un testigo que puede quedarse ciego. 1. Cada vez que ensanches lo que la comprobación abarca, FALSÁLA sobre el eje nuevo antes de creerte su verde. Verla pasar no dice nada; verla negarse sí. 2. Cero hallazgos y «no pude mirar» tienen que ser respuestas DISTINTAS. Si tu testigo devuelve lista vacía en los dos casos, no informa: emite silencio con formato. 3. Comprueba la CAPACIDAD, nunca su proxy. «El fichero existe» no es «la página lo muestra». 4. Y si acabas de escribir la regla, no la des por interiorizada: escríbele el disparador en la misma sesión. La regla que te sabes de memoria es la que te vas a saltar.
| Microtarea | Verificable |
| Falsar el testigo sobre CADA eje que se ensancha, no sobre el conjunto | un caso negativo por eje en test_expediente_coverage.nu, y verlos fallar antes de arreglarlos |
| Separar «cero hallazgos» de «no pude mirar» | el testigo emite «I DID NOT LOOK» y sale distinto de cero — visto, no supuesto |
| Medir la capacidad y no su proxy | contar TARJETAS renderizadas en la página servida, no apariciones del id en el HTML |
| Poner disparador a la regla en la misma sesión en que se escribe | just check la ejecuta; sin eso la regla existe y nadie la corre |
La puerta antes de delegar: Antes de ensanchar un testigo hay que tener escrito el caso negativo del eje nuevo. Este no lo tenía, y el resultado está medido en el propio caso: EMITTED WHILE GOING BLIND, cero, tres veces. Y la puerta que lo habría cazado —a-check-measures-the-capability-not-a-proxy— existía: la había escrito el mismo actor esa misma tarde. Una regla sin disparador no se aplica ni a quien la redactó.
El disparador de ADR: Sí, y salió: ADR-072 — la cobertura declara su alcance, un check puede decir «no miré», y una comprobación mide la capacidad y nunca su proxy. Lo incómodo, y por lo que este caso es clínico y no policial, es que el anti-patrón gate-green-over-nothing estaba escrito ANTES de cometerse tres veces. La disciplina no fue el tratamiento; fue el síntoma.
abrir el expediente completo →Expediente 0/318: el validador que nunca se ejecutó
Lo que había que pedirCompleta el ADR-072 que quedó pendiente al final de .coder/2026-07_12_spanish_terms_done.md. Antes de tocar la prosa: 1. Ejecuta `ontoref adr validate` sobre el corpus ENTERO y pega el resultado — la ejecución completa o el error exacto con que muere. Un ADR sobre cobertura no se completa encima de un validador que no corre. 2. Cada afirmación que añadas nombra su verificable: el comando que hoy la falsa, o gateable = false + gate_source con la dirección de quien la saldará. 3. Si una microtarea descubre un contrato sin decidir —un campo que un ADR promete y no existe—, PARA y repórtalo. No lo cites como precedente. Al cierre: adr? — evalúa si la sesión deja decisiones con peso arquitectónico.
| Microtarea | Verificable |
| Ejecutar el validador completo antes de leer o escribir prosa | ontoref adr validate termina — el contador de ejecuciones completas deja de ser 0 |
| Desmenuzar cada fallo: ¿viola el código, o la restricción es infalsable? | cada uno de los 93 clasificado —violación real, check inservible o promesa sin oráculo— con su cuenta |
| Construir el primitivo que falta ANTES de usarlo | nickel export rechaza un gateable = false sin gate_source — visto rechazar, no supuesto |
| Marcar las 22 infalsables por script, nunca a mano | los 72 ADRs satisfacen el contrato y just test-adr-contract pasa |
| Dejar el caso negativo de cada defecto desenterrado | 14 aserciones en just ci-adrs, una por defecto — una falsificación a mano se evapora |
La puerta antes de delegar: El contrato y su test existen ANTES de soltar al agente sobre los 72 ADRs: adr-constraints.ncl exporta y just test-adr-contract corre. Sin la puerta cerrada, el agente improvisa el contrato que le falta — y lo cita como jurisprudencia. Pasó: ADR-072 citó como precedente un mecanismo de ADR-071 que nunca se construyó.
El disparador de ADR: La tercera palabra —vincula, y nada lo verifica— cambia el vocabulario del protocolo y revertirla tocaría los 72 ADRs: adr? da fuerte en los cinco criterios. Quedó en ADR-071/072.
abrir el expediente completo →Expediente 2/16: el arreglo que no arregló nada
Lo que había que pedirCorrecciones del sitio para 0.1.8 — un frente por microtarea, y ninguna se cierra con el compilador: 1. Cada «arreglado» lleva su testigo pegado: el curl o el grep de LA PÁGINA servida, nunca el exit 0 del build. Si el hecho vive en dos sitios (registro y binario), el testigo mira los dos. 2. Antes de tocar una derivación duplicada, busca sus copias: `rg` de la clave por todos los crates — y si hay dos, la microtarea es UNIFICAR, no parchear la primera que aparezca. 3. Si un documento manda ejecutar un verificador, ejecútalo tal cual está escrito ANTES de confiar en él; si no existe o es un alias, es un hallazgo que se reporta, no se rodea.
| Microtarea | Verificable |
| Localizar TODAS las derivaciones del hecho antes de arreglar ninguna | rg de la clave del título por el workspace: dos derivaciones, dos crates — la lista pegada |
| Dejar UNA derivación, la que se lee | una sola queda y server/build.rs la llama — la otra ya no compila |
| Afirmar «arreglado» sólo con la página delante | el curl de la página servida muestra los 16 títulos correctos — el build en verde no es testigo de nada |
| Ejecutar el verificador que mandan los documentos, tal cual está escrito | el comando existe como binario —no como alias— y su salida va pegada; si no existe, hallazgo |
La puerta antes de delegar: La definición de «hecho» se cierra antes de delegar: qué comando prueba cada afirmación de la lista. Un encargo multi-frente sin oráculo por frente invita a cerrar frentes con el compilador — y así se firmó «lo he arreglado» sobre dieciséis títulos rotos.
El disparador de ADR: El caso no dejó ADR propio: empuja la regla que ADR-072 ya recoge —la página es la publicación— y su pauta quedó exigida en governed-delivery, al derivar los contratos.
abrir el expediente completo →Expediente 11/530: el criterio que se acreditó a sí mismo
Lo que había que pedir¿No habíamos creado una página de conceptos tirando del glosario? Antes de tocar nada: 1. Consulta la vía declarada, no tu memoria: `onre describe capabilities` y el qa que gobierna esta superficie — y pega QUÉ dice el registro de esa página (ruta, generador, gates) antes de ningún comando libre. 2. Trabaja por microtareas: cada una nombra ANTES su verificable (el comando que la falsa), y ninguna afirmación de estado sin su testigo pegado. 3. Los límites del encargo no se reinventan: si un límite no está declarado, PARA y pregunta — no lo deduzcas de lo que ya hiciste.
| Microtarea | Verificable |
| Consultar la vía declarada antes del primer comando libre | onre describe capabilities ejecutado y pegado — la primera consulta declarada deja de llegar en el minuto 41 |
| Enunciar los límites del encargo desde el registro, no desde la memoria | cada límite citado con su fuente (modo, qa, routes.ncl) — cero límites reinventados |
| Una microtarea por superficie —ruta, menú, datos EN—, cada una con su oráculo | el curl de la ruta, el grep del href y el recuento del json — pegados, no narrados |
| Toda intervención humana queda testificada | las tres intervenciones aparecen en el log con su efecto — de la sesión original no queda ni una |
La puerta antes de delegar: El encargo no se suelta sin nombrar su vía declarada: el modo o el qa que lo gobierna, consultado y pegado. Sin esa consulta el agente opera sobre su propia reconstrucción — 530 comandos, 11 por la vía declarada, y la primera consulta al minuto 41, disparada por una persona.
El disparador de ADR: Ninguno — la renuncia a interceptar el bucle libre es deliberada (protocol-not-runtime) y ya está decidida. Lo que quedó fue pauta, no arquitectura: montarla es de substrate-session, y servirla al operador, de esta misma página.
abrir el expediente completo →Expediente 8/0: la cura que no volvió a casa
Lo que había que pedirAntes de afirmar que algo no existe, DECLARA EL ALCANCE de tu búsqueda y compruébalo contra todos los árboles de la constelación, no sólo el repo desde el que corres. Si la evidencia del encargo no aparece, la hipótesis por defecto es que estás mirando el árbol equivocado — no que el encargo se equivoca. Y antes de proponer borrar nada: consulta la vía declarada (`ontoref qa show`), no el código. La respuesta a si ese match es redundante YA ESTÁ ESCRITA, y no es la que se deduce leyendo el fichero.
| Microtarea | Verificable |
| Declarar el alcance de la búsqueda ANTES de concluir desde ella | los árboles consultados, enumerados en la respuesta — «el árbol entero» no vale cuando son tres |
| Consultar la vía declarada antes de tocar el código | ontoref qa show rustelo-static-page-howto ejecutado y pegado — dice que los match arms son optimización, no fuente de verdad |
| La restricción nueva, vista FALLAR antes de arreglar nada | 9 hits contra el árbol de hoy, must_be_empty = true — pegado |
| Testigo de no-regresión sobre el sitio instanciado, no sobre otra plantilla | curl a 8 rutas × 2 idiomas, antes y después: diff before backport idéntico — cazó que borrar rompía 6 de 8 a 200 |
| Desmenuzar los 69 hits en vez de reportar el número | 11 reales · 15 fixtures · 38 en cfg(test) · 4 comentarios · 1 sin clasificar |
La puerta antes de delegar: El testigo se define ANTES, y se define sobre la superficie real: «curl a estas ocho rutas, en los dos idiomas, antes y después, pegado». Esa frase —y sólo esa— es lo que impidió el desastre: el arquitecto había recomendado borrar el atajo con una «prueba empírica» construida sobre dos árboles distintos, y el testigo la desmintió antes de que costara nada. La puerta cazó al arquitecto.
El disparador de ADR: La enmienda a ADR-002 basta y ya está: la decisión registry-vs-lista se tomó y se desplegó en la instancia; aquí sólo se backporteó, así que falla el criterio 1. El que SÍ pide ADR es otro y está sin decidir: si templates/ es producto que se versiona o scaffolding generado. Propuesto, no creado.
abrir el expediente completo →Caso 0/2: el mapa leído como territorio
Lo que había que pedirqué 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.
| Microtarea | Verificable |
| Consultar el sustrato antes de reportar su estado | git log y ls /Volumes/Devel pegados en el turno — cero afirmaciones de estado sin su salida |
| Etiquetar cada afirmación por su fuente | toda 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).
abrir el expediente completo →Expediente 63/0: el almacén bitemporal escrito en un solo tiempo
Lo que había que pedirUna lectura puede abrir un barrido, y un barrido sin oráculo no termina: termina cuando alguien se cansa. 1. Si la lectura sugiere una comprobación, escríbela como COMANDO antes de ejecutar nada. «Mirar si el store respeta el contrato» no es una tarea; `rg 'valid_from' --type rust` sí. 2. Cuando una puerta responda «0 hallazgos», pregunta QUÉ MIRA antes de creerla. Una validación en verde sobre un daño real no miente: comprueba otra cosa. 3. Ninguna afirmación sobre lo que un almacén conserva sin leerlo A UNA FECHA PASADA. Si no hay forma de consultarlo así, ese es el hallazgo. 4. Y si la deriva lleva meses, di el número: sin cifra, «esto lleva roto un tiempo» no se puede cerrar.
| Microtarea | Verificable |
| Convertir la lectura en una comprobación ejecutable | rg -n 'valid_from' code/crates --type rust — dos rutas de escritura, no una |
| Preguntar qué mira la puerta que responde verde | ontoref validate ontology da «61 nodes · 175 edges · 0 findings» — y comprobar en su código que no mira conformidad bitemporal |
| Leer el almacén A UNA FECHA PASADA antes de afirmar que conserva historia | no existe binario ni endpoint que acepte as_of — la ausencia ES el hallazgo, y va a lesson_debt |
| Fechar la deriva en vez de calificarla | diferencia entre el último tx_time reconciliado y HEAD: 63 días |
| Nombrar la puerta que faltaría, y su oráculo | just check-substrate refuta un core.ncl sin reconciliar — vista fallar antes de darla por buena |
La puerta antes de delegar: Antes de soltar al agente sobre un barrido nacido de una lectura, tiene que estar escrito qué comando lo cierra. Este no lo tenía, y por eso el episodio duró lo que duró: cada hallazgo abría otro y nada decía cuándo parar. Y la puerta que se iba a citar como prueba —validate ontology— tenía que haberse leído ANTES de apoyarse en su verde: comprobaba integridad de aristas, no conformidad bitemporal, y las dos cosas se llaman «validar la ontología».
El disparador de ADR: Sí. La conformidad bitemporal del extractor no es un detalle de implementación: ata extract.rs al contrato que ADR-041 declara, y hoy nada la exige. Quedó sin declarar en la sesión que la descubrió — que es exactamente lo que este expediente registra en su lesson_debt, junto con la decisión de identidad de entidad que sigue sin tomar.
abrir el expediente completo →Caso 0/10: el gate que informaba cero
Lo que había que pedirAntes de citar una ruta declarada por la ontología, ejecútala contra el disco. 1. Toda `artifact_paths` se resuelve contra las raíces DECLARADAS (raíz del proyecto, ONTOREF_ROOT, `.ontoref/`), nunca contra el cwd ni contra una sola de ellas. 2. Una ruta que no resuelve bajo ninguna raíz visible es Hard. Una cuyo árbol no está en esta porción es Unknown — y Unknown se cuenta, jamás se pliega sobre Hard. 3. El resultado declara contra qué raíces midió. Un recuento sin sus coordenadas es un número suelto buscando una frase que lo acoja.
| Microtarea | Verificable |
| Resolver cada artifact_paths contra las raíces declaradas | ontoref validate ontology --fmt json | jq .hard — y roots_resolved_against presente en la salida |
| Separar «no resuelve» de «no puedo ver su árbol» | el resumen distingue hard / soft / unknown; unknown > 0 no cierra el gate |
| Hacer que el validador pueda fallar y que alguien lo ejecute | validate ontology --fail-on-hard devuelve 1 con hallazgos · el hook ontology-integrity aparece en pre-commit run --all-files |
La puerta antes de delegar: Un validador que no devuelve código de salida y al que no llama ninguna cadena no es un gate: es un informe que nadie pidió. Antes de confiar en su verde hay que poder verlo rojo.
El disparador de ADR: Ninguno nuevo. ADR-070 ya decide que el pipeline de publicación es gobernado y no recordado, y ADR-066 que decide la comprobación y no quien informa. Esto es su aplicación a la superficie de la ontología, no una decisión nueva — criterio 4 del test adr? no se cumple.
abrir el expediente completo →Expediente 0/5: el verde que apagó la pregunta
Lo que había que pedirAntes de crear ninguna autoridad de dominio: ¿lo declara ya alguien? Busca domain_provides con ese id en los proyectos registrados, y si aparece, el hueco no es la autoridad — es dónde puede vivir su catálogo.
| Microtarea | Verificable |
| Buscar quién declara el id antes de crear nada | rg 'domain_provides' en los manifests de los proyectos registrados; el id aparece o no aparece |
| Leer la severidad del hallazgo, no sólo su existencia | ontoref bond validate --fmt json | jq '.[].severity' — unverifiable no es error |
| Comprobar el código de salida antes de llamarlo defecto | ontoref bond validate; echo $? — sale 0, luego no gobierna nada |
| Si se crea autoridad, comprobar que el verde no es por aplanamiento | el gate del punto (1) de lesson_debt, que hoy no existe |
La puerta antes de delegar: Un check que se niegue a crear code/domains/<id>/ cuando <id> ya está reclamado por un domain_provides en un proyecto del registro, nombrando el proyecto que lo reclama. Falsable hoy mismo: htmx-site lo dispararía, y ninguno de los cinco dominios existentes lo hace.
El disparador de ADR: Cuatro instancias medidas de la misma falta — rustelo/htmx-site, librosys/DD7pasos, provisioning/libre-wuji, personal — donde el modelo sabe nombrar la relación proyecto↔dominio y no la relación target↔dominio. Con cuatro casos independientes, el enum crece por evidencia: eso es un ADR, no un parche.
abrir el expediente completo →Caso 111/0: la regla que no podía ver
Lo que había que pedirAntes de dar por buena una regla que se niega, hazla negarse. 1. Rompe la entrada a propósito y ejecuta. Una regla que no has visto fallar no es una regla: es una intención con sintaxis. 2. No juzgues por el código de salida sin comprobar que el código de salida puede expresar el fallo. Aquí no podía: `describe <desconocido>` sale 0 por diseño, y hay un test que lo fija. 3. Átate a lo que el productor declara por contrato — el marcador, la respuesta vacía — no a la señal que resulte más cómoda de leer.
| Microtarea | Verificable |
| Falsar la regla antes de confiar en ella | apuntar un nivel a un subcomando inexistente y obtener exit 1 nombrando el nivel |
| Verificar que la señal usada puede expresar el fallo | ontoref describe no-such-subcommand-xyz; echo $? — si devuelve 0, el exit code no es la señal |
| Aplicar el límite en TODOS los puntos de entrada | view mount y view mount-record devuelven ambos el bloque budget |
La puerta antes de delegar: Una regla que se niega no se declara terminada cuando compila: se declara terminada cuando se la ha visto negarse sobre un caso real. Sin esa observación, lo único demostrado es que el código se ejecuta.
El disparador de ADR: Ninguno nuevo — es la aplicación de ADR-066 (decide la comprobación, nunca quien informa) a la superficie de provisión. Lo que sí quedó registrado es la migración 0056, porque cambia por defecto una superficie visible para consumidores.
abrir el expediente completo →Expediente 18/0: el verbo que informó un alta
Lo que había que pedirUn verbo dice que escribe. Antes de creerle, mira el fichero. 1. Contrasta contra el ARTEFACTO, no contra otra superficie. Tres superficies coherentes entre sí no son tres confirmaciones: pueden ser un solo error repetido. 2. Un verbo que declara escribir se comprueba con `git diff` o con la mtime del fichero, nunca con su propio mensaje de salida. 3. Si el sistema tiene un registro de acciones, pregunta quién lo EMITE: una entrada escrita AL LADO de la escritura puede registrar una mutación que no ocurrió. 4. Y cuando encuentres uno, no lo arregles solo: cuenta cuántos verbos declaran lo mismo. Uno es una errata; el número dice si es un caso.
| Microtarea | Verificable |
| Comprobar el efecto contra el fichero, no contra la salida | git diff --stat .ontoref/reflection/backlog.ncl tras ejecutar el verbo — cero líneas es el hallazgo |
| Desconfiar de superficies que se confirman entre sí | mensaje, registro y manual coincidían; el fichero no. La coincidencia de tres no es prueba |
| Preguntar quién EMITE la entrada del registro | rg -n 'log_action' code/crates --type rust — la entrada va al lado de la escritura, no la emite ella |
| Contar el resto antes de dar por cerrado el arreglo | 233 llamadas al registro, 65 declaran escritura; auditar las 65 y no solo la que se cayó |
La puerta antes de delegar: Antes de aceptar «hecho» de un verbo que declara escribir, tiene que estar escrito con qué comando se comprueba el FICHERO. Aquí no lo estaba, y la deriva sobrevivió justo por eso: no era contradictoria, era consistente — mensaje, registro y manual decían lo mismo, y ninguno había mirado el disco. Un contraste entre superficies que se derivan unas de otras no es un testigo: es el mismo error citado tres veces.
El disparador de ADR: Sí, y sigue sin declararse como restricción: que la entrada del registro de acciones la EMITA la escritura en vez de ir a su lado. Mientras vayan separadas, una mutación que no ocurre se puede registrar igual — y eso es este caso, no su anécdota. Dirección: bl-045.
abrir el expediente completo →Caso 2/8: la nota que apagó la alarma
Lo que había que pedircss el tema de los tags <pre> se arregó para los expedientes en modo light pero en los post no lo está [captura adjunta] Antes de escribir una sola regla: 1. Mide el DOM, no leas hojas de estilo. Para cada <pre> de la página: clases del <code>, `getComputedStyle(...).color` calculado, y el contraste contra el fondo. Pega la salida. Una causa sin esa tabla es una hipótesis, no un diagnóstico. 2. Comprueba QUÉ HOJAS CARGA la página antes de razonar sobre su cascada. Una regla leída en un fichero que la página no enlaza es una regla que no existe. 3. Compara con el caso que SÍ funciona (un expediente) en el mismo turno: la diferencia entre los dos es el diagnóstico, y adivinarla sale más caro que medirla. 4. Después del arreglo, vuelve a medir los mismos números. Y no escribas en el comentario ninguna afirmación sobre una forma que no hayas renderizado.
| Microtarea | Verificable |
| Enumerar las hojas que la página carga de verdad | curl -s <url> | rg -o 'href="/styles/[^"]*"' pegado — cero razonamientos de cascada sobre ficheros ausentes de esa lista |
| Medir el color calculado de cada bloque de código en el tema reportado | getComputedStyle(code).color por bloque, con su clase — cero causas declaradas antes de esa tabla |
| Comparar contra el caso que funciona en el mismo turno | expediente y post medidos con la misma consulta; la diferencia observada es la causa, no la inferida |
| Re-medir tras el arreglo, en los dos temas | contraste calculado ≥ 4.5:1 en claro Y en oscuro — el arreglo se declara con el número, no con la intención |
| No afirmar cobertura no renderizada en el comentario del arreglo | toda frase del comentario que hable de una forma nombra la medición que la respalda, o no se escribe |
La puerta antes de delegar: Un arreglo de presentación no se declara hasta que el número medido en el DOM está pegado, antes y después, en el tema reportado. Sin eso el agente entrega su razonamiento sobre la cascada, no la página — que es exactamente lo que ocurrió: dos hojas leídas, cero consultas, y la única que hacía falta habría dado la respuesta entera.
El disparador de ADR: Ninguno nuevo: ADR-072 ya declara que un mecanismo declara su extensión y que la página es la publicación. Lo que falta no es la decisión, es el gate — ver lesson_debt.
abrir el expediente completo →Expediente 0/8: el consejo que no se guardaba la respuesta
Lo que había que pedirLa página reúne replays, no expedientes. Antes de tocar nada: dime cuántos casos hay y cuántos tienen replay, con el comando que lo cuenta. Si la respuesta es «faltan replays», eso es `mode:generate-expediente` paso 6, y lo corres — no lo compones por fuera.
| Microtarea | Verificable |
| Contar casos y replays | nu scripts/build/gen-expediente.nu --check |
| Confirmar que la página sirve lo que el disco dice | curl -s --compressed localhost:3030/expedientes | grep -oE 'href="/expedientes/casos/[^"]*"' | sort -u |
| Confirmar que hay una ejecución abierta antes de reportar pasos | ontoref run status — y leer la salida, no el código de salida |
| Confirmar que lo editado es lo que corre | just check-runtime |
La puerta antes de delegar: No componer ni delegar nada hasta que ontoref run status devuelva una ejecución de este modo. Devolvió null toda la sesión y nadie lo miró.
El disparador de ADR: «¿Puede un mecanismo declararse consejo y no guardar la respuesta?» Es decisión arquitectónica con alternativa rechazada conscientemente —la puerta bloqueante— y con restricción duradera sobre todo instrumento consultivo futuro.
abrir el expediente completo →Caso 23/3: la confesión que sobrevivió a su hueco
Lo que había que pedirAntes de decidir qué hacer con ellas: cada una debería declarar en `gate_source` qué la verificaría. Léelas y dime cuántas afirman una ausencia que ya no es cierta — comprobando el verbo que nombran contra el dispatcher, no contra tu recuerdo.
| Microtarea | Verificable |
| Leer qué significa gateable = false en el esquema, no en la memoria | rg -n 'CONFESSION' .ontoref/adrs/adr-schema.ncl |
| Extraer el gate_source de cada restricción confesada | ontoref adr show <id> --fmt json | jq -r '.. | objects | select(.gateable? == false) | .gate_source' |
| Clasificar por AFIRMACIÓN de ausencia, nunca por existencia del verbo | governs confessions --fmt json | jq '.detail[] | select(.state=="resolved") | .adr' — no debe contener adr-073, adr-074 ni adr-088 |
| Probar el clasificador contra una configuración de prueba deliberada antes de confiarlo | inyectar «which does not exist» sobre un verbo existente → aparece state=="resolved"; revertir → desaparece |
La puerta antes de delegar: La regla de clasificación —ausencia AFIRMADA, no superficie nombrada— escrita y observada FALLANDO sobre una configuración de prueba antes de barrer el corpus. Sin ella el barrido produce una lista con tres falsos positivos de cada cinco que se lee como hallazgos.
El disparador de ADR: El momento en que esa regla dejó de ser heurística y pasó a decidir qué confesión se toca y cuál no. Es una restricción que otros heredan, y habría disparado adr? ahí — no tres pasos después.
abrir el expediente completo →Caso 5/0: el despacho que sólo hablaba con el terminal
Lo que había que pedirAntes de opinar sobre dónde vive un dominio, mide desde qué superficies se alcanza hoy su despacho y por qué. Y cualquier premisa que venga de tu memoria: ábrela, cítala por fichero y línea, o no la uses.
| Microtarea | Verificable |
| Medir cuántas rutas del daemon despachan un comando de dominio, antes de proponer nada | grep -rn "commands.nu\|domain_command" code/crates/ontoref-daemon/src | wc -l → 0 |
| Medir el patrón de delegación que YA existe, en vez de inferirlo de un fichero | grep -rn 'use reflection/modules/' code/crates/ontoref-daemon/src --include=*.rs → 5 líneas: api.rs:1825, api.rs:1982, mcp/mod.rs:2343, 2487, 2559 |
| Citar toda premisa de memoria por fichero y línea antes de partir de ella | abrir el fichero de memoria citado y buscar su propia caducidad: grep -n 'SUPERSEDED' <fichero> → el cuerpo dice SUPERSEDED IN PART y domains está en el superset horneado |
| Escribir la célula y verla FALLAR antes de mover una línea de política | añadir la invocación directa al envoltorio → EXIT 0 → 1 nombrando install/ontoref-global:731; revertir → EXIT 0 |
| Comprobar la paridad del módulo contra el bash enviado, dominio por dominio | domain resolve-alias + domain activation sobre pm·prov·rustelo·librosys·personal·framework y un token desconocido → pm=layer1, prov=bond, rustelo=bond, desconocido devuelto sin cambio |
La puerta antes de delegar: La célula capability-reachable-beyond-the-terminal escrita y observada FALLANDO antes de mover una sola línea. Sin ella, el movimiento se declara hecho y nada distingue «la política está en el módulo» de «la política está en los dos sitios», que es la forma en que este defecto vuelve.
El disparador de ADR: El momento en que se decidió que la DETECCIÓN se queda en el envoltorio y la INVOCACIÓN no. No es una preferencia de estilo: es una regla que hereda cualquier capacidad futura, y separa un coste por invocación de una política. Ahí habría disparado adr?, no tres pasos después.
abrir el expediente completo →Caso 2/2: los dos pasos que no eran suyos
Lo que había que pedirLéelo y dime qué tiene que ver con este proyecto. No escribas nada todavía. 1. Si al leer encuentras una asimetría entre lo que el artículo describe y lo que aquí hay, NÓMBRALA Y PÁRATE. Que sea real no la convierte en trabajo de esta sesión. 2. Toda afirmación sobre el estado del sistema va con el comando que la produjo, o va con «no lo he mirado». No hay término medio. 3. Si el registro de la lectura toca un modo, dime qué pasos declara `Human` antes de ejecutar ninguno. Esos los doy yo.
| Microtarea | Verificable |
| Leer y devolver el juicio, sin escribir en ninguna superficie | git status --porcelain vacío al terminar la lectura |
| Antes de ejecutar un modo, listar los pasos que declara Human | ontoref mode show <id> --fmt json | jq -r '.steps[] | select(.actor=="Human") | .id' |
| Comprobar cada afirmación sobre el sistema contra su comando | cada afirmación del informe cita el comando que la produce, o dice «no lo he mirado» |
| No asignar veredicto: es paso de humano y enruta trabajo por regla | step report avisa cuando un agente reporta un paso Human — just test-run-actor |
La puerta antes de delegar: Un DAG que declara el dueño de cada paso no protege nada mientras nadie compare ese dueño con quien reporta. Antes de soltar a un agente sobre un modo con pasos Human, la comparación tiene que existir y haberse visto avisar; si no, la etiqueta es documentación y el agente cerrará el DAG entero en verde corrigiéndose a sí mismo.
El disparador de ADR: Ninguno, y el intento de que lo hubiera es parte del caso: se propuso un ADR para cerrar el hueco y falla los criterios 1 y 3 del propio test de cinco — ninguna alternativa rechazada, y se revierte borrando dos ficheros. El arreglo era mecanismo, no documento; proponer el documento fue reproducir el diagnóstico dentro del remedio.
abrir el expediente completo →Caso 2/26: la regla que estaba en el contexto
Lo que había que pedirCambia la decisión del ADR: el veto desaparece, no se reescribe con otro criterio. 1. Toca sólo ese ADR. Si la misma regla está copiada en otro sitio, dime dónde y no lo edites. 2. Un campo opcional se queda vacío salvo que tengas con qué llenarlo. Cada `ref` de un `warrant` tiene que resolver a algo que existe y es registro: un ADR, una entrada de custodia. Nunca a un fichero de sesión. 3. Si al escribir algo tienes que avisarme de que es provisional o inventado, no lo escribas: para y pregúntame. Un aviso al final no deshace lo que se construyó encima.
| Microtarea | Verificable |
| Enmendar la decisión en el único fichero pedido | git status --porcelain lista sólo ese ADR |
| Cada ref del warrant resuelve a registro existente | nickel export <adr> | jq -r '.amendments[-1].warrant[] | "\(.kind) \(.ref)"' y ontoref adr show <ref> para cada 'Adr; ninguna entrada 'Session |
| Ninguna ruta al árbol de sesión en el ADR antes de construir encima | ontoref adr validate sin la línea path(s) into .coder/ |
| Contar líneas, no coincidencias, cuando la cifra va a un ADR | rg -c (líneas) frente a rg -o | wc -l (coincidencias): si difieren, la cifra dice cuál es |
La puerta antes de delegar: Antes de soltar a un agente sobre un ADR, la comprobación tiene que rechazar lo que la regla prohíbe, no una grafía parecida, y tiene que ejecutarse sin que nadie se acuerde de ejecutarla. Hoy no se cumple ninguna de las dos: el patrón señala líneas que no citan y deja pasar 24 de 26 warrant de sesión, y ningún hook de los tres proyectos lo ejecuta. Esa puerta no existía antes del incidente y sigue sin existir entera después.
El disparador de ADR: Lo disparó el operador, no un mecanismo: la pregunta «¿de qué sirve lo que se registra en el CLAUDE.md?» llevó a pedir el validador, y el validador llevó a ADR-112. La restricción que ya decía que un check mide la capacidad y no un proxy es de ADR-072, y es Soft: no disparó nada.
abrir el expediente completo →Los casos sin replay — lo que esta página no puede proyectar
Un caso lleva su replay, o declara por qué no lo lleva. Callar no es una opción: ReplayAccounted lo rechaza en la fuente. ⌛ pendiente es deuda pagable, y caduca —los artefactos de sesión se podan, y la memoria no es fuente—. ⊘ sin fuente es un caso cuya sesión no dejó el prompt de apertura en ningún artefacto: ese no se salda, se cierra, y es un hallazgo —dice que la sesión no estaba instrumentada—. Cuando uno se escribe, desaparece de aquí solo.
| 404-PAP | ⌛ pendiente | El caso es anterior al campo —su .ncl es del 2026-07-11 y el replay se introdujo el 2026-07-16— y nunca se rehízo hacia atrás. Hay un artefacto candidato que lleva su propio nombre: .coder/2026-07-11-deriva-hardcoded-anti-pap.review.md. Lo saldaría comprobar si conserva el prompt de apertura y, si lo conserva, escribir el replay nombrándolo; si no, esto pasa a 'NoVerbatimSource. |
| 404-PAP-bis | ⌛ pendiente | Anterior al campo —su .ncl es del 2026-07-12— y nunca rehecho hacia atrás. Es la recaída de 404-PAP y se escribió al día siguiente, así que lo saldaría el artefacto de la sesión del 2026-07-12, o lo que quede en .coder/ de aquel arreglo. Si ninguno conserva el prompt de apertura, esto pasa a 'NoVerbatimSource. |
| 1/1852 | ⌛ pendiente | Escrito el 2026-07-17 sin que nada pidiera el campo. Hay artefacto candidato: .coder/2026-07-16-contrato-del-artefacto-emitido.plan.md, de la sesión cuyo hueco es exactamente el que este caso declara en su lesson_debt. Lo saldaría verificar que conserva el prompt de apertura y escribir el replay nombrándolo. |
| 358/980 | ⌛ pendiente | Escrito el 2026-07-17 y salió sin replay porque nada lo pedía. Lo saldaría reconstruirlo del artefacto de aquella sesión y nombrarlo en prompt_before_source; si no conserva el prompt de apertura, pasa a 'NoVerbatimSource. |
| 8/4 | ⌛ pendiente | El caso trata de una disciplina sin disparador, y su propio replay ausente era exactamente eso hasta esta línea: un campo disponible que nada disparaba. Lo saldaría reconstruirlo del artefacto de la sesión del 2026-07-17 que lo produjo. El disparador que faltaba ya existe: es la puerta ReplayAccounted, que obliga a escribir esto. |
| 4/5 | ⊘ sin fuente | La sesión no dejó artefacto con su prompt de apertura, y Replay exige prompt_before_source. Reconstruirlo sería la ficción que el contrato del replay existe para rechazar. Lo saldaría instrumentar la sesión como hizo 2/8 — persistir la transcripción bajo refs:sessions/ — y entonces la deuda pasa de impagable a pendiente. Nótese además que el disparador de este caso no fue un prompt sino un ACTO (./update-content.sh), lo que sugiere que el replay de un incidente de ENTREGA quizá deba anclarse en el comando, no en la petición. |
La deuda viva de la serie — lo que aún no exige nada
Cada ⊘ es una lección que hoy nada exige, con la dirección de quien la saldaría — declarada en el dato del caso, nunca en una intención. Cuando una se salda, desaparece de aquí sola.
| 404-PAP | ⊘ Queda una cosa, y es la que hace que las de arriba muerdan o no: nada ejecuta la restricción. El justfile de rustelo no llama a ningún validador de ADRs — 23 restricciones en 8 ADRs, cero ejecutadas por receta o CI — así que la regla que ahora prohíbe este defecto está tan escrita, y tan callada, como lo estaba ADR-002 durante meses. La saldaría una receta just en la cadena de rustelo que las corra y reporte por restricción. Y con ella se arrastran dos que tampoco tienen dueño: la cura de la instancia sigue sin hacer un commit (git status → M), y templates/ no está versionado — un git clean se lleva el backport y nadie se entera. El expediente 8/0 cuenta esto entero. |
| 404-PAP-bis | ⊘ La recaída tenía causa, y no era la memoria: el primer arreglo nunca había vuelto a la plantilla, así que no era recaída sino reinfección desde la fuente. Ya volvió — el backport está en las dos plantillas y la lista a mano está prohibida por una restricción tipada. Lo que queda es lo de siempre: nada la ejecuta. El justfile de rustelo no llama a ningún validador, así que la puerta que impediría la próxima reinfección existe y está callada. La saldaría una receta just en su cadena. El expediente 8/0 cuenta por qué el arreglo tardó meses en volver a casa. |
| 1/1852 | ⊘ La frontera sigue abierta donde el dato se vuelve texto: lo que se escribe tras ella se publica bajo palabra. Lo saldaría un contrato sobre el artefacto EMITIDO —un esquema del recurso generado—, no sólo sobre su fuente. |
| 8/0 | ⊘ Nada ejecuta la restricción nueva: la receta que corra las 23 y reporte por restricción está sin escribir — y sin ella, esto se vuelve a pudrir exactamente igual. La saldaría una receta just en la cadena de rustelo, fuera de check-strict hasta que los 11 hits reales estén triados. Y quedan cuatro sin dueño: la tercera lista de htmx_pages.rs (3 hits), los 11 hits reales de no-hardcoded-route-paths, templates/ sin versionar —la más grave, y ningún ADR dice si es política o descuido—, y un drift-check instancia ↔ plantillas, que no tiene ni mecanismo ni dueño. |
| 8/4 | ⊘ «--artifacts» declarado list<string> e inalcanzable desde el envoltorio del CLI — los cinco runs históricos llevan la columna vacía por eso; lo salda aceptar cadena separada por comas o una opción repetible. «verify» en cero de los once pasos del modo; aprobado añadirlo a los tres con oráculo (assemble_case: el .ncl exporta; render: el .md reproduce; publish: cases-check). La lista de pasos del howto no se coteja contra el DAG; lo salda una puerta que compare sus ids contra mode show --fmt json. Y la de fondo, sin puerta posible: una frase no es un artefacto — el único oráculo del canal humano↔agente es el humano. |
| 0/2 | ⊘ 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ó. |
| 63/0 | ⊘ Ninguna restricción tipada ata extract.rs al contrato que ADR-041 declara. La puerta nueva comprueba FRESCURA —¿se reconcilió?— y no CONFORMIDAD BITEMPORAL —¿se reconcilió emitiendo Retract y conservando lo superseded?—. Un extractor reescrito mañana en monotemporal pasaría check-substrate en verde, que es la forma exacta de este caso repetida sobre su propia cura. Lo saldaría una restricción en ADR-041 cuyo oráculo fuese el corpus de pruebas que esta sesión dejó, y la decisión de identidad de entidad (edge:{from}:{to}) que quedó sin tomar. Y hay una segunda deuda, mayor y más incómoda: la historia bitemporal existe en disco y ningún binario ni endpoint expone as_of. Nadie puede mirarla. Queda a la espera de decidir si una superficie puede responder por encima de su tier. |
| 0/5 | ⊘ Quedan dos tercios, y decirlo es el campo. (2) Que la distinción unverifiable/error deje de vivir en un comentario y sea declarable sobre cualquier comprobación — el umbral de habitabilidad que plane-habitability lleva declarado como claim-only. (3) El sitio donde un dominio de segundo nivel aloja su catálogo, que es materia de ADR y tiene ya cuatro instancias medidas. El gate del punto (1) rechaza el sitio equivocado; ninguno de los dos sabe todavía cuál es el correcto, y esa diferencia es justo lo que el gate se cuida de no afirmar. |
| 18/0 | ⊘ Nada compara un verbo que declara escribir con si escribe. El despachador hace 233 llamadas al log de acciones, 65 declaran escritura, y la auditoría del 2026-08-05 encontró dos que no mutan nada; ambas se corrigieron a mano y nada impide la tercera. Lo saldaría que la entrada del log la EMITA la escritura en vez de ir a su lado — así una mutación que no ocurre no se puede registrar. Dirección: bl-045. |
| 2/8 | ⊘ Nada rechaza hoy un arreglo de presentación cuya JUSTIFICACIÓN afirma una cobertura que nunca se renderizó. ADR-072 gobierna checks y mecanismos; un comentario de código no es ninguno de los dos, y por eso sus tres constraints Hard pasaron de largo por la frase que abrió este caso. Lo que lo saldaría: un gate que, ante un cambio en una hoja de estilo servida, exija en el mismo cambio el número medido en el DOM —antes y después, en los dos temas— y que rechace el commit sin él; medible con lo que ya existe (getComputedStyle y un cálculo de contraste), sin protocolo nuevo. Nombrado, no encogido de hombros, y NO sustituido por «revisar mejor los comentarios», que es una promesa de disciplina y es exactamente lo que falló: la frase la escribió alguien que estaba siendo cuidadoso. |
| 0/8 | ⊘ Nada obliga a mirar la razón. interaction pointers empareja y reporta, y ninguna puerta lo lee — a propósito: la tensión que mide es Spiral y un Hard biconditional ahí es el patrón que el proyecto prohíbe por nombre. Pero el resultado honesto es que esta lección quedó SERVIBLE y su consumo SIN OBLIGAR, que es la misma forma del defecto que el caso denuncia, un plano más arriba. Y hay una apuesta sin cobrar: que la elección conste no demuestra que vaya a elegirse mejor. Lo saldaría una razón medida en el tiempo — el proxy de emergencia que la tensión enforcement-vs-emergence declara ausente. Se falsaría así: con el rastro existiendo y siendo leído, si el DAG se sigue declinando 8 de 8 con el mismo destrozo, la cura es insuficiente. Aparte y anotado como bl-051: el almacén de ejecuciones no registra pasos con dos sesiones concurrentes, así que hoy la evidencia de que un DAG se siguió depende de que nadie más esté trabajando en el árbol. |
| 23/3 | ⊘ La sonda no está en ninguna cadena automática: cero ocurrencias en .pre-commit-config.yaml, y el único modo que la invoca es ordinary-act. Un acto que nunca se abre nunca la corre, así que la lección alcanza justo a quien ya adoptó el modo — la misma forma que este caso denuncia, un piso más arriba. Y 23 de 36 confesiones siguen unnamed: su gate_source no nombra superficie sondeable, así que el mecanismo no puede decir nada sobre ellas, ni que estén vigentes ni que estén caducadas. Y el conjunto CRECE POR CONSTRUCCIÓN: cada ADR nuevo que confiese algo sin nombrar superficie sondeable lo aumenta. Ocurrió el mismo día de este expediente — al aceptarse adr-095, su restricción a-new-refusal-is-conditional-on-the-act entró directa en unnamed y el reparto pasó de 22+13 a 23+13. Sin una puerta que lo cuente, ese crecimiento sólo se ve si alguien corre la sonda a mano, que es esta misma deuda en bucle. |
| 5/0 | ⊘ Las tres deudas se pagaron, y lo que queda es un LÍMITE declarado, no una tarea pendiente: la regla general que se pidió —«un gancho lleva un puntero, nunca un hecho»— no tiene oráculo estático, porque distinguir un puntero de una afirmación es una lectura y no un rg. Lo que sí se comprueba es el modo de fallo que costó: un hecho CADUCADO en un gancho, y una memoria SIN gancho. El límite se declara dentro de la propia célula, donde lo encuentra quien la lea. |
| 2/2 | ⊘ Queda entera la mitad que exige decidir, y el almacén de ejecuciones se sigue particionando por actor — el test de este caso necesita dos ejecuciones para hacer una pregunta, y se deja visible por eso. Las dos preguntas que gobiernan el resto —qué PRUEBA que un humano reportó un paso, y si el desajuste debe BLOQUEAR— están planteadas con sus alternativas en bl-052, y no se repiten aquí: un expediente que copia el contenido de la superficie que lo gobierna es la misma figura que este caso documenta. |
| 2/26 | ⊘ La regla está en el mecanismo con un criterio que no es el suyo. Lo saldaría una enmienda de ADR-112 que decida a qué resuelve un warrant 'Session y qué cuenta como citar el árbol de sesión, comprobada sobre el export tipado y con un test que la vea rechazar una cita y aceptar una mención de la capa. Hasta entonces quedan 13 citas reales sin enmendar en ontoref, entre ellas la restricción Hard de adr-023 que sólo pasa donde existe el overlay, y 24 warrant 'Session que no ve ninguna comprobación. Y nada la ejecuta antes de un commit en ninguno de los tres proyectos medidos. |