@zhivex-ai/harness 1.0.0 → 1.1.0-rc.2

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.
Files changed (181) hide show
  1. package/CHANGELOG.md +97 -1
  2. package/README.md +52 -306
  3. package/SECURITY.md +1 -1
  4. package/SUPPORT.md +7 -3
  5. package/benchmarks/README.md +3 -3
  6. package/contracts/client-protocol-v1.schema.json +341 -0
  7. package/contracts/public-api.json +100 -1
  8. package/contracts/stable-api-signatures.json +14 -14
  9. package/dist/approval-diff.d.ts +45 -0
  10. package/dist/approval-history.d.ts +38 -0
  11. package/dist/approval-preview.d.ts +26 -0
  12. package/dist/cli-credentials.d.ts +38 -0
  13. package/dist/cli-help.d.ts +3 -0
  14. package/dist/cli-options.d.ts +1 -1
  15. package/dist/cli-stream.d.ts +3 -3
  16. package/dist/cli.d.ts +15 -69
  17. package/dist/cli.js +13796 -10032
  18. package/dist/client-contract.d.ts +208 -0
  19. package/dist/console-commands.d.ts +6 -0
  20. package/dist/console-context.d.ts +5 -1
  21. package/dist/console-input.d.ts +44 -4
  22. package/dist/console-model-catalog.d.ts +25 -0
  23. package/dist/console-navigation.d.ts +27 -0
  24. package/dist/console-presentation.d.ts +18 -0
  25. package/dist/console-welcome.d.ts +13 -0
  26. package/dist/execution-environment.d.ts +4 -0
  27. package/dist/harness.d.ts +3 -0
  28. package/dist/hostile-repository-demo.js +1913 -798
  29. package/dist/index.d.ts +7 -0
  30. package/dist/index.js +7908 -6330
  31. package/dist/local-service.d.ts +34 -0
  32. package/dist/operations.d.ts +23 -1
  33. package/dist/orchestration.d.ts +3 -0
  34. package/dist/persistence-secrets.d.ts +2 -0
  35. package/dist/recorded-workspace.d.ts +4 -0
  36. package/dist/run-document.d.ts +91 -0
  37. package/dist/runtime-policy.d.ts +4 -4
  38. package/dist/service-cli.d.ts +2 -0
  39. package/dist/service-cli.js +10858 -0
  40. package/dist/service-client-cli.d.ts +2 -0
  41. package/dist/service-events.d.ts +50 -0
  42. package/dist/sessions.d.ts +3 -0
  43. package/dist/sqlite-access.d.ts +26 -0
  44. package/dist/sqlite-database.d.ts +2 -0
  45. package/dist/state-backup.d.ts +8 -0
  46. package/dist/task-memory.d.ts +2 -2
  47. package/dist/terminal-continuation.d.ts +3 -0
  48. package/dist/terminal-markdown.d.ts +1 -0
  49. package/dist/terminal-ui.d.ts +5 -0
  50. package/dist/usage-ledger.d.ts +84 -0
  51. package/dist/verify-historical-migrations.js +5699 -5191
  52. package/dist/workspace.d.ts +22 -0
  53. package/dist/zhx.js +13796 -10032
  54. package/docs/CLI.md +136 -30
  55. package/docs/CLIENT_PROTOCOL.md +212 -0
  56. package/docs/CREDENTIALS.md +59 -0
  57. package/docs/DURABLE_OPERATIONS.md +2 -2
  58. package/docs/FIRST_USE.md +82 -0
  59. package/docs/FIRST_USE_EXAMPLE.md +40 -0
  60. package/docs/HOSTILE_REPOSITORY_DEMO.md +1 -1
  61. package/docs/LOCAL_SERVICE.md +142 -0
  62. package/docs/README.md +24 -23
  63. package/docs/THREAT_MODEL.md +1 -1
  64. package/docs/TIME_TO_SAFE_FIX.md +2 -2
  65. package/docs/USAGE.md +181 -0
  66. package/evaluations/daily-cli-cohort.json +33 -0
  67. package/evaluations/representative-assembly-matrix.json +19 -1
  68. package/examples/README.md +26 -0
  69. package/examples/first-use/greeting.test.ts +3 -0
  70. package/examples/first-use/greeting.ts +1 -0
  71. package/examples/first-use/package.json +7 -0
  72. package/package.json +34 -9
  73. package/ROADMAP.md +0 -414
  74. package/benchmarks/baselines/context-navigation-2026-09-09.json +0 -94
  75. package/benchmarks/baselines/efficiency-2026-09-08.json +0 -233
  76. package/benchmarks/baselines/external-final-2026-09-08.json +0 -588
  77. package/benchmarks/baselines/external-intermediate-2026-09-08.json +0 -116
  78. package/benchmarks/baselines/external-matched-openai-2026-09-08.json +0 -1922
  79. package/benchmarks/baselines/external-matched-qwen-2026-09-08.json +0 -1706
  80. package/benchmarks/baselines/external-pilot-2026-09-08.json +0 -439
  81. package/benchmarks/baselines/external-qwen-flash-2026-09-08.json +0 -1570
  82. package/benchmarks/baselines/external-qwen-remediation-2026-09-09.json +0 -1509
  83. package/benchmarks/baselines/external-qwen-sdk-114-progress-2026-09-09.json +0 -2509
  84. package/benchmarks/baselines/external-sdk-upgrade-2026-09-08.json +0 -564
  85. package/benchmarks/baselines/external-verifier-recovery-2026-09-09.json +0 -794
  86. package/benchmarks/baselines/full-harness-review-2026-09-10.json +0 -134
  87. package/benchmarks/baselines/harness-audit-2026-09-09.json +0 -136
  88. package/benchmarks/baselines/harness-remediation-2026-09-09.json +0 -160
  89. package/benchmarks/baselines/oci-remediation-2026-09-10.json +0 -535
  90. package/benchmarks/baselines/rc14-holdout-2026-09-10.json +0 -854
  91. package/benchmarks/baselines/repair-architecture-audit-2026-09-09.json +0 -75
  92. package/benchmarks/baselines/time-to-safe-fix-live-expanded-2026-08-21.json +0 -186
  93. package/benchmarks/baselines/time-to-safe-fix-live-smoke-2026-08-21.json +0 -186
  94. package/docs/GA_READINESS.md +0 -29
  95. package/docs/GEMINI_1_0_DECISION.md +0 -9
  96. package/docs/LIVE_CERTIFICATION.md +0 -107
  97. package/docs/RC13_SECURITY_REVIEW.md +0 -28
  98. package/docs/RC14_DELEGATED_SECURITY_DECISION.md +0 -80
  99. package/docs/RC14_SECURITY_REVIEW.md +0 -40
  100. package/docs/RELEASE.md +0 -96
  101. package/docs/ROLLBACK.md +0 -9
  102. package/docs/SECURITY_REVIEW_EVIDENCE.md +0 -17
  103. package/docs/ga-readiness.json +0 -366
  104. package/docs/reports/EFFICIENCY_REVIEW.md +0 -156
  105. package/docs/reports/EXTERNAL_COMPARISON.md +0 -434
  106. package/docs/reports/FULL_HARNESS_REVIEW_2026-09-10.md +0 -200
  107. package/docs/reports/GA_BUDGET_REMEDIATION_2026-09-19.md +0 -38
  108. package/docs/reports/GA_REPAIR_RECOVERY_2026-09-19.md +0 -700
  109. package/docs/reports/GA_VALIDATION_2026-09-19.md +0 -111
  110. package/docs/reports/HARNESS_ARCHITECTURE_REVIEW_2026-09-09.md +0 -202
  111. package/docs/reports/HARNESS_AUDIT_2026-09-09.md +0 -306
  112. package/docs/reports/HARNESS_REMEDIATION_2026-09-09.md +0 -74
  113. package/docs/reports/HARNESS_REMEDIATION_2026-09-10.md +0 -90
  114. package/docs/reports/MODEL_COMPARISON_2026-09-09.md +0 -184
  115. package/docs/reports/QWEN_REMEDIATION_COMPARISON_2026-09-09.md +0 -142
  116. package/docs/reports/RC14_VALIDATION_2026-09-10.md +0 -45
  117. package/docs/reports/README.md +0 -26
  118. package/docs/reports/evidence/ga-budget-remediation-2026-09-19.json +0 -133
  119. package/docs/reports/evidence/ga-catalog-ablation-2026-09-19.json +0 -699
  120. package/docs/reports/evidence/ga-catalog-ablation-plan-2026-09-19.json +0 -40
  121. package/docs/reports/evidence/ga-catalog-observed-2026-09-19.json +0 -985
  122. package/docs/reports/evidence/ga-catalog-observed-plan-2026-09-19.json +0 -28
  123. package/docs/reports/evidence/ga-catalog-observed-status-2026-09-19.json +0 -15
  124. package/docs/reports/evidence/ga-complete-local-check-2026-09-19.json +0 -47
  125. package/docs/reports/evidence/ga-completion-reminder-2026-09-19.json +0 -22
  126. package/docs/reports/evidence/ga-fresh-cohort-plan-2026-09-19.json +0 -54
  127. package/docs/reports/evidence/ga-fresh-cohort-preparation-2026-09-19.json +0 -242
  128. package/docs/reports/evidence/ga-fresh-cohort-result-2026-09-19.json +0 -4318
  129. package/docs/reports/evidence/ga-local-validation-followup-2026-09-19.json +0 -66
  130. package/docs/reports/evidence/ga-node-consumers-2026-09-19.json +0 -31
  131. package/docs/reports/evidence/ga-package-content-validation-2026-09-19.json +0 -22
  132. package/docs/reports/evidence/ga-plan-completion-2026-09-19.json +0 -39
  133. package/docs/reports/evidence/ga-plan-reserve-2026-09-19.json +0 -573
  134. package/docs/reports/evidence/ga-plan-reserve-plan-2026-09-19.json +0 -24
  135. package/docs/reports/evidence/ga-plan-transition-2026-09-19.json +0 -19
  136. package/docs/reports/evidence/ga-private-verifier-plan-2026-09-19.json +0 -24
  137. package/docs/reports/evidence/ga-private-verifier-root-cause-2026-09-19.json +0 -41
  138. package/docs/reports/evidence/ga-published-sdk-2026-09-19.json +0 -35
  139. package/docs/reports/evidence/ga-python-checkout-imports-2026-09-19.json +0 -95
  140. package/docs/reports/evidence/ga-python-origin-delivery-2026-09-19.json +0 -211
  141. package/docs/reports/evidence/ga-python-origin-delivery-plan-2026-09-19.json +0 -27
  142. package/docs/reports/evidence/ga-qwen-patched-package-2026-09-19.json +0 -1092
  143. package/docs/reports/evidence/ga-qwen-patched-package-plan-2026-09-19.json +0 -18
  144. package/docs/reports/evidence/ga-qwen-published-2026-09-19.json +0 -571
  145. package/docs/reports/evidence/ga-qwen-published-plan-2026-09-19.json +0 -18
  146. package/docs/reports/evidence/ga-qwen-tool-choice-2026-09-19.json +0 -85
  147. package/docs/reports/evidence/ga-qwen-tool-choice-patched-2026-09-19.json +0 -85
  148. package/docs/reports/evidence/ga-recovery-development-2026-09-19.json +0 -1066
  149. package/docs/reports/evidence/ga-recovery-graded-development-2026-09-19.json +0 -1313
  150. package/docs/reports/evidence/ga-recovery-graded-v2-2026-09-19.json +0 -1151
  151. package/docs/reports/evidence/ga-recovery-v3-2026-09-19.json +0 -3943
  152. package/docs/reports/evidence/ga-recovery-v4-2026-09-19.json +0 -1055
  153. package/docs/reports/evidence/ga-recovery-v5-2026-09-19.json +0 -1245
  154. package/docs/reports/evidence/ga-recovery-v6-2026-09-19.json +0 -699
  155. package/docs/reports/evidence/ga-recovery-v7-2026-09-19.json +0 -854
  156. package/docs/reports/evidence/ga-recovery-v8-2026-09-19.json +0 -596
  157. package/docs/reports/evidence/ga-required-delivery-2026-09-19.json +0 -25
  158. package/docs/reports/evidence/ga-required-delivery-live-2026-09-19.json +0 -1337
  159. package/docs/reports/evidence/ga-required-delivery-live-plan-2026-09-19.json +0 -25
  160. package/docs/reports/evidence/ga-retained-candidate-grading-2026-09-19.json +0 -30
  161. package/docs/reports/evidence/ga-tool-selection-live-2026-09-19.json +0 -559
  162. package/docs/reports/evidence/ga-tool-selection-live-plan-2026-09-19.json +0 -28
  163. package/docs/reports/evidence/ga-tool-selection-recovery-2026-09-19.json +0 -27
  164. package/docs/reports/evidence/ga-validation-2026-09-19.json +0 -236
  165. package/docs/reports/evidence/ga-verifier-discovery-live-2026-09-19.json +0 -1369
  166. package/docs/reports/evidence/ga-verifier-discovery-plan-2026-09-19.json +0 -29
  167. package/docs/reports/evidence/ga-verifier-failure-identification-2026-09-19.json +0 -30
  168. package/docs/reports/evidence/ga-verifier-feedback-2026-09-19.json +0 -65
  169. package/docs/reports/evidence/ga-verifier-hints-live-2026-09-19.json +0 -1297
  170. package/docs/reports/evidence/ga-verifier-hints-plan-2026-09-19.json +0 -27
  171. package/docs/reports/evidence/ga-work-boundary-context-analysis-2026-09-19.json +0 -113
  172. package/docs/reports/evidence/ga-work-boundary-live-2026-09-19.json +0 -301
  173. package/docs/reports/evidence/ga-work-boundary-live-plan-2026-09-19.json +0 -84
  174. package/docs/reports/evidence/ga-work-budget-planning-2026-09-19.json +0 -32
  175. package/docs/reports/evidence/ga-working-context-2026-09-19.json +0 -22
  176. package/docs/reports/evidence/rc14-delegated-security-review-2026-09-20.json +0 -81
  177. package/docs/reports/evidence/rc14-ga-gate-2026-09-20.json +0 -18
  178. package/docs/reports/evidence/rc14-representative-2026-09-20.json +0 -509
  179. package/docs/reports/evidence/rc14-security-regressions-2026-09-20.json +0 -64
  180. package/docs/reports/evidence/security-current-2026-09-19.json +0 -91
  181. package/docs/reports/evidence/security-remediation-2026-09-19.json +0 -97
@@ -1,700 +0,0 @@
1
- # Recuperación de reparaciones: diagnóstico de desarrollo
2
-
3
- **Corrección implementada; aceptación live y GA todavía pendientes.**
4
-
5
- El fingerprint `fe23962a75a1376aa486d886cd84986beba7daecf721dfdce7e3fc800f8ef82d`
6
- de los fallos OpenAI del holdout RC14 corresponde exactamente a
7
- `REPAIR_VERIFICATION_RETRIES_EXHAUSTED`. La evidencia histórica no contiene el
8
- stdout del verificador: no permite atribuir el fallo de su aserción a una causa
9
- concreta, ni concluir que esta corrección resolverá todas las entregas fallidas.
10
-
11
- Una regresión independiente reprodujo un defecto del controlador: después de
12
- fallar una verificación, cada comando diagnóstico con exit code distinto de cero
13
- consumía otro reintento de verificación. Tres diagnósticos agotaban el límite aun
14
- sin haber intentado verificar nuevamente. Las mutaciones fallidas también
15
- consumían ese contador.
16
-
17
- Ahora esos eventos mantienen la obligación de recuperación sin incrementar el
18
- contador de verificaciones. Los intentos reales de verificación sí lo incrementan;
19
- tres fallos reales siguen bloqueando el run. No se elimina la aprobación ni se
20
- importa ningún candidato sin verificación exitosa. Los límites de pasos, tokens,
21
- herramientas y comandos de recuperación siguen vigentes.
22
-
23
- También se corrigió el evaluador SWE-bench para el nuevo aislamiento OCI:
24
-
25
- - La captura del candidato y el preflight usan el scope del Harness.
26
- - El padre conserva el directorio de estado hasta terminar la limpieza, incluso
27
- si el proceso del driver muere.
28
- - La limpieza usa la identidad de ejecución en metadata validada, no el hash del
29
- run ID público. Las regresiones rechazan metadata de otro run o directorio.
30
-
31
- Validación local: la regresión de diagnóstico falló antes del cambio y pasó
32
- después. Las 38 pruebas enfocadas pasan; la suite completa pasó 529 tests, junto
33
- a contratos, tipos, migraciones, evaluaciones, benchmarks y MCP. El gate completo
34
- se detuvo en `docker start failed` durante el smoke OCI; queda pendiente repetir
35
- esa frontera sin la carga concurrente de restauración/reproducción.
36
-
37
- La reproducción live usa `django__django-15851` como **dato de desarrollo**, nunca
38
- como holdout nuevo, con límites y modelos del manifiesto anterior. El primer
39
- intento terminó antes de llamar al modelo porque la imagen histórica había sido
40
- eliminada. Se reconstruyó desde los digests originales con el Dockerfile guardado.
41
- El nuevo intento conserva hashes de fuentes y resultados en
42
- `results/swebench/ga-recovery-development-2026-09-19-restored/` y terminó: OpenAI completó y entregó patch; Qwen retuvo un candidato sin
43
- verificador y terminó `REPAIR_INCOMPLETE`. La [evidencia sanitizada](evidence/ga-recovery-development-2026-09-19.json)
44
- preserva ambos resultados.
45
- La presencia de un patch entregado no equivale a corrección oficial: este intento
46
- diagnóstico no ejecuta el grader independiente.
47
-
48
- Antes de GA todavía se requiere completar la validación de recuperación,
49
- congelar el candidato, predeclarar una cohorte nueva y sus criterios, ejecutar
50
- grading independiente y reunir la matriz representativa y los gates del release.
51
-
52
-
53
- ## Segundo ajuste y validación en curso
54
-
55
- El caso Qwen confirmó que registrar un verificador antes de editar era sólo una
56
- instrucción. El controlador OCI ahora rechaza mutaciones sin un verificador
57
- concreto registrado mediante `repair_plan`, antes de ejecutar la herramienta.
58
- Una regresión comprueba ausencia de escritura al rechazar y ejecución después
59
- de registrar el plan. Esto no certifica que el comando propuesto sea suficiente:
60
- la aprobación y la comprobación independiente siguen siendo necesarias.
61
-
62
- Después de este ajuste pasaron 530 tests y tipos de tooling. El smoke OCI pasó
63
- al repetirse sin la carga concurrente. La comparación de desarrollo con grading
64
- oficial está ejecutándose secuencialmente para OpenAI y Qwen, una repetición del
65
- caso y control mini-SWE-agent para cada proveedor, con límites originales y hashes
66
- de fuente congelados por el runner. Resultados en
67
- `results/swebench/ga-recovery-graded-{openai,qwen}/`. No se presenta como holdout
68
- nuevo ni como una aprobación de GA; el resultado se detalla a continuación.
69
-
70
-
71
- ## Resultado oficial y corrección del presupuesto proyectado
72
-
73
- La comparación anterior terminó sin samples faltantes ni fallos del grader.
74
- Harness resolvió 0/1 con OpenAI y 0/1 con Qwen; mini-SWE-agent resolvió 1/1 con
75
- cada proveedor. OpenAI se detuvo en `WORK_TOKEN_BUDGET` antes de editar; Qwen
76
- terminó `REPAIR_INCOMPLETE`. [Evidencia completa sanitizada](evidence/ga-recovery-graded-development-2026-09-19.json).
77
- No se excluyen estos intentos ni se presentan como validación exitosa.
78
-
79
- Se reprodujo otra inconsistencia: el presupuesto calcula el consumo proyectado
80
- de la siguiente llamada, pero el controlador de progreso entraba en cierre sólo
81
- por consumo ya registrado. Por eso podía detenerse después de registrar un plan
82
- con verificador, antes de poder usar la reserva para producir el candidato.
83
-
84
- Ahora se calcula primero esa proyección y se activa el cierre focalizado cuando
85
- el siguiente paso alcanza el umbral. Antes de tener candidato, la reserva sólo
86
- se habilita si hay un verificador concreto registrado. El límite total no cambia;
87
- se siguen bloqueando exploración global y llamadas que excederían el presupuesto
88
- total. La regresión falla antes de la corrección y pasa después, incluyendo el
89
- rechazo al superar el límite total. Las 31 pruebas del módulo pasan.
90
-
91
- Está en curso una segunda comparación de desarrollo en
92
- `results/swebench/ga-recovery-graded-v2-{openai,qwen}/`, con la misma tarea, límites,
93
- modelos, control y grading oficial. Sigue pendiente demostrar entrega correcta
94
- antes de congelar una cohorte nueva; GA permanece NO-GO.
95
-
96
-
97
- ## Segunda comparación y obligación de recuperación
98
-
99
- La segunda comparación terminó: Harness 0/1 y control 1/1 en ambos proveedores.
100
- OpenAI falló por `ProviderToolCallError` con `incomplete_arguments`; ese intento
101
- no tiene accounting completo y no puede certificar presupuesto ni entrega.
102
- Qwen terminó `REPAIR_INCOMPLETE` durante recuperación. El grading oficial pasó
103
- sin errores y todos los intentos permanecen en el denominador.
104
- [Evidencia sanitizada](evidence/ga-recovery-graded-v2-2026-09-19.json).
105
-
106
- Otra regresión reprodujo que durante recuperación el controlador dejaba la
107
- selección de herramienta en automático, aunque existía una obligación pendiente.
108
- Ahora solicita una herramienta (`required`) cuando el proveedor/modo lo soporta;
109
- los modos de Qwen con restricciones de thinking conservan su compatibilidad.
110
- Una respuesta final sigue sin autorizar importación ni satisfacer la obligación.
111
- La prueba falla antes y pasa después; las 32 pruebas enfocadas pasan.
112
-
113
- La siguiente serie de desarrollo queda fijada antes de observar resultados:
114
- `ga-recovery-v3-{openai,qwen}`, misma tarea y límites, tres repeticiones para cada
115
- agente/proveedor (12 samples contando controles), grading oficial y conservación
116
- de todos los fallos. No constituye holdout nuevo ni sustituye los gates de GA.
117
-
118
-
119
- ## Resultado de las tres repeticiones
120
-
121
- La serie v3 terminó sus 12 samples, sin faltantes ni fallos del grader:
122
-
123
- | Proveedor | Harness | Control mini-SWE-agent |
124
- | --- | --- | --- |
125
- | OpenAI | 1/3 entregas correctas | 3/3 |
126
- | Qwen | 0/3 entregas correctas | 3/3 |
127
-
128
- OpenAI tuvo un fallo de verificación y otro de argumentos incompletos con
129
- accounting incompleto. Qwen tuvo dos reparaciones incompletas y un límite de
130
- presupuesto de entrada. [Evidencia completa](evidence/ga-recovery-v3-2026-09-19.json).
131
- Estos resultados mantienen NO-GO y no se usan como evidencia de una cohorte nueva.
132
-
133
- Una regresión integrada adicional confirma que, con Qwen en Chat y thinking
134
- apagado, `toolChoice: required` llega al modelo después de aprobación y fallo de
135
- verificación. El diagnóstico de transporte terminó por INPUT_TOKEN_BUDGET con
136
- accounting completo: las once primeras solicitudes no incluían tool choice y
137
- la última sí llevaba `required`, con thinking apagado. Confirma su envío, no
138
- que el servicio lo respete en el fallo anterior. El wrapper sólo leyó `max_tokens`;
139
- Qwen usa `max_completion_tokens`, por lo que el valor nulo registrado no prueba
140
- ausencia de límite. No se conservaron prompts, respuestas, argumentos ni claves
141
- en esa traza.
142
-
143
- El tarball local del commit `41bd1cb4ab8481a7413f096a0817f612fe9806fe` pasó instalado
144
- por separado en Node 22.13.0 y Node 24.0.0 para macOS arm64.
145
- [Evidencia de consumidores](evidence/ga-node-consumers-2026-09-19.json). Esto no
146
- reemplaza Linux ni los checks remotos. La subida de la rama fue rechazada por la
147
- revisión automática de permisos; el PR permanece local y su exportación espera
148
- autorización explícita del operador.
149
-
150
- ## Diagnóstico del verificador para recuperación
151
-
152
- Una regresión adicional reprodujo que el fallo de verificación devolvía sólo
153
- exit code y timeout al agente. Ahora ambos verificadores compuestos conservan
154
- stdout/stderr redactados y limitados a 2048 caracteres por canal, preservando el
155
- principio y el final cuando se truncan. El contenido está marcado como salida no
156
- confiable; no cambia aprobaciones, límites ni la prohibición de importar después
157
- de un fallo. La redacción por patrones no elimina necesariamente datos de negocio
158
- arbitrarios impresos por el comando aprobado.
159
-
160
- La regresión falló antes y pasa después. Se actualizó la expectativa anterior de
161
- omisión completa en el resultado interno: las pruebas ahora distinguen feedback
162
- del agente, mensaje genérico de error y telemetría exportable. Estas dos últimas
163
- superficies siguen omitiendo el diagnóstico. Pasan 533 tests, tipos de runtime y
164
- tooling, contratos de preparación y las cinco comprobaciones de seguridad local.
165
- La eficacia live de esta corrección todavía no se ha medido; los resultados v3
166
- corresponden al runtime anterior y siguen conservados íntegros.
167
-
168
- [Evidencia local del diagnóstico corregido](evidence/ga-verifier-feedback-2026-09-19.json)
169
- incluye hashes de fuentes, suite, probes de seguridad e instalación del paquete.
170
- La serie v4 usa la misma tarea de desarrollo, una repetición por proveedor y
171
- agente, y conserva los límites y el grader de las series anteriores. Su arranque
172
- inicial falló antes de llamar a los proveedores por credenciales no heredadas;
173
- el arranque posterior carga el entorno local. No es una cohorte nueva.
174
-
175
- ## Resultado v4 y finalización sin candidato
176
-
177
- La serie terminó sus cuatro samples con grading completo: Harness 0/1 y control
178
- 1/1 en ambos proveedores. OpenAI falló por `incomplete_arguments`, sin accounting
179
- completo; Qwen terminó `completed` sin candidato ni verificación y el grader lo
180
- marcó incorrecto. Ninguno alcanzó el fallo de verificador que esta serie pretendía
181
- evaluar. [Evidencia íntegra sanitizada](evidence/ga-recovery-v4-2026-09-19.json).
182
-
183
- Una regresión local reproduce la finalización después de registrar un plan con
184
- verificador, antes de editar. La corrección exige una acción de herramienta en
185
- modos compatibles y rechaza la finalización sin entrega: resultado y checkpoint
186
- quedan `failed` con `REPAIR_INCOMPLETE`. No cambia presupuestos, aprobación ni
187
- criterios de grading. Su eficacia live queda pendiente.
188
-
189
- Un fixture SSE independiente reproduce otra limitación en OpenAI 0.13.2: el
190
- adaptador rechaza `output_item.done` incompleto antes de consumir el evento
191
- terminal que contiene el uso. `bun run scripts/validate-openai-stream-usage.ts`
192
- sale con código 1: exige simultáneamente rechazar la llamada incompleta, no
193
- emitir herramientas y conservar los contadores exactos del fixture. No usa red
194
- ni credenciales reales. No demuestra que el intento live tuviera ese mismo
195
- evento terminal, pero explica una ruta concreta hacia accounting incompleto.
196
- La limitación permanece abierta; no se estiman tokens ni se habilitan reintentos
197
- con consumo desconocido.
198
-
199
- Validación posterior a la corrección de finalización: 534 tests sin fallos,
200
- tipos de runtime/tooling, contratos de preparación, documentación e instalación
201
- del paquete correctos. El probe separado de accounting sigue fallando y no está
202
- contabilizado como aceptación aprobada ni oculto dentro de la suite verde.
203
-
204
- ## Serie v5 y propuesta para el SDK
205
-
206
- La siguiente serie de desarrollo mantuvo tarea, límites y una repetición por
207
- agente/proveedor. Terminó sus cuatro samples con grading completo:
208
- OpenAI Harness 1/1 y control 1/1; Qwen Harness 0/1 y control 1/1. Qwen produjo
209
- una edición, solicitó verificación y ejecutó un comando de diagnóstico, pero
210
- terminó fallido sin patch importado. Ambos intentos Harness tuvieron accounting
211
- completo. [Evidencia completa](evidence/ga-recovery-v5-2026-09-19.json).
212
- Una sola entrega OpenAI en datos ya conocidos no acredita mejora general ni
213
- sustituye el holdout nuevo. La retención de release sigue vigente.
214
-
215
- El registry sigue publicando OpenAI 0.13.2. Se preparó un parche aislado del SDK
216
- en `upstream-fixes/openai-terminal-usage/`, fuera del paquete distribuido del
217
- Harness y sin modificar el checkout concurrente del SDK. Difiere el rechazo de
218
- un item incompleto hasta poder leer uso terminal válido; nunca emite la llamada
219
- incompleta. Once regresiones y el typecheck aislado pasan. El parche todavía
220
- requiere contrato de error público tipado, checks completos del SDK, revisión,
221
- publicación y consumo en el presupuesto del Harness. No corrige la dependencia
222
- instalada ni constituye evidencia de release. El probe sobre 0.13.2 sigue rojo.
223
-
224
- Actualización del parche SDK: el contrato Core ahora incluye `usage` opcional,
225
- validado, copiado y congelado. Una copia aislada del commit base pasó 2078 tests,
226
- tipos, build y documentación con Bun 1.4.2, además del smoke de consumidores
227
- instalados. Se actualizaron únicamente la firma de `errors.d.ts`, tests, README
228
- y changeset correspondientes. No se modificó el checkout concurrente del SDK.
229
-
230
- El presupuesto del Harness consume ese campo sólo en un `ProviderToolCallError`
231
- del proveedor correcto, conserva el error y evita contarlo dos veces después de
232
- un finish. El consumo ausente, inválido o de un error no reconocido sigue siendo
233
- desconocido. Pasan 543 tests y el paquete instalado. La integración con tarballs
234
- locales del SDK corregido conservó 12 tokens de entrada y 8 de salida, sin ejecutar
235
- herramientas y manteniendo el run fallido. Las identidades están en la evidencia
236
- del parche. El adapter publicado sigue en 0.13.2 sin la corrección; falta integrar,
237
- revisar y publicar el SDK, actualizar la dependencia y certificar el candidato.
238
-
239
- ## Continuación acotada ante finalización prematura
240
-
241
- Una regresión independiente demuestra que el controlador puede recuperar una
242
- finalización normal del modelo que todavía deja una reparación pendiente. La
243
- aplicación solicita `read_task` una única vez a través de los gates ordinarios,
244
- conserva el uso real de esa respuesta y vuelve a ofrecer al modelo la tarea
245
- original. El contador se persiste y no se reinicia al reanudar. El recordatorio
246
- no autoriza ediciones, no aumenta presupuestos y no extiende las dos solicitudes
247
- de selección de verificador. Errores, cancelación, límite de salida o uso
248
- desconocido no lo activan; se espera el cierre normal del stream para evitar
249
- continuar después de un error tardío.
250
-
251
- Las regresiones cubren continuación hasta una edición/verificación aprobada,
252
- rechazo de una segunda finalización prematura, restauración del contador, uso
253
- exacto y límites. Pasan 551 tests, tipos y contratos. La serie v6 ejecuta una
254
- repetición Qwen y su control sobre la misma tarea de desarrollo, sin modificar
255
- límites ni grader. Su resultado no constituye holdout nuevo.
256
-
257
- La serie v6 terminó: Harness 0/1, control 1/1, grading completo y accounting
258
- completo. Harness agotó WORK_TOKEN_BUDGET después de intentar editar sin plan;
259
- la mutación no se ejecutó y el siguiente turno volvió a leer archivos. No hubo
260
- candidato ni verificación, por lo que este intento no mide la eficacia del
261
- recordatorio ante finalización prematura. Se conserva íntegro como fallo.
262
- [Evidencia v6](evidence/ga-recovery-v6-2026-09-19.json) y
263
- [regresiones del recordatorio](evidence/ga-completion-reminder-2026-09-19.json).
264
- La próxima frontera es la transición desde REPAIR_PLAN_REQUIRED hacia un plan
265
- válido, manteniendo presupuestos y la prohibición de editar sin verificador.
266
-
267
- ## Transición desde edición sin plan
268
-
269
- La regresión falló antes y pasó después: rechazar una edición sin verificador
270
- ahora persiste `planRequired`. Los dos siguientes intentos como máximo ofrecen
271
- `repair_plan` y `read_task`; un guard de ejecución impide saltarse el catálogo
272
- restringido. El límite persiste al reanudar y no abre la reserva de cierre ni
273
- incrementa los presupuestos. Sólo un verificador válido retira la obligación;
274
- la edición y su verificación mantienen sus aprobaciones normales.
275
-
276
- Una prueba integrada reproduce rechazo, planificación, edición y verificación
277
- aprobada hasta entrega. La serie v7 mide esta variante en la misma tarea Qwen de
278
- desarrollo, con una repetición y control, manteniendo los límites y grader.
279
-
280
- La serie v7 terminó con Harness 0/1 y control 1/1, sin faltantes ni fallos del
281
- grader, y accounting completo. El Harness consumió 94.008 tokens de entrada en
282
- 13 llamadas y el siguiente preflight alcanzó INPUT_TOKEN_BUDGET. Registró un
283
- plan en el turno 9; los tres siguientes intentos fueron rechazados por
284
- REPAIR_PLAN_SCOPE y después hubo repetición de exploración. Los códigos se
285
- identifican comparando el fingerprint con los mensajes constantes del runtime.
286
- No hubo intento de edición: esta muestra no ejercita la transición nueva y no
287
- permite atribuirle eficacia live. [Evidencia v7](evidence/ga-recovery-v7-2026-09-19.json).
288
-
289
- La validación local de esta variante pasó 554 tests, tipos, contratos, docs y
290
- paquete instalado. [Hashes y frontera de evidencia](evidence/ga-plan-transition-2026-09-19.json).
291
- El parche SDK quedó además en la rama local `feat/ga-terminal-usage`, commit
292
- `989ba33`, con historial normal desde el commit base y sin modificar el checkout
293
- concurrente. Sus ocho archivos coinciden byte a byte con la copia validada.
294
- No se hizo push ni publicación; continúa pendiente la autorización de exportación.
295
-
296
- ## Contexto persistente del alcance del plan
297
-
298
- Una regresión independiente encontró que la proyección de trabajo del modelo
299
- omitía las rutas que el controlador de progreso sí persistía y restringía. Tras
300
- restaurar un estado con historial compactado, esa proyección no recuperaba los
301
- archivos permitidos. Ahora obtiene directamente del controlador las rutas
302
- normalizadas y los cupos restantes de lectura/comandos de cierre. Consultar esta
303
- vista no activa cierre ni modifica los límites; las rutas fuera del plan siguen
304
- rechazadas. La integración del Harness también verifica que las rutas llegan a
305
- los siguientes turnos reales del modelo simulado.
306
-
307
- Pasan 555 tests, tipos, contratos y paquete instalado. Se revisó y regeneró el
308
- snapshot: cambiaron los hashes transitivos de `runHarness` y `HarnessRunOptions`
309
- porque su diagnóstico referencia el tipo del controlador; los campos públicos
310
- de estadísticas siguen iguales. La serie v8 mide una repetición Qwen y control
311
- con el mismo presupuesto y grader. No se atribuye causalidad a la omisión para
312
- los fallos live anteriores sin evidencia adicional.
313
-
314
- La serie v8 terminó con Harness 0/1 por WORK_TOKEN_BUDGET y control 1/1.
315
- Accounting y grading completos; no se descarta el fallo ni se acredita eficacia
316
- live a partir de las regresiones. [Evidencia v8](evidence/ga-recovery-v8-2026-09-19.json)
317
- y [validación local por hash](evidence/ga-working-context-2026-09-19.json).
318
- El siguiente diagnóstico debe aislar el efecto del catálogo/contexto antes de
319
- añadir reglas nuevas. Una variante diagnóstica no sustituirá el perfil del
320
- producto ni se contará como aceptación GA.
321
-
322
- ## Diagnóstico del catálogo reducido
323
-
324
- La variante aislada de cinco herramientas, predeclarada en
325
- [el plan](evidence/ga-catalog-ablation-plan-2026-09-19.json), terminó con Harness
326
- 0/1 y control 1/1; grading y accounting completos. Harness consumió 41.620
327
- tokens de entrada y 680 de salida en nueve llamadas. Tras compactar, solicitó
328
- una herramienta no registrada y terminó con EXECUTION_FAILED. No se atribuye
329
- causalidad a la compactación a partir de esta sola muestra.
330
-
331
- Se conservan ambas muestras, el informe y la identidad de fuente en
332
- [la evidencia](evidence/ga-catalog-ablation-2026-09-19.json). Frente al baseline
333
- v8 sólo cambió el driver: catálogo e instrucciones renderizadas conjuntamente.
334
- El shell ya disponible usa sus propios cupos; no son las mismas rutas ejecutadas
335
- que las lecturas nativas. La variante no modifica el perfil del producto y no
336
- cuenta como aceptación GA. Este resultado no justifica promover el catálogo
337
- reducido ni demuestra que el tamaño del catálogo explique los fallos previos.
338
-
339
- La inspección del SDK instalado y una regresión de transporte descartan una
340
- pérdida determinística del catálogo o de las instrucciones de sistema en la
341
- compactación ordinaria: cinco solicitudes conservan ambos elementos idénticos,
342
- con más de una compactación intermedia. Pasan 13 tests de
343
- `tests/sdk-compaction.test.ts` y tipos de tooling. Esta prueba usa un modelo
344
- simulado y no explica por sí sola la elección live de una herramienta no
345
- registrada; no se introdujo un cambio especulativo del runtime. La próxima
346
- investigación necesita evidencia del catálogo efectivo en el límite del
347
- proveedor, conservando la política de telemetría sin prompts ni secretos.
348
-
349
- El driver ahora instrumenta el límite de entrada al adapter, por dentro de los
350
- middlewares del controlador y presupuesto. `modelCatalog` conserva por llamada
351
- los nombres locales ofrecidos y, para cada llamada devuelta, si fue ofrecida y
352
- si pertenece al registro del driver. Los nombres externos se sustituyen por
353
- `other-tool`; no se guardan argumentos, esquemas, mensajes ni errores crudos.
354
- La evidencia se limita a 100 solicitudes y 64 llamadas devueltas por solicitud,
355
- con contadores explícitos de omisiones. Una interrupción conserva
356
- `completed: false` y no modifica el error ni los eventos.
357
-
358
- Pasan 12 tests del driver y observador, y tipos de tooling. La prueba de orden
359
- demuestra que observa el catálogo restringido por política, no sólo el inicial.
360
- Esto mide el contrato neutral que recibe el adapter; no captura los bytes HTTP
361
- ni prueba qué catálogo vio el servicio remoto. Las llamadas sintéticas del
362
- controlador no llegan al adapter y no forman parte de esta medición. Todavía
363
- no hay una nueva muestra live con esta instrumentación; no se atribuye una
364
- causa al fallo anterior ni se declara mejoría de entrega.
365
-
366
- La siguiente muestra, con catálogo completo y observación en el adapter, quedó
367
- [predeclarada](evidence/ga-catalog-observed-plan-2026-09-19.json), pero **no se
368
- inició**: la revisión automática de permisos rechazó el envío externo por no
369
- constar autorización específica del contenido y destino. Se solicitó permiso
370
- para el caso público, fragmentos del repositorio de evaluación e instrucciones
371
- del Harness hacia Qwen internacional, con una ejecución por candidato y los
372
- límites originales. No se reintentó por otra vía.
373
- [Estado separado de la evidencia live](evidence/ga-catalog-observed-status-2026-09-19.json).
374
- La validación local conjunta de observación, compactación y driver pasa 25 tests.
375
-
376
- ## Integración de la corrección publicada del SDK
377
-
378
- Tras la confirmación del operador, la consulta pública con `bun info` verifica
379
- Core 1.22.0, OpenAI 0.13.3 y Qwen 0.14.3. El Harness fija ahora esas versiones
380
- en package.json y bun.lock, incluido el override de Core. Agents 1.8.0,
381
- Gemini 0.12.1 y Meta 0.2.6 siguen siendo las versiones consultadas. Se actualizó
382
- la documentación del lote y su comprobación exacta; los relatos anteriores
383
- sobre OpenAI 0.13.2 se conservan como evidencia histórica.
384
-
385
- El probe `validate-openai-stream-usage.ts` pasa con el paquete publicado:
386
- error incomplete_arguments, cero llamadas de herramienta emitidas y uso
387
- 12/8 conservado. No usa red de proveedores. Pasan 559 tests, tipos de runtime
388
- y tooling, build y smoke del tarball instalado. El primer intento de smoke
389
- falló por EPERM del directorio temporal; la repetición con permisos terminó
390
- correctamente. Esto cierra la dependencia del parche local para esta aceptación,
391
- no acredita por sí solo provenance del SDK ni una nueva certificación live.
392
-
393
- La autorización pendiente de Qwen y la de push del Harness siguen siendo
394
- fronteras independientes. La confirmación de publicación del SDK no se tomó
395
- como autorización de esas operaciones. GA permanece NO-GO por los pendientes
396
- de entrega fiable y certificación final.
397
-
398
- La aceptación integrada también pasa con `runHarness` del workspace y el
399
- adapter del registry: el run falla sin ejecutar herramientas y contabiliza
400
- 12 tokens de entrada y 8 de salida, con usageComplete=true. Se incorporó
401
- como regresión automática en `tests/model-budget-error-usage.test.ts`; sus
402
- 10 casos y tipos de tooling pasan. La prueba inyecta SSE local, sin llamadas
403
- a proveedores. [Versiones, hashes y límites](evidence/ga-published-sdk-2026-09-19.json).
404
-
405
- ## Prueba Qwen autorizada con dependencias publicadas
406
-
407
- Tras autorización explícita, la muestra con catálogo completo terminó con
408
- Harness 0/1 y mini-SWE-agent 1/1, grading y accounting completos. Harness
409
- consumió 64.624 tokens de entrada y 915 de salida en nueve llamadas; el control
410
- 20.189 y 597 en ocho. El Harness terminó por WORK_TOKEN_BUDGET, sin candidato
411
- ni verificación. Las nueve solicitudes conservaron las 13 herramientas y un
412
- mensaje de sistema; todas las llamadas devueltas estaban ofrecidas y registradas.
413
- No hubo omisiones de observación. Esta muestra no reproduce el fallo previo
414
- de herramienta desconocida y no demuestra la causa de ese fallo histórico.
415
-
416
- Se conserva la [evidencia completa saneada](evidence/ga-catalog-observed-2026-09-19.json).
417
- El cambio conjunto de dependencias y observación impide atribuir diferencias a
418
- una sola variable. Es una tarea conocida de desarrollo, no holdout ni aceptación
419
- GA. Los límites y el grader no cambiaron. La autorización de la prueba Qwen no
420
- se extiende al push ni a publicación del Harness.
421
-
422
- El fingerprint del último error coincide exactamente con el mensaje constante
423
- REPAIR_PLAN_REQUIRED: el modelo intentó una edición sin registrar antes el
424
- verificador. La edición se rechazó y el siguiente turno quedó bloqueado por
425
- el presupuesto de trabajo. La frontera a investigar es la planificación
426
- tardía y la reserva de recuperación; esta evidencia no justifica retirar la
427
- precondición de verificación ni ampliar los límites para obtener un aprobado.
428
-
429
- ## Reserva para recuperar una edición rechazada sin plan
430
-
431
- La transición observada se reprodujo sin red: tras rechazar una edición sin
432
- verificador, el controlador ofrecía sólo repair_plan/read_task, pero el budget
433
- no consideraba esa obligación como cierre. Con el 70% ya consumido, la llamada
434
- fallaba antes de poder registrar el plan. La nueva regresión falló antes del
435
- arreglo y pasa después, también restaurando el estado.
436
-
437
- La obligación planRequired habilita ahora la reserva existente para los dos
438
- intentos restringidos de planificación. Se mantiene la prohibición de ejecutar
439
- la edición, el límite durable de intentos y el techo total de tokens; una
440
- segunda prueba confirma rechazo al alcanzar ese techo. El fingerprint de
441
- política pasa a repair-v3-reserved-plan-recovery para distinguir los checkpoints
442
- del contrato anterior. No se incrementaron los límites del benchmark.
443
-
444
- Pasan 562 tests tras la corrección de reserva, además de tipos. Esta aceptación
445
- es determinística: todavía no demuestra una mejora de entrega live.
446
-
447
- La repetición Qwen con la corrección terminó: Harness 0/1 y control 1/1,
448
- grading y accounting completos. Harness consumió 22.916 tokens de entrada y
449
- 949 de salida en cinco llamadas. Intentó editar sin plan en el tercer turno;
450
- los dos turnos de selección explícita ofrecieron repair_plan/read_task pero
451
- no devolvieron llamadas desde el adapter. El read_task observado en el cuarto
452
- turno es el recordatorio sintético del controlador, no una llamada de Qwen.
453
- No hubo candidato ni verificación. El fallo ocurrió antes de alcanzar la
454
- reserva, por lo que esta muestra no evalúa su eficacia live.
455
- [Evidencia íntegra saneada](evidence/ga-plan-reserve-2026-09-19.json).
456
-
457
- Una nueva prueba sin red verifica el cuerpo Chat serializado por Qwen 0.14.3
458
- con el controlador real: tool_choice selecciona explícitamente repair_plan,
459
- enable_thinking=false y el catálogo contiene sólo repair_plan/read_task.
460
- Pasan la prueba y tipos de tooling. Esta comprobación verifica serialización
461
- local; no acredita los bytes de la solicitud live histórica ni identifica la
462
- causa de la ausencia de llamadas en la respuesta remota. No se relajó la
463
- verificación ni se aumentaron intentos o presupuestos.
464
-
465
- ## Pérdida de llamadas Qwen al finalizar con stop
466
-
467
- Un diagnóstico live mínimo con fixture sintético aisló una diferencia entre
468
- servicio y adapter. Con selección explícita repair_plan, el servicio devolvió
469
- 25 fragmentos tool_calls y finish_reason=stop; Qwen 0.14.3 emitió cero llamadas.
470
- Con selección required devolvió 24 fragmentos y finish_reason=tool_calls, y el
471
- adapter sí emitió repair_plan. Ninguna herramienta se ejecutó.
472
- [Evidencia saneada](evidence/ga-qwen-tool-choice-2026-09-19.json).
473
-
474
- La inspección del adapter confirma que sólo vacía los buffers cuando el motivo
475
- es tool_calls. `bun run scripts/validate-qwen-terminal-tool-call.ts` reproduce
476
- sin red la pérdida con JSON completo y final stop: exit 1, cero llamadas, uso
477
- 12/8 conservado. Este defecto es del adapter; aún falta corregirlo y validar
478
- que length, streams truncados y argumentos inválidos nunca habiliten ejecución.
479
- No se infieren los bytes de las respuestas del benchmark a partir del fixture.
480
-
481
- La corrección está preparada en la rama local SDK
482
- `feat/qwen-terminal-tool-calls`, sobre el commit posterior al release
483
- identificado en [la PR del SDK](https://github.com/Zhivex/zhivex-ai-sdk/pull/103).
484
- Pasan 209 tests Qwen, 2.424 tests SDK, tipos, docs y build. El adapter compilado
485
- pasa el mismo fixture que falla en Qwen 0.14.3: una llamada emitida, finish
486
- normalizado tool-calls y uso 12/8. El parche valida el lote completo antes de
487
- emitir efectos; casos truncados o inválidos se rechazan. Incluye changeset y
488
- el mínimo Core 1.22.0. No está publicado ni instalado en el Harness; no se
489
- hizo push. La prueba del build local no acredita aún el paquete publicado.
490
-
491
- La corrección Qwen quedó en el commit local SDK `35e2bb4`. Pasó el smoke de
492
- consumidores instalados (51 entrypoints y golden path determinístico con Bun
493
- 1.4.2). El diagnóstico live sintético con el adapter compilado recupera ahora
494
- repair_plan tanto con selección explícita y final stop como con required y
495
- final tool_calls, conservando uso.
496
- [Evidencia posterior](evidence/ga-qwen-tool-choice-patched-2026-09-19.json).
497
- No ejecutó herramientas ni evaluó una reparación; falta integrar el paquete
498
- publicado y repetir la aceptación del Harness. No se hizo push ni publicación.
499
-
500
- ## Reparación completa con tarball Qwen corregido
501
-
502
- Una copia aislada del Harness instaló el tarball local construido del commit
503
- SDK 35e2bb4, conservando el catálogo, política, tarea, límites y grader. Los
504
- hashes de fuente congelados sólo difieren del baseline en package.json y
505
- bun.lock; el hash SHA-256 del tarball queda ligado al plan y resultado.
506
-
507
- Resultado: **Harness 1/1 y control 1/1**, grading y accounting completos.
508
- Harness registró plan, verificó e importó el parche y pasó el evaluador
509
- independiente, con 71.480 tokens de entrada y 1.252 de salida. El control
510
- consumió 19.344 y 545. Se preservan todas las muestras y fallos anteriores.
511
- [Evidencia](evidence/ga-qwen-patched-package-2026-09-19.json).
512
-
513
- Es una sola tarea conocida de desarrollo y un paquete local con el mismo
514
- número de versión que el publicado, distinguido por hash; no constituye
515
- certificación del registry, holdout ni prueba estadística de fiabilidad.
516
- El Harness principal sigue fijando Qwen 0.14.3 publicado. El siguiente gate
517
- es revisar/publicar la corrección SDK, integrarla por versión y verificar la
518
- cohorte representativa y holdout con el candidato final. No se hizo push ni
519
- se promovió el ledger a GA.
520
-
521
- La revisión final añadió una regresión de error explícito tardío del proveedor:
522
- el lote ya completo no debe emitirse si después llega ese error. Falló antes y
523
- pasó después. El commit local SDK `c850ae0` lo rechaza conservando uso reportado
524
- sin propagar detalles crudos. Pasan 2.425 tests, tipos, docs, build y aceptación
525
- offline del adapter compilado. La evidencia live y de consumidores anterior
526
- sigue vinculada a `35e2bb4`; no se atribuye al nuevo commit. El parche y el
527
- texto de PR quedaron actualizados; no se hizo push.
528
-
529
- El smoke de consumidores instalados se repitió y pasó sobre el commit final
530
- SDK c850ae0 (51 entrypoints, Bun 1.4.2). La evidencia live sigue ligada al
531
- commit anterior. Se solicitó autorización específica para subir la rama SDK
532
- y abrir un PR; sigue pendiente. No hay publicación del parche Qwen ni se
533
- puede certificar el candidato final del Harness contra esa versión publicada.
534
-
535
- Por autorización explícita del operador, se ejecutó version-packages: Qwen
536
- 0.14.4 y changelog preparados, Core/SDK sin bump. Se incorporó main, resolviendo
537
- sólo un comentario del gate de rangos, y pasaron de nuevo 2.425 tests, tipos,
538
- docs, build y consumidores instalados (51 entrypoints). La rama se subió y
539
- la [PR #103](https://github.com/Zhivex/zhivex-ai-sdk/pull/103) quedó abierta
540
- sin draft, head e4cc9eb3e8218b604f58eccc3a8830f24e9fa71b. CI y CodeQL estaban
541
- en curso al comprobarla. No se hizo merge ni publicación.
542
-
543
- ## Integración del Qwen publicado y nueva muestra
544
-
545
- La PR #103 fue mergeada externamente. CI, CodeQL y consumidores Node pasaron;
546
- provider conformance provenance quedó skipped. El release
547
- [35477096556](https://github.com/Zhivex/zhivex-ai-sdk/actions/runs/35477096556)
548
- terminó success y el registry publica Qwen 0.14.4. El Harness ahora fija esa
549
- versión, incluida la documentación y el gate del lote. La aceptación offline
550
- de terminal-stop pasa contra el paquete instalado. Pasan 563 tests, tipos,
551
- docs, contrato de preparación y smoke del paquete Harness instalado.
552
-
553
- La nueva comparación live produjo **Harness 0/1 y control 1/1**, con grading y
554
- accounting completos. Harness terminó completed tras cinco llamadas, sin plan,
555
- candidato, verificación ni importación; el grader rechazó la entrega. Consumió
556
- 32.073 tokens de entrada y 281 de salida. El control resolvió con 26.718 y 820.
557
- [Evidencia publicada](evidence/ga-qwen-published-2026-09-19.json).
558
-
559
- Se conserva el éxito anterior con tarball local, sin sustituir este fallo.
560
- El defecto del adapter está corregido, pero queda una frontera del Harness:
561
- la obligación actual sólo nace al registrar un plan o intentar/realizar una
562
- edición; una finalización temprana desde exploración puede quedar completed
563
- sin entregar una reparación. Se requiere un contrato explícito de entrega
564
- para tareas que la exijan, preservando usos legítimos de inspección sin edición.
565
- No se declara GA ni se atribuye causalidad de la variación a las dependencias.
566
-
567
- ## Contrato explícito de entrega verificada
568
-
569
- Se añadió requireVerifiedDelivery, false por defecto y válido sólo con perfil
570
- repair. Al activarlo, la obligación nace antes del primer plan o edición; una
571
- finalización desde exploración no puede quedar completed sin entrega verificada.
572
- Persiste en el controlador y se liga al fingerprint del run. No abre por sí sola
573
- la reserva ni añade aprobaciones, intentos o presupuesto. El recordatorio único
574
- y la obligación de verificación existentes se mantienen. El driver SWE-bench
575
- lo activa porque su contrato exige reparación e importación. Inspección sin
576
- edición sigue disponible dejando false.
577
-
578
- La regresión falló antes y pasa después: salida y checkpoint quedan failed
579
- cuando el modelo finaliza sin reparar, incluso conservando la obligación al
580
- restaurar con opciones por defecto. Pasan 566 tests de la suite y una prueba
581
- adicional de validación/fingerprint; las cuatro pruebas focales, tipos, docs,
582
- contratos y paquete instalado pasan. Se regeneró el snapshot de firmas por la
583
- nueva opción pública y sus tipos transitivos.
584
- [Evidencia por hash](evidence/ga-required-delivery-2026-09-19.json).
585
- Esto elimina un falso completed; todavía no demuestra mayor resolución live.
586
-
587
- La comparación con entrega requerida terminó con **Harness 0/1 y control
588
- 1/1**, grading y accounting completos. Harness quedó failed por
589
- INPUT_TOKEN_BUDGET tras 96.896 tokens de entrada y 1.330 de salida en trece
590
- llamadas facturadas. Registró un plan, intentó editar y verificar, pero la
591
- verificación produjo error y la recuperación no terminó. Dos lecturas fueron
592
- rechazadas por REPAIR_PLAN_SCOPE y una nueva edición por REPAIR_PLAN_REQUIRED.
593
- El control resolvió con 16.988 tokens de entrada y 544 de salida.
594
- [Evidencia íntegra saneada](evidence/ga-required-delivery-live-2026-09-19.json).
595
-
596
- Esta muestra no terminó con respuesta final desde exploración: no prueba
597
- causalmente la eficacia del nuevo gate, aunque conserva correctamente el fallo.
598
- La regresión determinística sigue siendo la evidencia del cierre del falso
599
- completed. El error inicial de verificación sólo tiene un fingerprint genérico
600
- en esta telemetría; no se atribuye su causa sin evidencia adicional. El siguiente
601
- diagnóstico debe separar fallo del comando, rechazo por deriva del parche y
602
- error de importación para enfocar la recuperación, sin publicar logs crudos.
603
-
604
- ### Offline verifier diagnosis and feedback regression
605
-
606
- The required-delivery development run failed its verifier with exit code 1. The fixed `TerminalVerificationFailure` message hashes exactly to `d22955ecb1810cd7e960e732636eec570e04ab3b19eab276ebf23e2096a3c941`. Inspection of the full turn 9 also confirms existing structured evidence: exit 1, no timeout, failed verification, and 436 output characters. A later null-output projection does not establish missing model feedback. The underlying reason for verifier failure remains unknown; this is not evidence of a defective repair versus a defective verifier or environment.
607
-
608
- Telemetry now recognizes only the exact fixed failure template and emits a bounded numeric exit code even for message-only serialized exceptions. It exports no raw message or verifier output. A regression checks strict and repair recovery at the next model request boundary, in addition to persisted state: bounded verifier diagnostics reach the model while external telemetry omits their content. All 18 focused tests and runtime/tooling typechecks passed. No new provider call, benchmark rerun, or change to prior failed samples was made. Evidence: `docs/reports/evidence/ga-verifier-failure-identification-2026-09-19.json`. GA remains unproven.
609
-
610
- ### Validation follow-up and one bounded diagnostic pair
611
-
612
- The complete local suite passed 568 tests across 68 files before the verifier-output marker projection was added. After that telemetry-only change, 19 focused tests and the tooling typecheck passed. Documentation, preparation contract and five local security probes passed. The contract still reports one open GA blocker. Source hashes and check boundaries are retained in `evidence/ga-local-validation-followup-2026-09-19.json`.
613
-
614
- The predeclared `ga-verifier-hints` pair is complete: Harness 0/1 versus control 1/1, with complete usage and grading. Harness used 94,600 input / 1,580 output tokens and stopped at INPUT_TOKEN_BUDGET. Its verifier returned exit 1 without a timeout at turn 13; no allowed Python exception marker was observed. The control used 27,051 input / 673 output tokens. No repair, prompt, model or budget setting was changed for this run. There was no repeat after completion.
615
-
616
- This result does not identify the cause of verifier failure. The model had already spent turns on a missing path, a tool-input schema error and two plan-scope rejections before the edit. These are observed costs, not proof of the verifier's cause. A further diagnosis needs the exact approved verifier and bounded local failure details at the execution boundary; widening exception-label guesses or repeating the same pair would be insufficient. The temporary run state was intentionally cleaned by the runner, so the previous raw failure output cannot be recovered from retained samples. Evidence: `evidence/ga-verifier-hints-plan-2026-09-19.json` and `evidence/ga-verifier-hints-live-2026-09-19.json`. This remains development evidence and does not satisfy representative or fresh-holdout acceptance.
617
-
618
- ### Private execution diagnosis: unavailable runner and incorrect candidate scope
619
-
620
- A single predeclared Harness-only diagnostic retained at most three verifier failure records in a private local temporary directory. The driver used the same Qwen model and limits; no control or acceptance evaluation was claimed. It stopped at INPUT_TOKEN_BUDGET (92,923 input / 1,028 output tokens). The captured approved verifier used `python -m pytest`; Python reported that pytest was not installed. This directly establishes the verifier infrastructure failure for this diagnostic, not every previous sample. The benchmark prompt had recommended pytest without checking availability. That recommendation is now replaced by discovering the project runner and available dependencies, or using a self-contained assertion; no dependencies or budget limits were changed.
621
-
622
- Retained environment metadata also reproduced a candidate-capture defect: the actual run was unscoped, but the final diagnostic capture acquired config.scope and therefore inspected a different, empty snapshot. Candidate capture now uses the actual state.runId and state.scope. A real filesystem/OCI-session regression demonstrates that the configuration scope is empty while the run scope contains its edit. Historical candidatePresent=false values therefore cannot prove absence of a candidate. Imported host patches and official task failures remain unchanged.
623
-
624
- The private observer preserves approval metadata, original error identity and normal execution even if its callback throws. Its callback is disabled by default and does not add raw records to exported benchmark results. Thirteen focused tests and the tooling typecheck pass. Evidence: `evidence/ga-private-verifier-plan-2026-09-19.json` and `evidence/ga-private-verifier-root-cause-2026-09-19.json`. The retained private snapshot now permits offline candidate diagnosis without another model request. No live effectiveness claim is made for either correction.
625
-
626
- ### Retained candidate passes official grading without another model call
627
-
628
- The corrected scope-aware capture recovered one updated file, `django/db/backends/postgresql/client.py`, from the prior private diagnostic. Capture validated the retained execution binding and content digests. The existing candidate exporter reconstructed the diff in a separate disposable checkout and verified its base digests; no protected files changed. The pinned official evaluator completed with `resolved: true` for patch SHA-256 `15989da845ac1f766848c5c2e153296d7eef926a752ec658548702ac0e028bc7`. No model request or provider credential was involved in this grading.
629
-
630
- This distinguishes a correct retained repair from unsuccessful delivery: the original verifier required unavailable pytest, import did not succeed, and the original run remains failed at its input budget. It does not demonstrate that the corrected prompt now completes the entire live flow. Historical failed samples remain unchanged. The current complete local suite passes 571 tests across 70 files. Evidence: `evidence/ga-retained-candidate-grading-2026-09-19.json`. The next live check should test the corrected verifier-discovery instruction and successful verified import under the unchanged limits; GA representative and fresh-holdout gates remain open.
631
-
632
- ### Verifier-discovery instruction: complete matched pair, delivery still fails
633
-
634
- The single predeclared `ga-verifier-discovery` pair completed with full grading and usage: Harness delivered 0/1 and control delivered 1/1. Harness consumed 95,888 input / 1,241 output tokens. The corrected capture now finds its candidate and the official evaluator resolves that candidate, but neither verifier succeeded (exit codes 1 and 2), no patch was imported, and the run reached INPUT_TOKEN_BUDGET. The discovery instruction alone therefore does not establish reliable verification and delivery. No further retry or budget increase was made.
635
-
636
- The scope correction has direct live evidence; delivery remains blocked. The next improvement must address actual verifier selection/execution failures rather than treating a correct retained patch as successful delivery. Source-bound samples and the unchanged-budget plan are retained in `evidence/ga-verifier-discovery-live-2026-09-19.json` and `evidence/ga-verifier-discovery-plan-2026-09-19.json`. This result does not alter any earlier sample or satisfy GA acceptance.
637
-
638
- The current installed-package smoke also passed for `@zhivex-ai/harness@1.0.0-rc.14` after the verifier-discovery pair. No package publication was performed.
639
-
640
- ### Python editable-install shadowing reproduced and fixed in candidate images
641
-
642
- Offline execution of the documented Django runner exposed another environment defect: running `python tests/runtests.py dbshell --settings=test_sqlite --parallel=1` reported Django from `/testbed/django`, outside the mounted candidate. Its apparent pass did not verify the retained edit. The image's editable installation took precedence when Python used the nested script directory rather than the checkout root.
643
-
644
- Derived candidate images now set `PYTHONPATH=/workspace:/workspace/src:/testbed:/testbed/src`; the image tag derivation includes this policy. Both candidates still receive the same image, and the control retains `/testbed` resolution. Native preflight checks top-level checkout package origins without relying on `-c`'s current-directory shortcut and fails closed on absent or shadowed checkout packages. Old prepared images must be rebuilt; old results remain immutable development evidence, not proof of candidate-bound verification.
645
-
646
- The corrected image `sha256:4c8b7a320988313b8881a96f334a189bfd0d6fda47cc0219d648867ffe765b80` resolves Django from `/workspace` for Harness and `/testbed` for the control. The public runner now genuinely sees the candidate and fails one historical test expecting the old argument order (26 tests, 5 skips); that is distinct from infrastructure availability. A separate four-case assertion derived solely from the public issue rejects the old image's source origin, fails against the baseline under the corrected image, and passes against the retained candidate. No repository tests, evaluator tests or host source were changed.
647
-
648
- Twelve focused tests, tooling typecheck, Python compilation and native OCI preflight pass. No model/provider request was made. Evidence: `evidence/ga-python-checkout-imports-2026-09-19.json`. The next live comparison must use the corrected pinned image; this offline validation does not prove reliable verified delivery.
649
-
650
- ### Corrected-image diagnostic stopped on unknown tool selection
651
-
652
- One private Qwen run with the corrected image stopped on the first model turn after two unregistered tool calls (4,652 input / 97 output tokens, zero executions and approvals). No verifier ran, so this cannot establish delivery effectiveness for the image correction. No retry was made. The result is retained in `evidence/ga-python-origin-delivery-2026-09-19.json`. Relative to the previous private diagnostic both the verifier-discovery instruction and image differ; this is not a causal A/B claim.
653
-
654
- Installed Core 1.22.0 already supports opt-in unknownToolMode `tool-result`, but repair mode enabled only argument-schema recovery. Repair now also returns unknown selections as structured errors while leaving strict mode unchanged. The run fingerprint changes to bind this policy. Tests cover successful correction, strict/explicit fail-fast behavior, the tool-error ceiling, preserved token accounting and approval required for a subsequent mutation. No unknown tool is registered, renamed or executed.
655
-
656
- Validation after the selection-recovery change: 577 tests across 72 files pass, including five focused regressions. Runtime/tooling types, documentation and the preparation contract pass. Evidence: `evidence/ga-tool-selection-recovery-2026-09-19.json`. No live retry or GA acceptance claim was made.
657
-
658
- ### Corrected-image end-to-end delivery passes one development diagnostic
659
-
660
- The predeclared single Qwen run at implementation commit `fbceb4f` completed in 7 recorded turns, with 8 tools and 2 approvals. It used 47,739 input / 860 output tokens under the unchanged limits. Verification exited 0, the governed import completed, and the independent pinned official evaluator resolved the actual host patch. The imported patch SHA-256 is `15989da845ac1f766848c5c2e153296d7eef926a752ec658548702ac0e028bc7`, matching the independently graded retained candidate. No protected files changed.
661
-
662
- No unknown-tool error occurred in this successful run, so it validates the current bundle's delivery path rather than proving the causal live effect of unknown-tool recovery. That behavior remains supported by focused regressions. This is one known development instance, without a concurrent control; previous failed attempts stay failed. It is not GA acceptance, a reliability rate, or fresh holdout evidence. Further repetitions of this same case are closed; the next external evaluation should use a fresh predeclared cohort and freeze implementation throughout. Evidence: `evidence/ga-tool-selection-live-plan-2026-09-19.json` and `evidence/ga-tool-selection-live-2026-09-19.json`.
663
-
664
- ### Fresh five-task cohort: complete, no GA approval
665
-
666
- The predeclared cohort excluded all 17 previously used task IDs, pinned five new tasks and their images, and passed all five native preflights before paid calls. The frozen implementation was `1886644`. All ten planned model runs and their independent grading completed; usage is complete and there are no missing rows or grading failures. No retries, replacements or source changes occurred during the cohort.
667
-
668
- Harness resolved 0/5; mini-SWE-agent resolved 1/5 (Requests). Harness stopped before any plan/candidate in three Django cases at WORK_TOKEN_BUDGET, exhausted total input on Requests, and completed/imported Pylint without satisfying the independent evaluator. The candidate-only score was also 0/5. The comparative bootstrap interval is exploratory for only five tasks and does not support a broad accuracy or safety claim.
669
-
670
- The input target was 100,000 for both, but enforcement differs: the control checks between calls and observed totals ranged from 100,223 to 107,327; Harness predicts the next request and reserves work capacity for closure. Actual consumed-token parity is therefore not claimed. Three Harness work-budget stops occurred after 57,786–62,053 input tokens with no repair plan, leaving a substantial unused closure reserve. The next implementation investigation is whether required-delivery runs transition into bounded planning before the work boundary rejects another call. This is a hypothesis to reproduce locally, not proof of a fix.
671
-
672
- The fresh holdout is now complete and these five cases join the exclusion set for future fresh evaluation. Its results do not support GA approval. Preparation, plan and all sanitized samples are preserved in `evidence/ga-fresh-cohort-preparation-2026-09-19.json`, `evidence/ga-fresh-cohort-plan-2026-09-19.json`, and `evidence/ga-fresh-cohort-result-2026-09-19.json`. All protected release, representative and final security requirements remain unchanged.
673
-
674
- ### Work-budget boundary regression and bounded planning transition
675
-
676
- The three fresh-cohort work-budget failures had no plan/candidate and no verifier attempt. A local middleware regression reproduced the transition defect: with 60% of input already consumed and a large current exploration catalogue, the next request exceeded the 70% work ceiling and failed before offering planning. The positive regression failed with WORK_TOKEN_BUDGET before the change; optional-delivery inspection retained its expected rejection.
677
-
678
- Required-delivery OCI runs now estimate the current request, including the working-state projection, before the budget gate. If exploration would reach the work boundary and there is no verifier/candidate, the controller enters its existing durable planning obligation: only repair_plan/read_task, at most two attempts across resumes. The budget then estimates the narrowed request and enforces the unchanged total ceilings. Tests also cover the output work boundary, no calls after total input/output exhaustion, rejected exploration during planning, and persistence of attempt limits. No task-specific answer or verifier was injected.
679
-
680
- An initial implementation exposed the estimator through the internal budget return type, which unnecessarily changed transitive declaration hashes. The estimator was moved to a standalone internal helper; the existing Stable signature snapshot remains unchanged and the contract check passes. The runtime fingerprint advances to bind the new scheduling behavior. The failed fresh cohort remains immutable evidence; no live retry has yet validated this change.
681
-
682
- Final local validation: 584 tests across 72 files, runtime/tooling types, documentation, preparation contract and installed-package smoke pass. Stable signatures remain unchanged. Evidence: `evidence/ga-work-budget-planning-2026-09-19.json`. No live provider call was made for this change.
683
-
684
- Continuation review reproduced two additional failures: registering the forced plan cleared the transient reserve eligibility before an edit, and an already registered plan prevented boundary activation. Required-delivery OCI work now durably enters closure reserve at the boundary, with or without an existing verifier. Missing verifiers still require bounded planning. Checkpoint restoration preserves reserve eligibility without replenishing usage; total-input exhaustion still prevents dispatch. Both regressions failed before this correction and pass after it. Reserve availability alone does not prove a successful repair.
685
-
686
- ### Work-boundary live development check: plan reached, delivery still fails
687
-
688
- The predeclared single rerun selected django__django-10914, the first previous work-budget failure in manifest order. Implementation a6d6540, all source hashes, prepared image and original limits were frozen. Native preflight passed. One Qwen attempt consumed 93,522 input and 1,275 output tokens across nine model calls with complete usage. The observed progress records enteredClosure=true and planRecorded=true; the run then failed INPUT_TOKEN_BUDGET without an imported patch. Independent grading completed with empty-patch-no-solution / resolved=false.
689
-
690
- This supports the narrow observation that the run could record a plan and continue beyond the prior work-budget stop, not that the change improves correctness. Subsequent calls requested environment shells and patch inspection; no deliverable was established. A local postprocessing helper initially rejected the empty patch, so grading was resumed from the stored terminal result without another model call. The failed attempt remains the sole attempt.
691
-
692
- The fresh 0/5 holdout remains unchanged. Further investigation should examine whether the remaining context and tool sequence allow the planned repair and verification to finish inside the fixed total budget; another indiscriminate retry is not justified. Evidence: evidence/ga-work-boundary-live-plan-2026-09-19.json and evidence/ga-work-boundary-live-2026-09-19.json.
693
-
694
- ### Complete local release preparation check
695
-
696
- At implementation a6d581a, bun run check completed with exit 0: 584 tests, both typechecks, documentation, preparation contract, historical migrations, deterministic evaluation, workspace/safe-fix benchmark checks, both MCP interoperability smokes, native OCI smoke and installed-package smoke. bun audit found no vulnerabilities among 35 packages; bun pm untrusted reported no untrusted dependencies with scripts. This is local evidence, not a protected release result.
697
-
698
- The release-readiness script remains red: RC14 is intentionally Unreleased without a dated release heading, the check ran on the feature branch, and the evidence additions were uncommitted when checked. Do not date a release or mark these gates passing before the corresponding release action. The formal GA ledger additionally requires final representative evaluation, immutable publication/provenance and named artifact-bound human security review. Context analysis of the latest failed development run is retained separately; it does not justify changing acceptance criteria or an unmeasured runtime tuning.
699
-
700
- Evidence: evidence/ga-complete-local-check-2026-09-19.json and evidence/ga-work-boundary-context-analysis-2026-09-19.json.