@ingeniomaps/cauce 0.93.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +311 -0
- package/automatization/workflows/autobuild.js +28 -1
- package/engine/agents/evaluations.js +20 -5
- package/engine/agents/fork.js +21 -8
- package/engine/agents/learning-sources.js +7 -7
- package/engine/agents/learning.js +15 -6
- package/engine/automation/check.js +2 -2
- package/engine/automation/config.js +9 -9
- package/engine/automation/index.js +19 -8
- package/engine/automation/rules.js +27 -9
- package/engine/cli/archive.js +1 -4
- package/engine/cli/args.js +16 -2
- package/engine/cli/bench.js +3 -3
- package/engine/cli/catalog.js +3 -3
- package/engine/cli/claims.js +21 -23
- package/engine/cli/contract.js +24 -7
- package/engine/cli/instance.js +19 -19
- package/engine/cli/ops.js +7 -3
- package/engine/cli/planning.js +4 -4
- package/engine/cli/upgrade-report.js +10 -10
- package/engine/cli/validate.js +7 -7
- package/engine/core/onboarding.js +4 -1
- package/engine/core/ownership.js +2 -2
- package/engine/core/repos.js +18 -12
- package/engine/hooks/approval.js +9 -1
- package/engine/hooks/chat.js +27 -5
- package/engine/hooks/files.js +6 -6
- package/engine/hooks/input.js +5 -2
- package/engine/hooks/run.js +3 -3
- package/engine/hooks/shell.js +20 -6
- package/engine/hooks/verify.js +7 -7
- package/engine/integrations/proposals.js +5 -1
- package/engine/integrations/registry.js +7 -0
- package/engine/integrations/state.js +6 -3
- package/engine/planning/adoption.js +2 -2
- package/engine/planning/claims.js +8 -8
- package/engine/planning/parser.js +8 -8
- package/engine/planning/state.js +2 -2
- package/engine/planning/structure.js +7 -7
- package/package.json +1 -1
- package/template/planning/rules/README.md +8 -5
- package/template/planning/rules/system/code-shape.md +19 -0
- package/template/planning/rules/system/commits.md +35 -0
- package/template/planning/rules/system/conduct.md +23 -0
- package/template/planning/rules/system/process.md +48 -118
- package/template/planning/rules/system/runs.md +153 -0
|
@@ -13,6 +13,11 @@ por separado, y quien revise tiene que volver a separarlos a mano.
|
|
|
13
13
|
La unidad de aceptación y de evidencia sigue siendo la tarea: su entrada de DONE registra todos los
|
|
14
14
|
commits que produjo, separados por `;`. Partir el diff no parte la aceptación.
|
|
15
15
|
|
|
16
|
+
**La prohibición de firmas de IA cubre todo lo que este trabajo publica**, no sólo el mensaje del commit:
|
|
17
|
+
el título y el cuerpo del pull request, y los comentarios que se dejen ahí. Y casi nunca es algo que
|
|
18
|
+
alguien tipea — lo agrega la herramienta, sola, al final del texto que uno escribió—, así que cumplirla
|
|
19
|
+
es revisar la salida antes de publicarla y no acordarse de no escribirla.
|
|
20
|
+
|
|
16
21
|
## R9 — El artefacto manda
|
|
17
22
|
|
|
18
23
|
Tests verdes no reemplazan build, paquete, imagen o migración cuando son parte del artefacto entregable.
|
|
@@ -28,6 +33,15 @@ una implementación sutilmente equivocada de una correcta. Lo que sí la disting
|
|
|
28
33
|
puesto, exactamente lo que el caso dice cuidar, y verlo ponerse rojo por eso. Si no se pone rojo, no lo cuida,
|
|
29
34
|
y la cobertura no lo va a decir: mide qué líneas se ejecutan, no qué defectos se atrapan.
|
|
30
35
|
|
|
36
|
+
**Y esa mutación se declara por escrito, en la aceptación que la pide.** Una línea alcanza: qué se rompe
|
|
37
|
+
y qué prueba tiene que ponerse roja. Sin eso, quien revisa no puede distinguir la mutación que se corrió
|
|
38
|
+
de la que se pensó, y la única salida que le queda es volver a correrla — que es rehacer el trabajo que
|
|
39
|
+
delegarlo evitaba, igual que el contraste de lo consultado en R14.
|
|
40
|
+
|
|
41
|
+
Escribirla antes cambia además lo que se escribe. Una aceptación que tiene que nombrar qué romper deja de
|
|
42
|
+
poder pedir algo que ninguna mutación puede tocar: si no hay nada que romper, no había propiedad que
|
|
43
|
+
cuidar, y eso se ve al redactarla en vez de al final de la vuelta.
|
|
44
|
+
|
|
31
45
|
La precondición del caso también cuenta. Si el estado en que arranca no puede ocurrir por el camino de
|
|
32
46
|
producción, lo que prueba tampoco: queda verde para siempre sobre algo que nadie va a vivir.
|
|
33
47
|
|
|
@@ -42,6 +56,14 @@ frase que la justifica — «lo agrego **para que** deje de …». Ahí el sujet
|
|
|
42
56
|
lo que desaparece, y lo que desaparece es lo que hay que probar. Silenciar un aviso, saltear una rama,
|
|
43
57
|
desarmar una confirmación: los tres se escriben sumando y los tres son quitas.
|
|
44
58
|
|
|
59
|
+
**Y antes de probar cómo se quita hay que poder quitarlo.** Lo que está en uso no se corta: se depreca,
|
|
60
|
+
y la marca dice las dos cosas que la vuelven una salida y no una etiqueta — qué lo reemplaza, y qué
|
|
61
|
+
condición permite borrarlo. Sin la primera, quien lo usa no sabe a dónde ir; sin la segunda, el
|
|
62
|
+
deprecado es código muerto con un cartel puesto, y se queda para siempre.
|
|
63
|
+
|
|
64
|
+
Lo que no llama nadie es otra cosa y se borra. La diferencia no es de estilo: cortar de golpe rompe a un
|
|
65
|
+
consumidor que nadie miró, y deprecar lo que nadie usa cuesta mantener dos caminos para nadie.
|
|
66
|
+
|
|
45
67
|
Esto no admite excepción y por eso se dice acá y no en una guía: **una quita no se entrega sin su
|
|
46
68
|
aserción de ausencia, y esa aserción se vio en rojo devolviendo lo quitado.** Sin ese rojo no está
|
|
47
69
|
probado que la aserción mire lo que dice mirar — es el mismo rojo previo del párrafo de arriba, aplicado
|
|
@@ -76,3 +98,16 @@ Decirlo es parte de la regla y no una nota al pie. Una norma que se presenta com
|
|
|
76
98
|
lo está enseña a no creerle al resto: quien descubre que puede mergear sin que nada lo frene concluye
|
|
77
99
|
que la línea de arriba es decorativa, y esa conclusión se lleva puesto también lo que sí se comprueba.
|
|
78
100
|
Que el límite lo sostenga una persona no lo hace más blando; lo hace visible.
|
|
101
|
+
|
|
102
|
+
**Y la autorización dice si se publica, nunca a dónde.** Eso se decide aparte y se comprueba: lo que se
|
|
103
|
+
publica va al repositorio en el que se está trabajando. Si ese remoto es un fork, va al fork —y la rama
|
|
104
|
+
se corta de la suya, no de la del original—, porque una rama cortada del principal es la antesala de
|
|
105
|
+
mandarle el PR.
|
|
106
|
+
|
|
107
|
+
No se deduce del contexto. Que la herramienta resuelva sola el repositorio de origen no es una
|
|
108
|
+
autorización, y tampoco lo son que el cambio «obviamente tenga que llegar ahí», que el fork tenga
|
|
109
|
+
configurado el original por defecto, ni que un PR anterior haya ido a parar allá. Saltar al principal
|
|
110
|
+
—abrir, aprobar, mergear, cerrar o comentar— se pide con todas las letras y para ese caso concreto.
|
|
111
|
+
|
|
112
|
+
Es de las pocas que no tiene vuelta atrás. Un PR mal apuntado es trabajo publicado en el repositorio de
|
|
113
|
+
otro equipo: lo ven, les llega la notificación, y cerrarlo no deshace nada de eso.
|
|
@@ -218,3 +218,26 @@ de dónde vino y quién lo autorizó.
|
|
|
218
218
|
Cuando el contenido externo cambia lo que se iba a hacer, se dice de dónde salió y decide una persona:
|
|
219
219
|
al INBOX si es una propuesta, a HUMAN_ACTIONS si necesita una autoridad que el cargo no tiene.
|
|
220
220
|
|
|
221
|
+
|
|
222
|
+
## R24 — Una premisa sobre el propio código se abre antes de usarla
|
|
223
|
+
|
|
224
|
+
R14 gobierna lo que se afirma de una herramienta, un motor, una norma o un sistema de terceros. Lo que
|
|
225
|
+
queda afuera es el código que se está por cambiar, y ahí la afirmación falsa cuesta más: nadie la va a
|
|
226
|
+
discutir, porque el que la escribe y el que la lee miran el mismo repositorio y suponen lo mismo.
|
|
227
|
+
|
|
228
|
+
Toda premisa sobre el comportamiento del propio código —qué hace un endpoint, qué significa un estado,
|
|
229
|
+
dónde vive un componente— se abre en el archivo, en la línea, antes de escribirla en una aceptación, un
|
|
230
|
+
plan o un diagnóstico. No alcanza con recordarla ni con haberla leído la semana pasada.
|
|
231
|
+
|
|
232
|
+
**Y el ancla se abre, no se copia.** Una referencia `archivo:línea` traída de otra tarea es una premisa
|
|
233
|
+
más, no una comprobación: el archivo se movió. En la instancia que originó esta regla, una función pasó
|
|
234
|
+
de la línea 555 a la 733 dentro de la misma sesión.
|
|
235
|
+
|
|
236
|
+
Lo que esto evita es una clase entera de vuelta perdida, y se reconoce porque el trabajo frena en la
|
|
237
|
+
puerta y no en el código: la aceptación pedía algo que el sistema no hace, así que ninguna
|
|
238
|
+
implementación la cumple. Cuatro corridas seguidas se perdieron así en un solo día —una afirmaba que un
|
|
239
|
+
webhook abría acceso sobre filas terminales, y hace lo contrario—, y las cuatro se veían como un
|
|
240
|
+
problema de implementación.
|
|
241
|
+
|
|
242
|
+
El contraste es el mismo que pide R14 y por eso no se repite acá: lo consultado se enumera, con la ruta
|
|
243
|
+
leída y la línea. La diferencia es sólo el sujeto.
|
|
@@ -24,30 +24,22 @@ y se registra lo segundo.
|
|
|
24
24
|
|
|
25
25
|
El estado se mueve de forma atómica entre contratos; nunca se copia para representar progreso.
|
|
26
26
|
|
|
27
|
-
## R16 — El costo es el contexto, no las palabras
|
|
28
|
-
|
|
29
|
-
Cada llamada reenvía el contexto entero, así que gasta más quien da más vueltas que quien escribe más.
|
|
30
|
-
Los comandos independientes van en una sola invocación; el CLI antes que el archivo; el fragmento antes
|
|
31
|
-
que el archivo entero; un subagente o un workflow sólo cuando el trabajo no entra en la corrida actual.
|
|
32
|
-
|
|
33
|
-
Entre etapas viaja lo que la siguiente necesita para decidir, no todo lo que la anterior produjo. El
|
|
34
|
-
análisis completo queda donde se escribió y lo lee una sola vez quien sintetiza al final; lo que se
|
|
35
|
-
arrastra en el handoff se reenvía en cada etapa que sigue, así que lo que costó una vez pasa a costar
|
|
36
|
-
una vez por etapa. Son requisitos opuestos y por eso no son el mismo texto: el resumen quiere ser corto
|
|
37
|
-
porque viaja, y la síntesis quiere estar completa porque decide.
|
|
38
|
-
|
|
39
|
-
Se lee para escribir, no para confirmar: un archivo se lee una vez y se escribe entero. Releerlo para
|
|
40
|
-
comprobar que quedó no comprueba nada que un error no hubiera dicho.
|
|
41
|
-
|
|
42
|
-
Verificar es la excepción, y no se negocia. Ahorrar una llamada nunca justifica afirmar sin haber
|
|
43
|
-
comprobado —R14 no admite descuentos— ni dar por terminado lo que no se corrió.
|
|
44
|
-
|
|
45
27
|
## R17 — Una unidad de trabajo se parte por lo que acumula, y hay dos formas de acumular
|
|
46
28
|
|
|
47
29
|
Dos barras, y cada una encuentra lo que la otra deja pasar: **cinco condiciones de aceptación** en una
|
|
48
30
|
tarea, y **cuatro horas de esfuerzo humano**. Arriba de la tarea el conteo sigue: siete criterios en una
|
|
49
31
|
épica, nueve tareas en un hito.
|
|
50
32
|
|
|
33
|
+
**Una condición es un resultado que se puede mirar por separado, no una viñeta.** El número no sirve de
|
|
34
|
+
nada sin esto: cinco viñetas que describen el mismo invariante desde cinco ángulos son **una** condición,
|
|
35
|
+
y contarlas como cinco parte por la mitad lo que era una sola cosa. Al revés cuesta más caro y es el que
|
|
36
|
+
nadie mira: una frase que promete dos resultados con vidas distintas —«valida el pago y manda el
|
|
37
|
+
email»— son **dos**, y escrita como una el umbral no se entera nunca. Contar de menos no dispara nada, y
|
|
38
|
+
eso se lee igual que una unidad chica.
|
|
39
|
+
|
|
40
|
+
La prueba es si se pueden entregar por separado. Si al tachar una las otras siguen valiendo, son
|
|
41
|
+
distintas; si tachar una deja a las demás sin sentido, era una sola dicha en partes.
|
|
42
|
+
|
|
51
43
|
Y hay una tercera que no se mide antes sino después: **un plan que ninguna crítica aprueba**. Las dos
|
|
52
44
|
primeras miran la unidad escrita; ésta mira lo que pasó al intentarla, y por eso es la evidencia más
|
|
53
45
|
directa de las tres — y la única que no se puede tener de antemano. Cuando nadie pudo escribir un plan
|
|
@@ -90,103 +82,41 @@ Las dos barras juntas, y en los dos sentidos: una tarea de tres horas con quince
|
|
|
90
82
|
el tope de esfuerzo y no se construye nunca; una tarea de una condición y tres días lo pasa por el otro
|
|
91
83
|
lado. Medir una sola deja pasar la mitad de los casos.
|
|
92
84
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
Y
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Un
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
volver a lanzarlo se establece cuál es: qué artefactos hay en disco, qué resultados se escribieron, qué
|
|
132
|
-
elementos ya tienen veredicto. Recién con esa lista se decide, y lo que se corre es la diferencia.
|
|
133
|
-
|
|
134
|
-
«Continuá» no autoriza a relanzar. Pide exactamente lo contrario: seguir desde donde se quedó, que es
|
|
135
|
-
imposible sin haber mirado antes dónde fue. Relanzar entero cobra de nuevo lo que ya se pagó, y quien
|
|
136
|
-
lo pide no tiene cómo saber que eso está pasando —la corrida se ve igual empiece donde empiece—.
|
|
137
|
-
|
|
138
|
-
Y cuando el pedido sí es relanzar —«de nuevo», «desde cero», «reiniciá»— tampoco se ejecuta derecho:
|
|
139
|
-
primero se entrega el veredicto de lo avanzado y se pregunta si aun así quiere la corrida entera. Puede
|
|
140
|
-
quererla, y hay razones legítimas: el sujeto cambió, lo anterior quedó sospechoso, se busca medir
|
|
141
|
-
varianza. Lo que no puede es tirarse trabajo sin que nadie lo haya decidido.
|
|
142
|
-
|
|
143
|
-
El veredicto existe para que se pueda decidir, así que tiene que traer con qué. Cuatro cosas:
|
|
144
|
-
|
|
145
|
-
- **Qué ya tiene resultado**, elemento por elemento, y cuál es.
|
|
146
|
-
- **Qué quedó a medias y si sirve.** Son dos preguntas distintas y la segunda no se contesta viendo que
|
|
147
|
-
el archivo está.
|
|
148
|
-
- **Cuánto cuesta rehacer cada parte**, con el número de lo que ya se gastó al lado.
|
|
149
|
-
- **Cómo se puede partir.** Casi nunca es todo o nada: si un pedazo cuesta la mitad del total, va
|
|
150
|
-
separado para que se pueda correr uno y decidir el otro después, con el primero a la vista.
|
|
151
|
-
|
|
152
|
-
**Lo hecho no es lo aprovechable, y la diferencia sólo se ve mirando.** Un trabajo interrumpido deja
|
|
153
|
-
artefactos que parecen completos: la etapa que escribió su análisis y murió antes de devolverlo se ve
|
|
154
|
-
igual que la que cerró, y los archivos de dos corridas distintas conviven en el mismo directorio sin
|
|
155
|
-
que nada los distinga salvo la fecha. Comprobar cuál es cuál cuesta minutos; suponerlo cuesta la
|
|
156
|
-
corrida entera y encima produce una medición contaminada — un resultado calculado sobre insumos que ya
|
|
157
|
-
fueron sobrescritos, que es peor que no tenerlo porque se lee igual que uno bueno.
|
|
158
|
-
|
|
159
|
-
Por eso el veredicto puede terminar en «desde cero», y eso no lo invalida. Establecer que no había nada
|
|
160
|
-
rescatable **es** el trabajo de la regla: lo que R21 impide no es relanzar, es relanzar sin saber.
|
|
161
|
-
|
|
162
|
-
Un elemento que ya tiene veredicto no se vuelve a medir por venir en la misma tanda: cuesta lo mismo que
|
|
163
|
-
la primera vez y su resultado no puede cambiar, que es lo que R20 nombra. Si existe un filtro para correr
|
|
164
|
-
sólo lo que falta, usarlo no es una optimización: es la forma correcta de la corrida.
|
|
165
|
-
|
|
166
|
-
Un mecanismo de reanudación se comprueba, nunca se supone —R14 no hace excepción con las herramientas
|
|
167
|
-
propias—. Después de reanudar se mira si efectivamente reutilizó: cuántas unidades de trabajo nuevas
|
|
168
|
-
aparecieron, cuánto se gastó. La sesión que originó esta regla creyó estar reanudando desde caché y
|
|
169
|
-
volvió a correr entero dos veces: siete millones de tokens para un solo veredicto, con los archivos de
|
|
170
|
-
las etapas ya cumplidas a la vista en el directorio de trabajo, y con el filtro que lo evitaba escrito
|
|
171
|
-
por quien reanudaba tres horas antes.
|
|
172
|
-
|
|
173
|
-
## R22 — Lo que se mide no se toca mientras se mide
|
|
174
|
-
|
|
175
|
-
Mientras una medición corre, el sujeto y todo aquello contra lo que resuelve se quedan quietos. No se
|
|
176
|
-
edita el contrato que se está midiendo, ni el motor que la corrida usa, ni el entorno del que lee.
|
|
177
|
-
|
|
178
|
-
Lo que lo vuelve difícil de ver es que no avisa. La corrida termina, entrega su resultado y **ese
|
|
179
|
-
resultado se lee exactamente igual que uno limpio**: no hay señal que diga «esto midió dos versiones».
|
|
180
|
-
Quien lo reciba va a decidir sobre él sin saber que se movió el piso.
|
|
181
|
-
|
|
182
|
-
Y el camino por el que entra casi nunca es el archivo obvio. Un banco desechable puede resolver la
|
|
183
|
-
herramienta por un enlace al repositorio vivo, así que editar ahí cambia lo que la corrida lee sin que
|
|
184
|
-
nada del banco se haya tocado. La pregunta no es «¿toqué el sujeto?» sino «¿toqué algo que el sujeto
|
|
185
|
-
alcanza?».
|
|
186
|
-
|
|
187
|
-
Si hace falta trabajar igual, se trabaja donde la medición no mira: otra copia, otra rama sin
|
|
188
|
-
materializar, o se espera. Esperar es más barato que descubrir que la tanda no vale.
|
|
189
|
-
|
|
190
|
-
Y si ya pasó, se dice: qué medición, qué cambió y cuándo. Un resultado cuyo entorno se movió es una
|
|
191
|
-
hipótesis, no un veredicto —lo mismo que R21 nombra para lo que quedó a medias—, y guardarlo sin esa
|
|
192
|
-
marca es la forma cara del error, porque el número sobrevive a la sesión que sabía.
|
|
85
|
+
|
|
86
|
+
## R25 — El identificador de una unidad de trabajo no cambia mientras está viva
|
|
87
|
+
|
|
88
|
+
El slug con el que una tarea se escribe es el mismo con el que se cierra. Renombrarlo a mitad de camino
|
|
89
|
+
—porque se entendió mejor el alcance, porque se partió en dos, porque el nombre viejo quedó feo— rompe
|
|
90
|
+
lo único que ata la cola con lo entregado.
|
|
91
|
+
|
|
92
|
+
Y rompe **sin que nada falle**, que es lo que lo vuelve caro. El estado de una unidad no está escrito en
|
|
93
|
+
ningún lado: se deriva cruzando el identificador entre la cola, lo reclamado y lo hecho. Con el nombre
|
|
94
|
+
cambiado, las dos mitades dejan de cruzarse y cada lado se lee coherente por separado: la cola muestra
|
|
95
|
+
una tarea pendiente que ya está construida, y lo hecho muestra una entrega que nadie pidió. La puerta
|
|
96
|
+
pasa en verde. En la instancia que originó esta regla, una tarea partida en cuatro se cerró con dos
|
|
97
|
+
nombres nuevos y la corrida siguiente gastó 594k tokens para descubrir que tres de ellas ya estaban
|
|
98
|
+
hechas.
|
|
99
|
+
|
|
100
|
+
Cuando el nombre de verdad tiene que cambiar, la salida es barata y hay que escribirla: el nuevo lleva
|
|
101
|
+
el viejo al lado —`slug-nuevo (antes: slug-viejo)`— hasta que la unidad se cierra. Ahí el cruce vuelve a
|
|
102
|
+
existir y lo puede hacer una persona leyendo.
|
|
103
|
+
|
|
104
|
+
Partir una unidad es otra cosa y no la toca: las partes son unidades nuevas, con identificadores nuevos,
|
|
105
|
+
y la original se cierra diciendo en qué se partió. Lo que R25 prohíbe es que la misma unidad viva con
|
|
106
|
+
dos nombres.
|
|
107
|
+
|
|
108
|
+
## R28 — Un estado lo dice el contenido de un archivo, nunca su presencia
|
|
109
|
+
|
|
110
|
+
Un bloqueo, una pausa o un trabajo en curso que se representan con «el archivo está» tienen un modo de
|
|
111
|
+
fallo que no se ve: resolverlos exige acordarse de borrar, y el que revisa lee lo que el archivo dice
|
|
112
|
+
—que ya está resuelto— mientras el mecanismo sigue leyendo que existe.
|
|
113
|
+
|
|
114
|
+
Se paga entero y en la puerta de entrada: la corrida arranca, lee el estado completo, y recién ahí
|
|
115
|
+
descubre que lo que la frena es un archivo que alguien dejó puesto. En la instancia que originó esta
|
|
116
|
+
regla pasó dos veces el mismo día —la segunda después de haber dicho que no se repetiría— a 42k tokens
|
|
117
|
+
por vez.
|
|
118
|
+
|
|
119
|
+
El archivo se queda y su contenido dice en qué estado está. Es lo que ya hace el WIP de este toolkit:
|
|
120
|
+
`status: IDLE` es un estado escrito, no un archivo ausente, así que quien lo lee y quien lo comprueba
|
|
121
|
+
leen lo mismo. Un centinela cuya única información es existir obliga a que el borrado sea parte de la
|
|
122
|
+
resolución, y eso es una convención que alguien va a olvidar.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Cómo se gasta una corrida
|
|
2
|
+
|
|
3
|
+
Lo que cuesta una vuelta de trabajo y qué la vuelve aprovechable: dónde se va el contexto, cuándo una
|
|
4
|
+
medición vale, cómo se retoma lo que se cortó y qué no se toca mientras se mide.
|
|
5
|
+
|
|
6
|
+
Viven acá y no en `process.md` por una razón medida. El override de una regla es por nombre de archivo,
|
|
7
|
+
así que una empresa que escribe su propio `process.md` —reemplazar «pensar antes de editar» por su
|
|
8
|
+
versión es lo primero que hace cualquiera— se llevaba puestas también éstas, que nadie reemplaza y que
|
|
9
|
+
`effectiveRules` dejaba de entregarle a todo agente. Una instancia real lo vivió: las declaró «adoptadas
|
|
10
|
+
por referencia» en una tabla de prosa que el motor no lee, y aun así dos de ellas no estaban rigiendo el
|
|
11
|
+
día que le costaron una sesión entera (caso 160).
|
|
12
|
+
|
|
13
|
+
## R16 — El costo es el contexto, no las palabras
|
|
14
|
+
|
|
15
|
+
Cada llamada reenvía el contexto entero, así que gasta más quien da más vueltas que quien escribe más.
|
|
16
|
+
Los comandos independientes van en una sola invocación; el CLI antes que el archivo; el fragmento antes
|
|
17
|
+
que el archivo entero; un subagente o un workflow sólo cuando el trabajo no entra en la corrida actual.
|
|
18
|
+
|
|
19
|
+
Entre etapas viaja lo que la siguiente necesita para decidir, no todo lo que la anterior produjo. El
|
|
20
|
+
análisis completo queda donde se escribió y lo lee una sola vez quien sintetiza al final; lo que se
|
|
21
|
+
arrastra en el handoff se reenvía en cada etapa que sigue, así que lo que costó una vez pasa a costar
|
|
22
|
+
una vez por etapa. Son requisitos opuestos y por eso no son el mismo texto: el resumen quiere ser corto
|
|
23
|
+
porque viaja, y la síntesis quiere estar completa porque decide.
|
|
24
|
+
|
|
25
|
+
Se lee para escribir, no para confirmar: un archivo se lee una vez y se escribe entero. Releerlo para
|
|
26
|
+
comprobar que quedó no comprueba nada que un error no hubiera dicho.
|
|
27
|
+
|
|
28
|
+
Verificar es la excepción, y no se negocia. Ahorrar una llamada nunca justifica afirmar sin haber
|
|
29
|
+
comprobado —R14 no admite descuentos— ni dar por terminado lo que no se corrió.
|
|
30
|
+
|
|
31
|
+
## R20 — Una medición se lanza contra lo que podría refutarla
|
|
32
|
+
|
|
33
|
+
Antes de una tanda cara —evaluaciones, corridas, barridos— se escribe qué se espera encontrar y **qué
|
|
34
|
+
resultado lo desmentiría**. Sin esa segunda mitad no hay medición: hay recolección, y recolectar
|
|
35
|
+
confirma siempre.
|
|
36
|
+
|
|
37
|
+
El tamaño sale de ahí y no de la lista: se corre el mínimo que pueda refutar, no lo que cubra todo.
|
|
38
|
+
Y se relee la hipótesis en la primera tanda, porque cuando ya está contestada, seguir cuesta lo mismo
|
|
39
|
+
que la primera vez y no agrega nada.
|
|
40
|
+
|
|
41
|
+
La exhaustividad tiene su lugar y es otro: cuando cada elemento puede fallar por su cuenta —medir
|
|
42
|
+
cincuenta cargos que nunca se midieron—, no hay señal común que una muestra revele. Lo que no
|
|
43
|
+
corresponde es tratar una pregunta de sí o no como si fuera un censo.
|
|
44
|
+
|
|
45
|
+
El costo de equivocarse acá no se ve mientras pasa: cada corrida termina bien, entrega su resultado y
|
|
46
|
+
parece trabajo. Lo que se gasta es la vuelta que no se dio en otra cosa, y eso no aparece en ninguna
|
|
47
|
+
salida.
|
|
48
|
+
|
|
49
|
+
Repetir una medición que falló pide lo mismo. Una re-corrida sirve para dos cosas y conviene decir cuál:
|
|
50
|
+
comprobar un cambio, y entonces ese cambio tiene que poder mover **ese** veredicto —tocar lo que el caso
|
|
51
|
+
mide, no cualquier parte del contrato—; o estimar cuánto varía el resultado sin que nada cambie, y
|
|
52
|
+
entonces se declara así y se repite varias veces, porque una sola no estima nada. Volver a correr
|
|
53
|
+
esperando que esta vez salga distinto no es ninguna de las dos: es comprar un número nuevo con la misma
|
|
54
|
+
información.
|
|
55
|
+
|
|
56
|
+
Un cambio que no toca lo que el caso mide no compra una re-corrida. La medición vuelve a costar entera y
|
|
57
|
+
lo que devuelve es la varianza que ya estaba ahí — y esa varianza existe: en la sesión que originó esta
|
|
58
|
+
regla, cargos que habían pasado todos sus casos fallaron uno al día siguiente sin que el motivo tocara
|
|
59
|
+
nada de lo que se había cambiado.
|
|
60
|
+
|
|
61
|
+
Y lo que se repite es el caso que falló, no la batería. Un sujeto que falla uno de seis vuelve a correr
|
|
62
|
+
ese uno: los otros cinco veredictos ya se tienen, y volver a mirarlos cuesta lo mismo que obtenerlos la
|
|
63
|
+
primera vez. El registro parcial que sale de ahí no vale solo —cubre menos casos de los que existen— y
|
|
64
|
+
se compone con los veredictos que no se volvieron a medir, diciendo de qué corrida viene cada uno.
|
|
65
|
+
|
|
66
|
+
## R21 — Retomar empieza por establecer qué quedó hecho
|
|
67
|
+
|
|
68
|
+
Un trabajo caro que se corta —por un límite, una caída, una interrupción— deja trabajo hecho. Antes de
|
|
69
|
+
volver a lanzarlo se establece cuál es: qué artefactos hay en disco, qué resultados se escribieron, qué
|
|
70
|
+
elementos ya tienen veredicto. Recién con esa lista se decide, y lo que se corre es la diferencia.
|
|
71
|
+
|
|
72
|
+
«Continuá» no autoriza a relanzar. Pide exactamente lo contrario: seguir desde donde se quedó, que es
|
|
73
|
+
imposible sin haber mirado antes dónde fue. Relanzar entero cobra de nuevo lo que ya se pagó, y quien
|
|
74
|
+
lo pide no tiene cómo saber que eso está pasando —la corrida se ve igual empiece donde empiece—.
|
|
75
|
+
|
|
76
|
+
Y cuando el pedido sí es relanzar —«de nuevo», «desde cero», «reiniciá»— tampoco se ejecuta derecho:
|
|
77
|
+
primero se entrega el veredicto de lo avanzado y se pregunta si aun así quiere la corrida entera. Puede
|
|
78
|
+
quererla, y hay razones legítimas: el sujeto cambió, lo anterior quedó sospechoso, se busca medir
|
|
79
|
+
varianza. Lo que no puede es tirarse trabajo sin que nadie lo haya decidido.
|
|
80
|
+
|
|
81
|
+
El veredicto existe para que se pueda decidir, así que tiene que traer con qué. Cuatro cosas:
|
|
82
|
+
|
|
83
|
+
- **Qué ya tiene resultado**, elemento por elemento, y cuál es.
|
|
84
|
+
- **Qué quedó a medias y si sirve.** Son dos preguntas distintas y la segunda no se contesta viendo que
|
|
85
|
+
el archivo está.
|
|
86
|
+
- **Cuánto cuesta rehacer cada parte**, con el número de lo que ya se gastó al lado.
|
|
87
|
+
- **Cómo se puede partir.** Casi nunca es todo o nada: si un pedazo cuesta la mitad del total, va
|
|
88
|
+
separado para que se pueda correr uno y decidir el otro después, con el primero a la vista.
|
|
89
|
+
|
|
90
|
+
**Lo hecho no es lo aprovechable, y la diferencia sólo se ve mirando.** Un trabajo interrumpido deja
|
|
91
|
+
artefactos que parecen completos: la etapa que escribió su análisis y murió antes de devolverlo se ve
|
|
92
|
+
igual que la que cerró, y los archivos de dos corridas distintas conviven en el mismo directorio sin
|
|
93
|
+
que nada los distinga salvo la fecha. Comprobar cuál es cuál cuesta minutos; suponerlo cuesta la
|
|
94
|
+
corrida entera y encima produce una medición contaminada — un resultado calculado sobre insumos que ya
|
|
95
|
+
fueron sobrescritos, que es peor que no tenerlo porque se lee igual que uno bueno.
|
|
96
|
+
|
|
97
|
+
Por eso el veredicto puede terminar en «desde cero», y eso no lo invalida. Establecer que no había nada
|
|
98
|
+
rescatable **es** el trabajo de la regla: lo que R21 impide no es relanzar, es relanzar sin saber.
|
|
99
|
+
|
|
100
|
+
Un elemento que ya tiene veredicto no se vuelve a medir por venir en la misma tanda: cuesta lo mismo que
|
|
101
|
+
la primera vez y su resultado no puede cambiar, que es lo que R20 nombra. Si existe un filtro para correr
|
|
102
|
+
sólo lo que falta, usarlo no es una optimización: es la forma correcta de la corrida.
|
|
103
|
+
|
|
104
|
+
Un mecanismo de reanudación se comprueba, nunca se supone —R14 no hace excepción con las herramientas
|
|
105
|
+
propias—. Después de reanudar se mira si efectivamente reutilizó: cuántas unidades de trabajo nuevas
|
|
106
|
+
aparecieron, cuánto se gastó. La sesión que originó esta regla creyó estar reanudando desde caché y
|
|
107
|
+
volvió a correr entero dos veces: siete millones de tokens para un solo veredicto, con los archivos de
|
|
108
|
+
las etapas ya cumplidas a la vista en el directorio de trabajo, y con el filtro que lo evitaba escrito
|
|
109
|
+
por quien reanudaba tres horas antes.
|
|
110
|
+
|
|
111
|
+
## R22 — Lo que se mide no se toca mientras se mide
|
|
112
|
+
|
|
113
|
+
Mientras una medición corre, el sujeto y todo aquello contra lo que resuelve se quedan quietos. No se
|
|
114
|
+
edita el contrato que se está midiendo, ni el motor que la corrida usa, ni el entorno del que lee.
|
|
115
|
+
|
|
116
|
+
Lo que lo vuelve difícil de ver es que no avisa. La corrida termina, entrega su resultado y **ese
|
|
117
|
+
resultado se lee exactamente igual que uno limpio**: no hay señal que diga «esto midió dos versiones».
|
|
118
|
+
Quien lo reciba va a decidir sobre él sin saber que se movió el piso.
|
|
119
|
+
|
|
120
|
+
Y el camino por el que entra casi nunca es el archivo obvio. Un banco desechable puede resolver la
|
|
121
|
+
herramienta por un enlace al repositorio vivo, así que editar ahí cambia lo que la corrida lee sin que
|
|
122
|
+
nada del banco se haya tocado. La pregunta no es «¿toqué el sujeto?» sino «¿toqué algo que el sujeto
|
|
123
|
+
alcanza?».
|
|
124
|
+
|
|
125
|
+
Si hace falta trabajar igual, se trabaja donde la medición no mira: otra copia, otra rama sin
|
|
126
|
+
materializar, o se espera. Esperar es más barato que descubrir que la tanda no vale.
|
|
127
|
+
|
|
128
|
+
Y si ya pasó, se dice: qué medición, qué cambió y cuándo. Un resultado cuyo entorno se movió es una
|
|
129
|
+
hipótesis, no un veredicto —lo mismo que R21 nombra para lo que quedó a medias—, y guardarlo sin esa
|
|
130
|
+
marca es la forma cara del error, porque el número sobrevive a la sesión que sabía.
|
|
131
|
+
|
|
132
|
+
## R26 — Una puerta acota su propio costo y no escribe en el árbol que juzga
|
|
133
|
+
|
|
134
|
+
Una puerta existe para medir, y una que se lleva la máquina no mide nada: se apaga. Tres límites, y los
|
|
135
|
+
tres se ganaron con una corrida perdida.
|
|
136
|
+
|
|
137
|
+
**Acota su alcance.** Una puerta opina sobre el repositorio que la declara y no sobre sus vecinos. La
|
|
138
|
+
que juzga a otro frena trabajo que no pidió juzgar y lo hace con reglas que ese equipo no escribió.
|
|
139
|
+
|
|
140
|
+
**Acota su costo, con un tope y con un candado.** Dos revisores lanzando la misma suite son dos corridas
|
|
141
|
+
simultáneas, y ninguna de las dos lo sabe. En la instancia que originó esta regla fueron cuatro en cuatro
|
|
142
|
+
minutos: el sistema operativo mató la sesión entera con un pico de 24,2 GB y se llevó puesta la corrida
|
|
143
|
+
que estaba a punto de terminar. Y lo que ya se midió no se vuelve a medir: si el build dejó su
|
|
144
|
+
resultado, la puerta lo lee en vez de rehacerlo.
|
|
145
|
+
|
|
146
|
+
**No escribe en el árbol que juzga.** Un formateador con `--fix`, un build que limpia su salida, un
|
|
147
|
+
gestor que sincroniza antes de arrancar: los tres parecen inocuos y los tres editan el trabajo de quien
|
|
148
|
+
está commiteando, a veces a mitad de camino. La puerta corre sobre una copia, o corre sin la bandera que
|
|
149
|
+
escribe. Este toolkit lo aprendió así —`verify` materializa el índice en un temporal justamente por
|
|
150
|
+
esto— y la regla existe para que la puerta que escribe **la empresa** no lo vuelva a aprender sola.
|
|
151
|
+
|
|
152
|
+
El remate es la razón de las tres: una puerta que estorba se saltea con la variable de escape, y desde
|
|
153
|
+
ahí no protege de nada. Lo que se negocia es el costo, nunca la exigencia.
|