@zhivex-ai/harness 1.0.0 → 1.1.0-rc.3
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 +109 -1
- package/README.md +52 -306
- package/SECURITY.md +1 -1
- package/SUPPORT.md +7 -3
- package/benchmarks/README.md +3 -3
- package/contracts/client-protocol-v1.schema.json +341 -0
- package/contracts/public-api.json +100 -1
- package/contracts/stable-api-signatures.json +14 -14
- package/dist/approvals/approval-diff.d.ts +45 -0
- package/dist/approvals/approval-history.d.ts +38 -0
- package/dist/approvals/approval-preview.d.ts +26 -0
- package/dist/cli/arguments.d.ts +103 -0
- package/dist/cli/changes.d.ts +2 -0
- package/dist/cli/cli-credentials.d.ts +38 -0
- package/dist/cli/cli-help.d.ts +3 -0
- package/dist/{cli-options.d.ts → cli/cli-options.d.ts} +1 -1
- package/dist/{cli-profiles.d.ts → cli/cli-profiles.d.ts} +1 -1
- package/dist/cli/configured-harness.d.ts +12 -0
- package/dist/cli/console/console-commands.d.ts +6 -0
- package/dist/{console-context.d.ts → cli/console/console-context.d.ts} +7 -3
- package/dist/cli/console/console-input.d.ts +68 -0
- package/dist/cli/console/console-model-catalog.d.ts +25 -0
- package/dist/cli/console/console-navigation.d.ts +27 -0
- package/dist/cli/console/console-presentation.d.ts +18 -0
- package/dist/cli/console/console-welcome.d.ts +13 -0
- package/dist/cli/console.d.ts +2 -0
- package/dist/cli/doctor.d.ts +50 -0
- package/dist/cli/errors.d.ts +7 -0
- package/dist/cli/help-text.d.ts +2 -0
- package/dist/cli/presentation.d.ts +23 -0
- package/dist/cli/resume-metadata.d.ts +12 -0
- package/dist/cli/routing.d.ts +6 -0
- package/dist/cli/run-commands.d.ts +4 -0
- package/dist/cli/run-document.d.ts +91 -0
- package/dist/cli/run-management.d.ts +2 -0
- package/dist/cli/service-client-cli.d.ts +2 -0
- package/dist/cli/session-management.d.ts +8 -0
- package/dist/cli/setup.d.ts +16 -0
- package/dist/cli/state.d.ts +2 -0
- package/dist/cli/terminal/terminal-continuation.d.ts +3 -0
- package/dist/{terminal-markdown.d.ts → cli/terminal/terminal-markdown.d.ts} +1 -0
- package/dist/{terminal-ui.d.ts → cli/terminal/terminal-ui.d.ts} +7 -0
- package/dist/cli/terminal/tool-activity.d.ts +19 -0
- package/dist/cli.d.ts +33 -238
- package/dist/cli.js +16049 -12066
- package/dist/client/adapter.d.ts +4 -0
- package/dist/client/index.d.ts +15 -0
- package/dist/client/local-service.d.ts +34 -0
- package/dist/client/protocol.d.ts +205 -0
- package/dist/client/service-events.d.ts +50 -0
- package/dist/{context-engineering.d.ts → context/context-engineering.d.ts} +2 -2
- package/dist/{execution-environment.d.ts → execution/execution-environment.d.ts} +8 -4
- package/dist/hostile-repository-demo.js +2025 -897
- package/dist/index.d.ts +48 -41
- package/dist/index.js +7541 -5906
- package/dist/internal/desktop/persistence.d.ts +14 -0
- package/dist/internal/desktop/protocol.d.ts +8 -0
- package/dist/internal/desktop/providers.d.ts +6 -0
- package/dist/internal/desktop/runtime.d.ts +7 -0
- package/dist/{operations.d.ts → persistence/operations.d.ts} +24 -2
- package/dist/persistence/persistence-secrets.d.ts +2 -0
- package/dist/persistence/recorded-workspace.d.ts +4 -0
- package/dist/{sessions.d.ts → persistence/sessions.d.ts} +3 -0
- package/dist/persistence/sqlite-access.d.ts +26 -0
- package/dist/{sqlite-database.d.ts → persistence/sqlite-database.d.ts} +2 -0
- package/dist/{state-backup.d.ts → persistence/state-backup.d.ts} +9 -1
- package/dist/{capabilities.d.ts → providers/capabilities.d.ts} +1 -1
- package/dist/{routing.d.ts → providers/routing.d.ts} +1 -1
- package/dist/{config.d.ts → runtime/config.d.ts} +1 -1
- package/dist/{harness.d.ts → runtime/harness.d.ts} +12 -135
- package/dist/{orchestration.d.ts → runtime/orchestration.d.ts} +3 -0
- package/dist/{runtime-policy.d.ts → runtime/runtime-policy.d.ts} +1 -1
- package/dist/runtime/usage-ledger.d.ts +84 -0
- package/dist/service-cli.d.ts +2 -0
- package/dist/service-cli.js +10899 -0
- package/dist/tools/execution.d.ts +47 -0
- package/dist/tools/shared.d.ts +67 -0
- package/dist/tools/workspace.d.ts +85 -0
- package/dist/verify-historical-migrations.js +5786 -5265
- package/dist/{workspace.d.ts → workspace/workspace.d.ts} +22 -0
- package/dist/zhx.js +16049 -12066
- package/docs/CLI.md +151 -30
- package/docs/CLIENT_PROTOCOL.md +212 -0
- package/docs/CREDENTIALS.md +59 -0
- package/docs/DURABLE_OPERATIONS.md +2 -2
- package/docs/FIRST_USE.md +82 -0
- package/docs/FIRST_USE_EXAMPLE.md +40 -0
- package/docs/HOSTILE_REPOSITORY_DEMO.md +1 -1
- package/docs/LOCAL_SERVICE.md +142 -0
- package/docs/README.md +24 -23
- package/docs/THREAT_MODEL.md +1 -1
- package/docs/TIME_TO_SAFE_FIX.md +2 -2
- package/docs/USAGE.md +181 -0
- package/evaluations/daily-cli-cohort.json +33 -0
- package/evaluations/representative-assembly-matrix.json +28 -1
- package/examples/README.md +26 -0
- package/examples/first-use/greeting.test.ts +3 -0
- package/examples/first-use/greeting.ts +1 -0
- package/examples/first-use/package.json +7 -0
- package/package.json +39 -11
- package/ROADMAP.md +0 -414
- package/benchmarks/baselines/context-navigation-2026-09-09.json +0 -94
- package/benchmarks/baselines/efficiency-2026-09-08.json +0 -233
- package/benchmarks/baselines/external-final-2026-09-08.json +0 -588
- package/benchmarks/baselines/external-intermediate-2026-09-08.json +0 -116
- package/benchmarks/baselines/external-matched-openai-2026-09-08.json +0 -1922
- package/benchmarks/baselines/external-matched-qwen-2026-09-08.json +0 -1706
- package/benchmarks/baselines/external-pilot-2026-09-08.json +0 -439
- package/benchmarks/baselines/external-qwen-flash-2026-09-08.json +0 -1570
- package/benchmarks/baselines/external-qwen-remediation-2026-09-09.json +0 -1509
- package/benchmarks/baselines/external-qwen-sdk-114-progress-2026-09-09.json +0 -2509
- package/benchmarks/baselines/external-sdk-upgrade-2026-09-08.json +0 -564
- package/benchmarks/baselines/external-verifier-recovery-2026-09-09.json +0 -794
- package/benchmarks/baselines/full-harness-review-2026-09-10.json +0 -134
- package/benchmarks/baselines/harness-audit-2026-09-09.json +0 -136
- package/benchmarks/baselines/harness-remediation-2026-09-09.json +0 -160
- package/benchmarks/baselines/oci-remediation-2026-09-10.json +0 -535
- package/benchmarks/baselines/rc14-holdout-2026-09-10.json +0 -854
- package/benchmarks/baselines/repair-architecture-audit-2026-09-09.json +0 -75
- package/benchmarks/baselines/time-to-safe-fix-live-expanded-2026-08-21.json +0 -186
- package/benchmarks/baselines/time-to-safe-fix-live-smoke-2026-08-21.json +0 -186
- package/dist/console-input.d.ts +0 -28
- package/docs/GA_READINESS.md +0 -29
- package/docs/GEMINI_1_0_DECISION.md +0 -9
- package/docs/LIVE_CERTIFICATION.md +0 -107
- package/docs/RC13_SECURITY_REVIEW.md +0 -28
- package/docs/RC14_DELEGATED_SECURITY_DECISION.md +0 -80
- package/docs/RC14_SECURITY_REVIEW.md +0 -40
- package/docs/RELEASE.md +0 -96
- package/docs/ROLLBACK.md +0 -9
- package/docs/SECURITY_REVIEW_EVIDENCE.md +0 -17
- package/docs/ga-readiness.json +0 -366
- package/docs/reports/EFFICIENCY_REVIEW.md +0 -156
- package/docs/reports/EXTERNAL_COMPARISON.md +0 -434
- package/docs/reports/FULL_HARNESS_REVIEW_2026-09-10.md +0 -200
- package/docs/reports/GA_BUDGET_REMEDIATION_2026-09-19.md +0 -38
- package/docs/reports/GA_REPAIR_RECOVERY_2026-09-19.md +0 -700
- package/docs/reports/GA_VALIDATION_2026-09-19.md +0 -111
- package/docs/reports/HARNESS_ARCHITECTURE_REVIEW_2026-09-09.md +0 -202
- package/docs/reports/HARNESS_AUDIT_2026-09-09.md +0 -306
- package/docs/reports/HARNESS_REMEDIATION_2026-09-09.md +0 -74
- package/docs/reports/HARNESS_REMEDIATION_2026-09-10.md +0 -90
- package/docs/reports/MODEL_COMPARISON_2026-09-09.md +0 -184
- package/docs/reports/QWEN_REMEDIATION_COMPARISON_2026-09-09.md +0 -142
- package/docs/reports/RC14_VALIDATION_2026-09-10.md +0 -45
- package/docs/reports/README.md +0 -26
- package/docs/reports/evidence/ga-budget-remediation-2026-09-19.json +0 -133
- package/docs/reports/evidence/ga-catalog-ablation-2026-09-19.json +0 -699
- package/docs/reports/evidence/ga-catalog-ablation-plan-2026-09-19.json +0 -40
- package/docs/reports/evidence/ga-catalog-observed-2026-09-19.json +0 -985
- package/docs/reports/evidence/ga-catalog-observed-plan-2026-09-19.json +0 -28
- package/docs/reports/evidence/ga-catalog-observed-status-2026-09-19.json +0 -15
- package/docs/reports/evidence/ga-complete-local-check-2026-09-19.json +0 -47
- package/docs/reports/evidence/ga-completion-reminder-2026-09-19.json +0 -22
- package/docs/reports/evidence/ga-fresh-cohort-plan-2026-09-19.json +0 -54
- package/docs/reports/evidence/ga-fresh-cohort-preparation-2026-09-19.json +0 -242
- package/docs/reports/evidence/ga-fresh-cohort-result-2026-09-19.json +0 -4318
- package/docs/reports/evidence/ga-local-validation-followup-2026-09-19.json +0 -66
- package/docs/reports/evidence/ga-node-consumers-2026-09-19.json +0 -31
- package/docs/reports/evidence/ga-package-content-validation-2026-09-19.json +0 -22
- package/docs/reports/evidence/ga-plan-completion-2026-09-19.json +0 -39
- package/docs/reports/evidence/ga-plan-reserve-2026-09-19.json +0 -573
- package/docs/reports/evidence/ga-plan-reserve-plan-2026-09-19.json +0 -24
- package/docs/reports/evidence/ga-plan-transition-2026-09-19.json +0 -19
- package/docs/reports/evidence/ga-private-verifier-plan-2026-09-19.json +0 -24
- package/docs/reports/evidence/ga-private-verifier-root-cause-2026-09-19.json +0 -41
- package/docs/reports/evidence/ga-published-sdk-2026-09-19.json +0 -35
- package/docs/reports/evidence/ga-python-checkout-imports-2026-09-19.json +0 -95
- package/docs/reports/evidence/ga-python-origin-delivery-2026-09-19.json +0 -211
- package/docs/reports/evidence/ga-python-origin-delivery-plan-2026-09-19.json +0 -27
- package/docs/reports/evidence/ga-qwen-patched-package-2026-09-19.json +0 -1092
- package/docs/reports/evidence/ga-qwen-patched-package-plan-2026-09-19.json +0 -18
- package/docs/reports/evidence/ga-qwen-published-2026-09-19.json +0 -571
- package/docs/reports/evidence/ga-qwen-published-plan-2026-09-19.json +0 -18
- package/docs/reports/evidence/ga-qwen-tool-choice-2026-09-19.json +0 -85
- package/docs/reports/evidence/ga-qwen-tool-choice-patched-2026-09-19.json +0 -85
- package/docs/reports/evidence/ga-recovery-development-2026-09-19.json +0 -1066
- package/docs/reports/evidence/ga-recovery-graded-development-2026-09-19.json +0 -1313
- package/docs/reports/evidence/ga-recovery-graded-v2-2026-09-19.json +0 -1151
- package/docs/reports/evidence/ga-recovery-v3-2026-09-19.json +0 -3943
- package/docs/reports/evidence/ga-recovery-v4-2026-09-19.json +0 -1055
- package/docs/reports/evidence/ga-recovery-v5-2026-09-19.json +0 -1245
- package/docs/reports/evidence/ga-recovery-v6-2026-09-19.json +0 -699
- package/docs/reports/evidence/ga-recovery-v7-2026-09-19.json +0 -854
- package/docs/reports/evidence/ga-recovery-v8-2026-09-19.json +0 -596
- package/docs/reports/evidence/ga-required-delivery-2026-09-19.json +0 -25
- package/docs/reports/evidence/ga-required-delivery-live-2026-09-19.json +0 -1337
- package/docs/reports/evidence/ga-required-delivery-live-plan-2026-09-19.json +0 -25
- package/docs/reports/evidence/ga-retained-candidate-grading-2026-09-19.json +0 -30
- package/docs/reports/evidence/ga-tool-selection-live-2026-09-19.json +0 -559
- package/docs/reports/evidence/ga-tool-selection-live-plan-2026-09-19.json +0 -28
- package/docs/reports/evidence/ga-tool-selection-recovery-2026-09-19.json +0 -27
- package/docs/reports/evidence/ga-validation-2026-09-19.json +0 -236
- package/docs/reports/evidence/ga-verifier-discovery-live-2026-09-19.json +0 -1369
- package/docs/reports/evidence/ga-verifier-discovery-plan-2026-09-19.json +0 -29
- package/docs/reports/evidence/ga-verifier-failure-identification-2026-09-19.json +0 -30
- package/docs/reports/evidence/ga-verifier-feedback-2026-09-19.json +0 -65
- package/docs/reports/evidence/ga-verifier-hints-live-2026-09-19.json +0 -1297
- package/docs/reports/evidence/ga-verifier-hints-plan-2026-09-19.json +0 -27
- package/docs/reports/evidence/ga-work-boundary-context-analysis-2026-09-19.json +0 -113
- package/docs/reports/evidence/ga-work-boundary-live-2026-09-19.json +0 -301
- package/docs/reports/evidence/ga-work-boundary-live-plan-2026-09-19.json +0 -84
- package/docs/reports/evidence/ga-work-budget-planning-2026-09-19.json +0 -32
- package/docs/reports/evidence/ga-working-context-2026-09-19.json +0 -22
- package/docs/reports/evidence/rc14-delegated-security-review-2026-09-20.json +0 -81
- package/docs/reports/evidence/rc14-ga-gate-2026-09-20.json +0 -18
- package/docs/reports/evidence/rc14-representative-2026-09-20.json +0 -509
- package/docs/reports/evidence/rc14-security-regressions-2026-09-20.json +0 -64
- package/docs/reports/evidence/security-current-2026-09-19.json +0 -91
- package/docs/reports/evidence/security-remediation-2026-09-19.json +0 -97
- /package/dist/{cli-stream.d.ts → cli/cli-stream.d.ts} +0 -0
- /package/dist/{json-contracts.d.ts → client/json-contracts.d.ts} +0 -0
- /package/dist/{compaction.d.ts → context/compaction.d.ts} +0 -0
- /package/dist/{context-metrics.d.ts → context/context-metrics.d.ts} +0 -0
- /package/dist/{task-memory.d.ts → context/task-memory.d.ts} +0 -0
- /package/dist/{package-manager.d.ts → execution/package-manager.d.ts} +0 -0
- /package/dist/{process-runtime.d.ts → execution/process-runtime.d.ts} +0 -0
- /package/dist/{mcp.d.ts → integrations/mcp.d.ts} +0 -0
- /package/dist/{state-directory.d.ts → persistence/state-directory.d.ts} +0 -0
- /package/dist/{providers.d.ts → providers/providers.d.ts} +0 -0
- /package/dist/{errors.d.ts → runtime/errors.d.ts} +0 -0
- /package/dist/{model-budget.d.ts → runtime/model-budget.d.ts} +0 -0
- /package/dist/{repair-controller.d.ts → runtime/repair-controller.d.ts} +0 -0
- /package/dist/{repair-progress.d.ts → runtime/repair-progress.d.ts} +0 -0
- /package/dist/{repair-verifier.d.ts → runtime/repair-verifier.d.ts} +0 -0
- /package/dist/{run-interruption.d.ts → runtime/run-interruption.d.ts} +0 -0
- /package/dist/{runtime-checkpoints.d.ts → runtime/runtime-checkpoints.d.ts} +0 -0
- /package/dist/{runtime-diagnostics.d.ts → runtime/runtime-diagnostics.d.ts} +0 -0
- /package/dist/{time-to-safe-fix.d.ts → runtime/time-to-safe-fix.d.ts} +0 -0
- /package/dist/{tool-registry.d.ts → tools/tool-registry.d.ts} +0 -0
- /package/dist/{bounded-reads.d.ts → workspace/bounded-reads.d.ts} +0 -0
- /package/dist/{change-envelope.d.ts → workspace/change-envelope.d.ts} +0 -0
- /package/dist/{edit-contracts.d.ts → workspace/edit-contracts.d.ts} +0 -0
- /package/dist/{file-security.d.ts → workspace/file-security.d.ts} +0 -0
- /package/dist/{replacement-edits.d.ts → workspace/replacement-edits.d.ts} +0 -0
- /package/dist/{workspace-mutation-lock.d.ts → workspace/workspace-mutation-lock.d.ts} +0 -0
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# Validación externa automatizada de GA — 19 de septiembre de 2026
|
|
2
|
-
|
|
3
|
-
**Veredicto: NO-GO para RC.14 / promoción a 1.0.0.** Se reproduce un bloqueo
|
|
4
|
-
funcional de los flujos de varios turnos de Meta y OpenAI con el presupuesto
|
|
5
|
-
predeterminado. La suite existente pasa, pero no detecta esta combinación.
|
|
6
|
-
|
|
7
|
-
Evaluador: Codex, actuando como validador externo automatizado por pedido del
|
|
8
|
-
operador. Este informe no es una firma humana, una auditoría integral de seguridad
|
|
9
|
-
ni evidencia de publicación. No se modificaron el runtime ni los criterios de GA.
|
|
10
|
-
|
|
11
|
-
## Identidad y reproducibilidad
|
|
12
|
-
|
|
13
|
-
- Commit: `28723ff3350b7572d5bd68f2d40b6feef1e0e6b4`.
|
|
14
|
-
- Versión: `1.0.0-rc.14`; Bun 1.4.0, Node 22.21.0, macOS arm64.
|
|
15
|
-
- Se exportó el commit con `git archive` y se instaló su lockfile con
|
|
16
|
-
`bun install --frozen-lockfile --ignore-scripts` en una carpeta temporal aislada.
|
|
17
|
-
- El checkout original tenía dependencias desactualizadas y después recibió
|
|
18
|
-
cambios concurrentes en `package.json`, `bun.lock` y `node_modules`. Los
|
|
19
|
-
resultados definitivos proceden de la copia aislada; no certifican esos cambios.
|
|
20
|
-
- [Evidencia estructurada](evidence/ga-validation-2026-09-19.json): resultados,
|
|
21
|
-
hash del tarball local, versiones, CI y diagnósticos sin contenido de proveedores.
|
|
22
|
-
- El tarball local pasó inspección de contenido e instalación independiente de
|
|
23
|
-
esos mismos bytes. No tiene identidad de release protegida ni provenance npm.
|
|
24
|
-
|
|
25
|
-
## Resultados ejecutados
|
|
26
|
-
|
|
27
|
-
| Frontera | Resultado |
|
|
28
|
-
| --- | --- |
|
|
29
|
-
| `ZHIVEX_HARNESS_OCI_REQUIRED=1 bun run check` | PASS, salida 0 en copia aislada |
|
|
30
|
-
| Suite existente | 512/512 tests, 59 archivos |
|
|
31
|
-
| Docs, contratos de preparación, tipos de fuente y tooling | PASS |
|
|
32
|
-
| Migraciones históricas 0.10.0 / 0.11.1 | PASS |
|
|
33
|
-
| Evaluaciones determinísticas | 7/7 |
|
|
34
|
-
| Benchmarks de workspace y safe-fix scripted | PASS; no acreditan capacidad de modelos |
|
|
35
|
-
| MCP e interoperabilidad con SDK oficial | PASS |
|
|
36
|
-
| OCI real | PASS, Docker 29.8.0, secretos excluidos, red denegada e importación gobernada |
|
|
37
|
-
| Paquete instalado y tarball exacto | PASS |
|
|
38
|
-
| Auditoría de dependencias | BLOQUEADA: servicio de advisories npm HTTP 503, dos intentos |
|
|
39
|
-
| Scripts de dependencias no confiables | 0 |
|
|
40
|
-
| Gate formal `readiness:1.0:release` | FAIL: RC.14 incompleta, revisión pendiente, fase y versión sin promover |
|
|
41
|
-
|
|
42
|
-
La imagen OCI usada fue
|
|
43
|
-
`node:24-bookworm-slim@sha256:0e0ff40c39bc087845bfb27465a0df4ea419520094bc35842ff83dd8cbe6f9b6`.
|
|
44
|
-
|
|
45
|
-
| Prueba live de fuente aislada | Meta muse-spark-1.2 | Qwen qwen3.8-max | OpenAI gpt-5.6-luna |
|
|
46
|
-
| --- | --- | --- | --- |
|
|
47
|
-
| Aprobación, persistencia y reinicio | FAIL | PASS | FAIL |
|
|
48
|
-
| Orquestación, hijo persistido y reapertura | PASS | PASS | PASS |
|
|
49
|
-
| Ejecución OCI e importación al host | FAIL | PASS | FAIL |
|
|
50
|
-
|
|
51
|
-
Routing OpenAI → Qwen: PASS, una delegación y una herramienta del revisor.
|
|
52
|
-
Estos smokes usan las credenciales existentes y fixtures temporales; no son la
|
|
53
|
-
matriz representativa de un release protegido. Gemini no pertenece a la cohorte GA.
|
|
54
|
-
|
|
55
|
-
## Hallazgo GA-01 — P1 funcional: reserva de salida impide el segundo turno
|
|
56
|
-
|
|
57
|
-
Con `subagentProfiles: []`, Meta y OpenAI activan el presupuesto de transporte en
|
|
58
|
-
`src/harness.ts` (`createProviderCompatibleBudget`) y `src/runtime-policy.ts`.
|
|
59
|
-
La integración con Core 1.14.0 vuelve a exigir la reserva completa de salida en
|
|
60
|
-
el preflight del siguiente turno. La reserva no cabe después del primer consumo:
|
|
61
|
-
|
|
62
|
-
| Proveedor | Límite | Consumido | Reserva solicitada | Disponible | Resultado |
|
|
63
|
-
| --- | ---: | ---: | ---: | ---: | --- |
|
|
64
|
-
| Meta | 30.000 | 2 | 30.000 | 29.998 | GuardrailTriggeredError, etapa input |
|
|
65
|
-
| OpenAI | 30.000 | 2 | 30.000 | 29.998 | GuardrailTriggeredError, etapa input |
|
|
66
|
-
| Qwen, control | 30.000 | 4 al terminar | — | — | completed |
|
|
67
|
-
|
|
68
|
-
Se reprodujo sin red ni modelo real usando un primer turno `list_files` de dos
|
|
69
|
-
tokens y un segundo turno de finalización. También se observó el guardrail de
|
|
70
|
-
presupuesto de salida en diagnósticos adicionales de los fallos live de aprobación.
|
|
71
|
-
Los fallos live OCI tienen el mismo fingerprint; no se afirma una inspección
|
|
72
|
-
independiente de su causa interna.
|
|
73
|
-
|
|
74
|
-
Ejecutar desde un checkout con el lockfile del commit evaluado:
|
|
75
|
-
|
|
76
|
-
```sh
|
|
77
|
-
bun run scripts/validate-ga-budget.ts
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
La nueva prueba de aceptación sale con código 1 en el candidato evaluado; Qwen
|
|
81
|
-
actúa como control positivo. No se incluye silenciosamente como un test verde.
|
|
82
|
-
El script valida finalización, salida esperada, uso y ejecución de herramienta.
|
|
83
|
-
Debe pasar para los tres proveedores después de corregir la coordinación entre
|
|
84
|
-
presupuesto acumulado y reserva por llamada, manteniendo límites y aprobaciones.
|
|
85
|
-
|
|
86
|
-
## Evidencia remota y pendientes
|
|
87
|
-
|
|
88
|
-
La consulta actual de [CI del mismo commit](https://github.com/Zhivex/zhivex-harness/actions/runs/35458111045)
|
|
89
|
-
mostró ambos jobs de consumidores Node 22.13/24 verdes. Los jobs de tooling macOS
|
|
90
|
-
y Ubuntu fallaron en auditoría de dependencias; el log de Ubuntu confirma HTTP 503.
|
|
91
|
-
[CodeQL del mismo commit](https://github.com/Zhivex/zhivex-harness/actions/runs/35458110958)
|
|
92
|
-
pasó. La indisponibilidad de advisories no equivale a cero vulnerabilidades.
|
|
93
|
-
|
|
94
|
-
Para levantar el NO-GO se requiere:
|
|
95
|
-
|
|
96
|
-
1. Corregir GA-01 y repetir esta aceptación y los smokes live afectados.
|
|
97
|
-
2. Resolver la retención por entrega de reparaciones registrada en
|
|
98
|
-
[la validación previa de RC.14](RC14_VALIDATION_2026-09-10.md), con una cohorte
|
|
99
|
-
nueva y criterios predeclarados. Esta validación no la reejecutó ni la cerró.
|
|
100
|
-
3. Recuperar auditoría de dependencias y CI completos.
|
|
101
|
-
4. Certificar el candidato final inmutable: tag, artefacto, OCI, live y matriz
|
|
102
|
-
representativa completa de 42 casos; verificar publicación y SLSA. No se
|
|
103
|
-
despachó publicación ni se ejecutó esa matriz sobre un candidato ya bloqueado.
|
|
104
|
-
5. Completar la revisión de seguridad de todas las fronteras y herramientas del
|
|
105
|
-
candidato final con la identidad exigida por la política vigente. El borrador
|
|
106
|
-
de RC.13 no cubre RC.14 y este informe no sustituye su firma humana.
|
|
107
|
-
6. Sólo después, preparar versión `1.0.0`, fase `ready` y ejecutar el gate formal.
|
|
108
|
-
|
|
109
|
-
No se cambiaron estados del ledger, se declararon cero hallazgos de seguridad,
|
|
110
|
-
se crearon tags ni se publicó ningún paquete. La revisión completa de seguridad
|
|
111
|
-
queda pendiente, no aprobada por inferencia a partir de tests o CodeQL verdes.
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
# Revisión estructural del harness tras la reevaluación Qwen
|
|
2
|
-
|
|
3
|
-
> Historical snapshot: versions, findings and measurements below describe the recorded run, not the current checkout. See the [report index](README.md) for follow-up work and the [documentation index](../README.md) for maintained guides.
|
|
4
|
-
|
|
5
|
-
El principal margen de mejora está en el controlador de reparación. El harness
|
|
6
|
-
dispone de mecanismos de ejecución gobernada, pero sigue delegando en el modelo
|
|
7
|
-
la decisión de abandonar la exploración, recuperar memoria, seleccionar una
|
|
8
|
-
verificación e importar. Las políticas añadidas restringen ciertas herramientas;
|
|
9
|
-
no implementan todavía un flujo de reparación con progreso comprobable y
|
|
10
|
-
presupuesto de cierre. Más instrucciones y herramientas no resolvieron esa
|
|
11
|
-
carencia y aumentaron el contexto fijo.
|
|
12
|
-
|
|
13
|
-
## Alcance y método
|
|
14
|
-
|
|
15
|
-
Revisión del checkout actual, incluidos cambios locales: instrucciones y catálogo,
|
|
16
|
-
lectura/búsqueda/edición, progreso, compacción/memoria, presupuesto, aprobación y
|
|
17
|
-
finalización, ciclo OCI, configuración CLI/orquestación, driver, métricas y pruebas.
|
|
18
|
-
Se contrastó con las veinte muestras archivadas de la última comparación y con
|
|
19
|
-
los informes históricos. No se hicieron llamadas nuevas a proveedores ni se
|
|
20
|
-
modificó el runtime. No es una recertificación completa de seguridad, proveedores,
|
|
21
|
-
servicios externos, concurrencia, plataformas o publicación.
|
|
22
|
-
|
|
23
|
-
Se ejecutaron 46 pruebas focalizadas en cinco archivos: progreso, remediación,
|
|
24
|
-
compacción, recuperación de verificación y SWE-bench. Pasaron todas. El nuevo
|
|
25
|
-
`../../evaluations/audits/repair-architecture-2026-09-09.ts` (source checkout)
|
|
26
|
-
usa herramientas reales de lectura sobre archivos temporales y llamadas simuladas
|
|
27
|
-
al middleware presupuestario. Pasó typecheck con las opciones estrictas del repo.
|
|
28
|
-
La [evidencia estructurada](../../benchmarks/baselines/repair-architecture-audit-2026-09-09.json)
|
|
29
|
-
incluye hashes de fuentes, resultados de los reproductores y métricas derivadas.
|
|
30
|
-
|
|
31
|
-
## Por qué las iteraciones no dieron el avance esperado
|
|
32
|
-
|
|
33
|
-
1. Se corrigieron defectos reales de integridad, cancelación, compatibilidad y
|
|
34
|
-
observabilidad. Esas correcciones son necesarias, pero su aprobación local
|
|
35
|
-
no demostraba que el agente fuera a resolver más tareas.
|
|
36
|
-
2. Se intervino con frecuencia sobre síntomas: más contexto recuperable,
|
|
37
|
-
instrucciones de cierre y contadores de exploración. Ninguno obliga a que
|
|
38
|
-
un candidato llegue a verificación con recursos suficientes.
|
|
39
|
-
3. La remediación agrupó once mejoras. La última matriz permite evaluar el
|
|
40
|
-
paquete completo, pero no atribuir el resultado a cada intervención. Sí hubo
|
|
41
|
-
un estudio anterior aislado de recuperación de verificador; no alcanzaba a
|
|
42
|
-
reparar intentos que nunca llegaban al verificador.
|
|
43
|
-
4. Se reutilizaron cinco tareas conocidas. Sirven para depurar; repetirlas no
|
|
44
|
-
amplía cobertura de generalización. Dos repeticiones tampoco estabilizan
|
|
45
|
-
suficientemente resultados de un agente estocástico.
|
|
46
|
-
5. Las nuevas ayudas también cuestan: sistema más catálogo aumentó de 11.157
|
|
47
|
-
a 13.755 caracteres por petición. No se exigió una mejora de resultado final
|
|
48
|
-
antes de considerar completada la mejora del mecanismo.
|
|
49
|
-
|
|
50
|
-
El resultado actual sigue siendo 0/10 entregas de Zhivex frente a 4/10 de mini
|
|
51
|
-
con el mismo Qwen solicitado. Los tres candidatos correctos de Zhivex identifican
|
|
52
|
-
una pérdida posterior a la edición, no tres éxitos ni una mejora medida respecto
|
|
53
|
-
de una baseline que no capturaba candidatos.
|
|
54
|
-
|
|
55
|
-
## Hallazgos y cambios necesarios
|
|
56
|
-
|
|
57
|
-
| ID | Prioridad | Diagnóstico | Cambio y criterio de aceptación |
|
|
58
|
-
| --- | --- | --- | --- |
|
|
59
|
-
| A01 | P1 | El cierre depende de otra decisión del modelo | Controlador durable por etapas y revisión de parche. Una edición activa una obligación pendiente de verificación; completar requiere recibo válido. |
|
|
60
|
-
| A02 | P1 | No hay reserva efectiva para cerrar | Separar presupuesto de trabajo y cierre, estimar la siguiente petición completa, reservar inspección/verificación y recuperación acotada. El trabajo ordinario no puede consumir la reserva. |
|
|
61
|
-
| A03 | P1 | La fase declarada no representa evidencia de progreso | Transiciones basadas en reproducción, digest del candidato y recibos; un plan es una hipótesis, no una reparación. |
|
|
62
|
-
| A04 | P2 | El alcance del plan no se aplica a lecturas por lotes | Normalizar y validar todos los paths de cada herramienta. La política debe ser consistente entre lectura individual, lote y búsqueda. |
|
|
63
|
-
| A05 | P1 | Recuperar memoria sigue siendo opcional; checks compactados pierden identidad | Proyección automática y acotada del estado de trabajo: requisito activo, hipótesis, evidencia, revisión del candidato y próximo check. Conservar vínculos a recibos completos. |
|
|
64
|
-
| A06 | P2 | Catálogo estático y estimación parcial del contexto | Catálogo mínimo por etapa y medición de mensajes + sistema + esquemas + margen del transporte; verificar compatibilidad con historia y aprobaciones. |
|
|
65
|
-
| A07 | P2 | El contrato de verificación exige salida cero, no suficiencia del check | Registrar propósito, aserciones y revisión probada; distinguir ejecución exitosa, reproducción corregida y regresión. No sustituir pruebas independientes por autoevaluación del modelo. |
|
|
66
|
-
| A08 | P2 | Crear/sincronizar el entorno consume una parte medible de los comandos | Explorar sesión por ejecución lógica y sincronización incremental conservando leases, cancelación e integridad. Medir por separado antes de cambiar. |
|
|
67
|
-
| A09 | P1 | Los gates de mecanismo no prueban mejora del agente | Regresiones de trayectorias difíciles, ablaciones pequeñas y promoción por resultados entregados, sin alterar métricas ni presupuestos tras observar fallos. |
|
|
68
|
-
| A10 | P2 | Perfil y entorno del benchmark difieren del producto y el competidor | Manifiesto efectivo exportable para CLI y benchmark; comparar calidad del candidato y entrega gobernada por separado. |
|
|
69
|
-
|
|
70
|
-
### A01–A03: cambiar quién controla el progreso
|
|
71
|
-
|
|
72
|
-
`runHarness` retorna un resultado no pendiente de aprobación sin conducir una
|
|
73
|
-
transición de reparación. La ruta terminal solo se activa si el modelo ya pidió
|
|
74
|
-
una herramienta terminal y quedó una aprobación única aprobada. Es una
|
|
75
|
-
optimización útil del cierre solicitado, no un controlador que garantice llegar a él.
|
|
76
|
-
|
|
77
|
-
`createRepairProgress` establece `phase=repair` al recibir `repair_plan`, incluso
|
|
78
|
-
antes de reproducir o editar. No tiene estados basados en candidato modificado,
|
|
79
|
-
verificación necesaria o importación pendiente. `closing()` activa un booleano
|
|
80
|
-
al 70% de uso y permite hasta cuatro lecturas y tres comandos adicionales. Un
|
|
81
|
-
modelo puede gastar lo restante antes de agotar esos contadores.
|
|
82
|
-
|
|
83
|
-
El reproductor consume 70.000 tokens, acepta tres respuestas de 10.000 y bloquea
|
|
84
|
-
la siguiente: reserva efectiva cero. En las trazas reales, nueve intentos entran
|
|
85
|
-
en cierre con cero bloqueos de fase y ninguno solicita verificación. No hace
|
|
86
|
-
falta una avería del SDK para explicar ese comportamiento.
|
|
87
|
-
|
|
88
|
-
Propuesta de flujo: explorar → reproducir → editar → verificar → importar →
|
|
89
|
-
completar. Debe permitir corregir hipótesis, reproducir con fixtures nuevos y
|
|
90
|
-
volver a editar tras una verificación fallida. La transición puede automatizar
|
|
91
|
-
inspección y preparación del próximo paso; nunca debe inventar aprobaciones,
|
|
92
|
-
usar pruebas ocultas ni importar candidatos solo porque el evaluador posterior
|
|
93
|
-
los considere correctos. Si falta autorización, termina como pendiente; si falta
|
|
94
|
-
evidencia o presupuesto, conserva candidato y causa sin declarar éxito.
|
|
95
|
-
|
|
96
|
-
La reserva debe calcularse antes de pedir otra respuesta, no solo después del
|
|
97
|
-
70%. Debe incluir el catálogo, la petición de cierre y una recuperación acotada.
|
|
98
|
-
Un porcentaje fijo puede ser un límite inicial, pero su efectividad depende del
|
|
99
|
-
tamaño de las peticiones. No se propone subir los 100.000 tokens para ocultar el
|
|
100
|
-
problema. La telemetría de transporte debe persistir como contabilidad propia;
|
|
101
|
-
restaurarla únicamente desde uso del SDK hereda los huecos ya documentados.
|
|
102
|
-
|
|
103
|
-
### A04: el plan no cubre la herramienta más utilizada
|
|
104
|
-
|
|
105
|
-
El wrapper consulta `input.path`. `read_files` usa `input.files[].path`, por lo
|
|
106
|
-
que queda fuera de esa comprobación. El reproductor registra `planned.txt`:
|
|
107
|
-
`read_file(unplanned.txt)` se rechaza por alcance y el lote equivalente devuelve
|
|
108
|
-
el archivo. Es un defecto de estrategia; las restricciones de seguridad del
|
|
109
|
-
workspace continúan aplicándose.
|
|
110
|
-
|
|
111
|
-
Hubo 52 ejecuciones de `read_files`, 27 de `search_files` y 7 de `search_many`.
|
|
112
|
-
Por ello no basta probar un wrapper con un schema ficticio que solo contiene
|
|
113
|
-
`path`: hay que probar los schemas reales y sus equivalencias. Contar un lote
|
|
114
|
-
como una lectura también separa cantidad de llamadas de cantidad de evidencia.
|
|
115
|
-
|
|
116
|
-
### A05–A06: memoria utilizable, no solo disponible
|
|
117
|
-
|
|
118
|
-
Las trazas contienen 14 eventos de compacción y una solicitud de `read_task`.
|
|
119
|
-
Esto no demuestra por sí solo qué requisito olvidó cada intento, pero sí que la
|
|
120
|
-
instrucción de recuperar la tarea después de compactar no se cumple de forma
|
|
121
|
-
sistemática. La tarea completa ahora está conservada en metadata; el siguiente
|
|
122
|
-
paso es presentarle al modelo automáticamente la parte necesaria, con acceso
|
|
123
|
-
a la fuente completa, sin reinyectar documentos enteros en todas las peticiones.
|
|
124
|
-
|
|
125
|
-
El compactor conserva paths, digests y códigos de salida, pero el reproductor
|
|
126
|
-
muestra que pierde `assert 2 + 2 == 4` y mantiene `exitCode=0`. Hace falta un
|
|
127
|
-
registro de evidencias ligado a `commandId`, propósito y revisión, cuya proyección
|
|
128
|
-
resuma resultados y ubicación de fallos. Los logs completos deben quedar acotados
|
|
129
|
-
y accesibles bajo la política de redacción; no incorporarse indiscriminadamente.
|
|
130
|
-
|
|
131
|
-
El estimador usado por compacción recibe mensajes y divide caracteres por cuatro;
|
|
132
|
-
no recibe el catálogo de herramientas. El medidor de transporte sí lo observa,
|
|
133
|
-
pero esa observación no alimenta una predicción del costo siguiente. Catálogo
|
|
134
|
-
y sistema crecieron 23,3%, mientras los resultados de herramientas presentes por
|
|
135
|
-
petición bajaron solo 7,2% en la cohorte. Es evidencia de un tradeoff; no prueba
|
|
136
|
-
causal de que retirar memoria aumente la tasa de resolución.
|
|
137
|
-
|
|
138
|
-
Un catálogo dinámico debe conservar consistencia del protocolo de herramientas
|
|
139
|
-
anteriores y de aprobaciones pendientes. No basta eliminar nombres del objeto
|
|
140
|
-
antes de cada llamada. Primero conviene medir una variante estática mínima,
|
|
141
|
-
manteniendo edición gobernada e importación, y luego agregar selección por fase.
|
|
142
|
-
|
|
143
|
-
### A07–A08: calidad de verificación y costo OCI
|
|
144
|
-
|
|
145
|
-
`verify_and_apply_environment_patch` verifica patchId, ejecuta argv aprobado,
|
|
146
|
-
exige salida cero, rechaza cambios producidos por el verificador e importa bajo
|
|
147
|
-
las comprobaciones existentes. Esas garantías deben conservarse. Una salida cero
|
|
148
|
-
no demuestra que el comando haya comprobado el requisito: un contrato de evidencia
|
|
149
|
-
debe hacer explícito qué se comprobó, sin confundirlo con una prueba matemática
|
|
150
|
-
de cobertura. El evaluador independiente sigue siendo necesario.
|
|
151
|
-
|
|
152
|
-
En los 17 comandos nativos observados, las métricas acumulan 68,84 s, de los cuales
|
|
153
|
-
11,60 s corresponden a creación de sesión y 12,35 s a exportación de workspace:
|
|
154
|
-
34,8% del tiempo instrumentado de comandos entre ambas fases. No es 34,8% de toda
|
|
155
|
-
la ejecución ni demuestra que OCI explique el fracaso. El runtime elimina los
|
|
156
|
-
contenedores al liberar una sesión; su calentamiento depende de la duración de
|
|
157
|
-
la adquisición. Hay margen para estudiar persistencia bajo una misma ejecución
|
|
158
|
-
lógica, pero corregir el cierre y el contexto tiene prioridad sobre este ahorro.
|
|
159
|
-
|
|
160
|
-
### A09–A10: evaluar resultados y trasladarlos al producto
|
|
161
|
-
|
|
162
|
-
Los tests de progreso verifican contadores y excepciones. Los de recuperación
|
|
163
|
-
usan un modelo simulado que emite `read_task` o el verificador cuando el fixture
|
|
164
|
-
lo programa. Son regresiones válidas del mecanismo; no evidencia de que Qwen
|
|
165
|
-
vaya a tomar esas decisiones. `scripts/evaluate.ts` también usa modelos simulados.
|
|
166
|
-
|
|
167
|
-
Añadir trayectorias con edición correcta temprana seguida de exploración,
|
|
168
|
-
memoria compactada, lotes fuera de alcance, aprobación tardía, cancelación,
|
|
169
|
-
verificación fallida y reinicio durable. Medir qué decisiones puede forzar el
|
|
170
|
-
controlador sin depender de que el mock le entregue el final feliz. En live,
|
|
171
|
-
registrar tokens hasta primera edición, primera reproducción y verificación,
|
|
172
|
-
tokens después del último candidato, candidato correcto y entrega final.
|
|
173
|
-
|
|
174
|
-
El benchmark activa `repair`, desactiva contexto de proyecto y subagentes, y
|
|
175
|
-
recorta el catálogo. La CLI por defecto resuelve `strict`. No se concluye que
|
|
176
|
-
estos resultados cubran toda la CLI, MCP, skills u orquestación. El siguiente
|
|
177
|
-
experimento debe exportar el perfil efectivo y reutilizar el mismo ensamblado
|
|
178
|
-
del producto donde sea posible.
|
|
179
|
-
|
|
180
|
-
## Orden de trabajo y criterio de avance
|
|
181
|
-
|
|
182
|
-
1. **Cerrar correctamente un candidato existente.** Regresión de flujo sin modelo
|
|
183
|
-
real que conserve permisos, integridad y cancelación; luego un ensayo live
|
|
184
|
-
acotado. El objetivo es elevar entregas, no solo llegar a editar.
|
|
185
|
-
2. **Integrar presupuesto y estado de reparación.** Hacer imposible gastar la
|
|
186
|
-
reserva en exploración ordinaria; persistir estado/contabilidad y probar resume.
|
|
187
|
-
3. **Reducir contexto efectivo.** Variante mínima del catálogo y memoria proyectada,
|
|
188
|
-
cambiadas por separado para identificar el aporte de cada una.
|
|
189
|
-
4. **Evaluar generalización.** Tras una mejora repetida en desarrollo, congelar
|
|
190
|
-
configuración y abrir una cohorte nueva por tipo de tarea y repositorio.
|
|
191
|
-
|
|
192
|
-
Predeclarar para cada ensayo hipótesis, cambio, tareas, repeticiones, límites,
|
|
193
|
-
métrica principal y regla de parada. Mantener comparables modelo, razonamiento y
|
|
194
|
-
transporte; la comparación anterior OpenAI/Qwen variaba esas tres dimensiones.
|
|
195
|
-
No iniciar otra matriz completa por cada ajuste menor. Un resultado sin mejora
|
|
196
|
-
final exige revisar la hipótesis, no acumular más herramientas por defecto.
|
|
197
|
-
|
|
198
|
-
La HU del SDK sobre herramientas desconocidas y pérdida de uso durable ya está
|
|
199
|
-
[en Zhivex](https://app.notion.com/p/3d7777b104f681248ed3cecffe9328d2).
|
|
200
|
-
Los nuevos hallazgos reproducidos aquí pertenecen al harness y no requieren
|
|
201
|
-
esperar al SDK. Muse o un modelo con mayor razonamiento podrían cambiar las
|
|
202
|
-
decisiones, pero no garantizan resolver estos defectos del controlador.
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
# Auditoría integral del harness — 2026-09-09
|
|
2
|
-
|
|
3
|
-
> Historical snapshot: versions, findings and measurements below describe the recorded run, not the current checkout. See the [report index](README.md) for follow-up work and the [documentation index](../README.md) for maintained guides.
|
|
4
|
-
|
|
5
|
-
> Estado posterior: los once hallazgos tienen implementaciones y regresiones locales.
|
|
6
|
-
> Ver [cierre de implementación](HARNESS_REMEDIATION_2026-09-09.md).
|
|
7
|
-
> El cuerpo de este documento y el baseline original conservan la evidencia previa;
|
|
8
|
-
> sus ubicaciones de líneas son históricas y los resultados no describen el código corregido.
|
|
9
|
-
|
|
10
|
-
La revisión encontró problemas adicionales a la adaptación de Qwen. Los más
|
|
11
|
-
urgentes son la cancelación de la ruta terminal, una carrera en la validación de
|
|
12
|
-
directorios y la pérdida de requisitos durante la compactación. No hay evidencia
|
|
13
|
-
para atribuir estos hallazgos al SDK nuevo.
|
|
14
|
-
|
|
15
|
-
El análisis cubre el checkout de `1.0.0-rc.13`, incluido el trabajo local sin
|
|
16
|
-
commit, con Core 1.14.0, Agents 1.4.0 y Qwen 0.11.4. No se modificó código de
|
|
17
|
-
producción. Se añadieron un reproductor local y evidencia; no se hicieron llamadas
|
|
18
|
-
nuevas a modelos, publicación ni cambios en servicios externos.
|
|
19
|
-
|
|
20
|
-
## Alcance y método
|
|
21
|
-
|
|
22
|
-
Se inspeccionaron las fronteras entre instrucciones, herramientas, SDK, contexto,
|
|
23
|
-
OCI, aprobaciones, persistencia, CLI, orquestación, telemetría y evaluación. Se
|
|
24
|
-
revisaron también los contratos de seguridad y los gates locales de CI/release.
|
|
25
|
-
Esto es una auditoría de superficies y riesgos, no una certificación de todas las
|
|
26
|
-
líneas, plataformas o condiciones concurrentes del producto.
|
|
27
|
-
|
|
28
|
-
- **466 pruebas existentes:** pasaron, sin fallos.
|
|
29
|
-
- **7 evaluaciones determinísticas:** pasaron; usan modelos simulados.
|
|
30
|
-
- Typecheck de producción, contratos y migraciones publicadas 0.10.0/0.11.1: pasaron.
|
|
31
|
-
- Reproductor de auditoría: ejecutado y validado con TypeScript por separado.
|
|
32
|
-
- El contrato de preparación sigue declarando abierto el gate de revisión de seguridad.
|
|
33
|
-
- La evidencia live consultada es la matriz Qwen anterior de diez intentos; no se repitió.
|
|
34
|
-
- No se revalidaron servicios MCP externos, el paquete publicado, CI remoto ni OCI real en esta auditoría.
|
|
35
|
-
|
|
36
|
-
Reproducción local sin credenciales ni Docker:
|
|
37
|
-
|
|
38
|
-
```sh
|
|
39
|
-
bun --no-env-file run evaluations/audits/harness-review-2026-09-09.ts
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
El `../../evaluations/audits/harness-review-2026-09-09.ts` (source checkout) sólo escribe
|
|
43
|
-
fixtures temporales que elimina al terminar. La [evidencia estructurada](../../benchmarks/baselines/harness-audit-2026-09-09.json)
|
|
44
|
-
registra observaciones, versiones y hashes. No es una suite que obligue a conservar
|
|
45
|
-
los defectos: después de corregirlos deben cambiar las observaciones y agregarse
|
|
46
|
-
regresiones con el comportamiento deseado.
|
|
47
|
-
|
|
48
|
-
## Hallazgos priorizados
|
|
49
|
-
|
|
50
|
-
| ID | Prioridad | Hallazgo | Evidencia | Responsable |
|
|
51
|
-
| --- | --- | --- | --- | --- |
|
|
52
|
-
| H01 | P1 | La importación terminal puede ejecutarse después de cancelar | Reproducido | Harness |
|
|
53
|
-
| H02 | P1 condicional a mutación concurrente | Una lectura puede seguir un directorio padre sustituido | Reproducido con intercalado controlado | Harness/filesystem |
|
|
54
|
-
| H03 | P1 | La compactación elimina criterios de aceptación del objetivo | Reproducido | Harness/contexto |
|
|
55
|
-
| H04 | P2 | Búsquedas válidas pueden producir más de 300.000 caracteres | Reproducido | Harness/herramientas |
|
|
56
|
-
| H05 | P2 | Búsqueda incompleta se presenta como ausencia de coincidencias | Reproducido | Harness/herramientas |
|
|
57
|
-
| H06 | P2 | Las instrucciones y el catálogo de herramientas no coinciden | Código y fixture | Harness/driver |
|
|
58
|
-
| H07 | P2 | Readquirir OCI pierde el historial visible de mutaciones | Reproducido | Harness/OCI |
|
|
59
|
-
| H08 | P2 | El control de exploración no representa el progreso de reparación | Código, fixture y matriz live | Harness/estrategia |
|
|
60
|
-
| H09 | P2 | Las mejoras del driver no equivalen a mejoras activas en CLI | Código | Harness/producto |
|
|
61
|
-
| H10 | P2 | La evaluación pierde los parches candidatos y etapas intermedias | Código y resultados | Harness/evaluación |
|
|
62
|
-
| H11 | P2 | La telemetría no permite cerrar ciertas causas de fallo ni tiempos | Código y matriz live | Harness/observabilidad |
|
|
63
|
-
|
|
64
|
-
### H01 — Cancelación omitida en la ruta terminal
|
|
65
|
-
|
|
66
|
-
`src/harness.ts:1030`, `:1054`, `:1098`, `:1472`.
|
|
67
|
-
|
|
68
|
-
`executeTerminalReceiptTool` readquiere el entorno y construye un
|
|
69
|
-
`ToolExecutionContext` sin propagar el `abortSignal` del llamado. `runHarness`
|
|
70
|
-
tampoco vuelve a comprobarlo después de resolver la aprobación y antes de tomar
|
|
71
|
-
esta ruta. Se sale del circuito normal del SDK para ejecutar e importar.
|
|
72
|
-
|
|
73
|
-
La prueba canceló la señal dentro del resolver de aprobación, antes de devolver
|
|
74
|
-
la respuesta. Resultado: `status=completed`, una ejecución, sin señal en el runtime
|
|
75
|
-
e importación efectiva del archivo de prueba. El verificador fue simulado; las
|
|
76
|
-
aprobaciones, snapshots, journal y escritura del host fueron los reales del harness.
|
|
77
|
-
|
|
78
|
-
Alcance: ruta opt-in `terminalReceiptTools`, usada por el benchmark y disponible
|
|
79
|
-
en la biblioteca. No demuestra que toda cancelación de la CLI falle.
|
|
80
|
-
|
|
81
|
-
Corrección: propagar señal y deadline, comprobar cancelación antes de ejecutar y
|
|
82
|
-
antes de importar, y mantener la finalización de estado bajo las mismas garantías
|
|
83
|
-
de cancelación/concurrencia del circuito ordinario. Validar cancelación antes,
|
|
84
|
-
durante y después del verificador; ninguna debe producir una importación posterior.
|
|
85
|
-
|
|
86
|
-
### H02 — El descriptor protege la hoja, no toda la ruta
|
|
87
|
-
|
|
88
|
-
`src/workspace.ts:478`, `:508`; `src/file-security.ts:45`.
|
|
89
|
-
|
|
90
|
-
Se validan ancestros con `lstat`, pero después se abre una ruta absoluta. El
|
|
91
|
-
`O_NOFOLLOW` usado al abrir protege la hoja; un ancestro puede haber cambiado.
|
|
92
|
-
La prueba sustituye el directorio padre por un symlink después de `safePath` y
|
|
93
|
-
antes de la lectura real. Se devolvió el sentinel externo como si perteneciera a
|
|
94
|
-
`parent/fixture.txt` dentro del workspace.
|
|
95
|
-
|
|
96
|
-
Es un intercalado determinístico mediante instrumentación del objeto de prueba,
|
|
97
|
-
no una medición de probabilidad de explotación. Requiere otro actor capaz de
|
|
98
|
-
modificar el directorio durante la operación; un symlink estático sigue siendo
|
|
99
|
-
rechazado. No se usaron secretos ni se demostró escritura externa.
|
|
100
|
-
|
|
101
|
-
Corrección: ligar la resolución completa a directorios confiables y a descriptores
|
|
102
|
-
(o un mecanismo equivalente soportado por plataforma). Repetir `lstat` antes o
|
|
103
|
-
después no cierra por sí solo la carrera. Auditar también lecturas de contexto y
|
|
104
|
-
operaciones de publicación que combinan validación de padres con uso posterior de
|
|
105
|
-
rutas. No marcar estas otras superficies como explotadas sin reproducirlas.
|
|
106
|
-
|
|
107
|
-
### H03 — La memoria conserva ubicaciones, pero pierde la tarea
|
|
108
|
-
|
|
109
|
-
`src/compaction.ts:18`, `:75`, `:89`, `:163`; `src/harness.ts:694`.
|
|
110
|
-
|
|
111
|
-
El primer objetivo se recorta a 768 caracteres y los mensajes de seguimiento a
|
|
112
|
-
512. Se trata de un prefijo, no de una extracción semántica de requisitos. Un
|
|
113
|
-
objetivo de 1.589 caracteres perdió el criterio final `MANDATORY_ACCEPTANCE` al
|
|
114
|
-
compactar. Las compactaciones siguientes sólo pueden conservar lo que sobrevivió.
|
|
115
|
-
El SDK invoca el compactor sobre el prefijo que reemplazará; el texto completo del
|
|
116
|
-
objetivo no queda garantizado en el contexto enviado al modelo.
|
|
117
|
-
|
|
118
|
-
Además, se conservan códigos de salida de checks sin toda su asociación a comandos,
|
|
119
|
-
aserciones y revisión probada. Un historial de `exitCode=0` no permite reconstruir
|
|
120
|
-
por sí solo qué comportamiento fue validado. Los recibos durables son otra fuente;
|
|
121
|
-
no deben confundirse con esta memoria.
|
|
122
|
-
|
|
123
|
-
Corrección: mantener objetivo, restricciones y criterios activos separados del
|
|
124
|
-
historial comprimible; ofrecer recuperación controlada del pedido original y una
|
|
125
|
-
memoria de trabajo con hipótesis, decisiones, cambios y comprobaciones asociadas.
|
|
126
|
-
Probar requisitos ubicados al final, cambios de objetivo, varias compactaciones
|
|
127
|
-
y continuidad luego de aprobaciones. No aumentar simplemente el límite global.
|
|
128
|
-
|
|
129
|
-
### H04 — Se limita el número de resultados, pero no su costo agregado
|
|
130
|
-
|
|
131
|
-
`src/workspace.ts:855`, `:937`; `src/harness.ts:369`, `:688`.
|
|
132
|
-
|
|
133
|
-
Una búsqueda legal de 500 coincidencias devolvió **310.975 caracteres**. Las
|
|
134
|
-
lecturas ya tienen límites de contenido de 16.000/32.000 caracteres, pero búsquedas
|
|
135
|
-
repiten texto, path y digest en cada coincidencia sin un presupuesto equivalente.
|
|
136
|
-
El modelo puede recibir un payload grande de golpe. La estimación de compactación
|
|
137
|
-
usa caracteres de mensajes divididos por cuatro; no incluye las definiciones de
|
|
138
|
-
herramientas y no garantiza un límite exacto de tokens del proveedor.
|
|
139
|
-
|
|
140
|
-
Corrección: presupuesto agregado por respuesta y por turno, paginación con aviso
|
|
141
|
-
de cobertura, menos repetición de metadata y catálogo de herramientas por fase.
|
|
142
|
-
Medir tokens reales; no traducir mecánicamente los caracteres a tokens facturados.
|
|
143
|
-
|
|
144
|
-
### H05 — Cero coincidencias no implica búsqueda completa
|
|
145
|
-
|
|
146
|
-
`src/workspace.ts:891`, `:970`.
|
|
147
|
-
|
|
148
|
-
Las búsquedas de directorio descartan errores de lectura. Con un archivo de más de
|
|
149
|
-
1 MiB que contenía el marcador buscado, el resultado fue `matches=[]` y
|
|
150
|
-
`truncated=false`, sin contador de archivos omitidos. El límite de lectura es
|
|
151
|
-
razonable; la falsa impresión de cobertura completa no lo es.
|
|
152
|
-
|
|
153
|
-
Corrección: informar archivos inspeccionados/omitidos y motivos tipados, con
|
|
154
|
-
`incomplete` independiente de la truncación por cantidad de coincidencias. La
|
|
155
|
-
búsqueda por archivo exacto debe mantener sus errores explícitos.
|
|
156
|
-
|
|
157
|
-
### H06 — Instrucciones que no corresponden a las herramientas activas
|
|
158
|
-
|
|
159
|
-
`src/harness.ts:154`, `:369`; `scripts/swebench/zhivex-driver.ts:51`, `:75`.
|
|
160
|
-
|
|
161
|
-
El benchmark selecciona nueve herramientas, pero reutiliza instrucciones que
|
|
162
|
-
ordenan inspeccionar `mutation_audit` y mencionan `git_diff`, `load_skill`,
|
|
163
|
-
`apply_patch` y `run_check`. Varias no están disponibles. El prompt indica usar
|
|
164
|
-
rutas relativas y después introduce `/workspace`; las descripciones de herramientas
|
|
165
|
-
no explican uniformemente la diferencia entre ruta de herramienta y cwd del shell.
|
|
166
|
-
La matriz muestra errores ENOENT iniciales, pero no conserva sus argumentos:
|
|
167
|
-
no se puede atribuir esos errores concretos a esta ambigüedad.
|
|
168
|
-
|
|
169
|
-
En el harness normal, `search_files` sólo acepta directorios aunque la guía general
|
|
170
|
-
recomienda buscar en el archivo exacto. El fixture falla con `search_files` y
|
|
171
|
-
funciona con `search_many` sobre ese mismo archivo.
|
|
172
|
-
|
|
173
|
-
Corrección: generar instrucciones a partir del catálogo y backend efectivos,
|
|
174
|
-
unificar contratos de búsqueda y dar ejemplos breves de rutas válidas. Validar que
|
|
175
|
-
cada instrucción ejecutable tenga una herramienta disponible.
|
|
176
|
-
|
|
177
|
-
### H07 — El journal durable y mutation_audit cuentan historias distintas
|
|
178
|
-
|
|
179
|
-
`src/execution-environment.ts:1677`; `src/workspace.ts:442`, `:1006`;
|
|
180
|
-
`src/harness.ts:486`.
|
|
181
|
-
|
|
182
|
-
Cada adquisición crea otra instancia de `Workspace`, cuyo audit es un array en
|
|
183
|
-
memoria. Tras editar y readquirir la misma sesión OCI: entradas de audit **1 → 0**,
|
|
184
|
-
pero el parche conservaba una entrada. Esto ocurre dentro del flujo de un run;
|
|
185
|
-
no requiere reiniciar toda la aplicación.
|
|
186
|
-
|
|
187
|
-
No demuestra pérdida del journal de ejecución del SDK ni del parche. Demuestra
|
|
188
|
-
que la herramienta de audit no reconstruye la historia que el modelo y la
|
|
189
|
-
documentación esperan consultar al final.
|
|
190
|
-
|
|
191
|
-
Corrección: reconstruir por run desde eventos persistidos o mantener un registro
|
|
192
|
-
ligado a la sesión durable. Distinguir las ediciones directas de los cambios hechos
|
|
193
|
-
por comandos y probar continuidad a través de varias aprobaciones.
|
|
194
|
-
|
|
195
|
-
### H08 — El contador de duplicados no mide estancamiento
|
|
196
|
-
|
|
197
|
-
`src/repair-progress.ts:28`, `:34`; baseline Qwen actualizado.
|
|
198
|
-
|
|
199
|
-
El controlador borra su memoria ante toda herramienta fuera de la lista de lecturas.
|
|
200
|
-
Eso incluye `inspect_environment_patch`, que es de sólo lectura. Alternar cuatro
|
|
201
|
-
lecturas idénticas con esa inspección produjo cero duplicados y cero supresiones.
|
|
202
|
-
|
|
203
|
-
La fase de cierre bloquea listados y búsquedas en la raíz; permite distintas
|
|
204
|
-
lecturas, búsquedas en directorios y exploración vía shell. En la matriz se activó
|
|
205
|
-
en cuatro intentos, bloqueó una llamada y no evitó cuatro agotamientos de presupuesto.
|
|
206
|
-
No existe una reserva rígida del 30% ni una transición obligatoria hacia un parche.
|
|
207
|
-
|
|
208
|
-
Corrección: invalidar sólo por posibles efectos reales, detectar solapamiento y
|
|
209
|
-
progreso semántico, y asignar presupuestos a explorar/reproducir/editar/verificar.
|
|
210
|
-
No bloquear una lectura necesaria para corregir con seguridad ni ejecutar cambios
|
|
211
|
-
sólo porque se agotó el tiempo de exploración.
|
|
212
|
-
|
|
213
|
-
### H09 — Driver experimental y producto tienen políticas distintas
|
|
214
|
-
|
|
215
|
-
`src/harness.ts:966`, `:1345`; `scripts/swebench/zhivex-driver.ts:38`, `:93`.
|
|
216
|
-
|
|
217
|
-
La recuperación de schemas, el middleware de presupuesto de transporte y el
|
|
218
|
-
control de progreso se habilitan en el driver. El runtime ordinario mantiene
|
|
219
|
-
`stopOnError=true`, recuperación terminal deshabilitada por defecto y no instala
|
|
220
|
-
el controlador de progreso automáticamente. Compactación v3 y herramientas nuevas
|
|
221
|
-
sí están compartidas.
|
|
222
|
-
|
|
223
|
-
Es una elección conservadora explícita, no un bug del SDK. Pero impide presentar
|
|
224
|
-
el comportamiento de la corrida como el comportamiento general de la CLI.
|
|
225
|
-
|
|
226
|
-
Corrección: perfiles de política explícitos, versionados y comprobables, con
|
|
227
|
-
recuperación acotada por clase de error. Mantener denegaciones, límites, cancelación
|
|
228
|
-
y errores de integridad como fronteras estrictas. Validar el mismo perfil desde
|
|
229
|
-
la CLI, biblioteca y evaluación antes de habilitarlo por defecto.
|
|
230
|
-
|
|
231
|
-
### H10 — La métrica final oculta dónde se perdió la reparación
|
|
232
|
-
|
|
233
|
-
`scripts/swebench/run.py:214`; `mini_driver.py:101`;
|
|
234
|
-
`zhivex-driver.ts:109`.
|
|
235
|
-
|
|
236
|
-
Mini exporta el diff existente de su contenedor incluso tras terminar por límites.
|
|
237
|
-
Zhivex entrega el diff del host, que sólo recibe cambios mediante importación
|
|
238
|
-
verificada. Después borra el directorio de estado, incluido el snapshot candidato.
|
|
239
|
-
|
|
240
|
-
El score 0/5 frente a 2/5 sigue describiendo los resultados de esas dos políticas
|
|
241
|
-
completas. No aísla calidad de razonamiento, calidad del parche candidato, costo
|
|
242
|
-
adicional de gobierno ni el efecto del SDK. **Un diff exportado vacío no permite
|
|
243
|
-
concluir que el agente nunca editó dentro de OCI.** Las llamadas de shell pueden
|
|
244
|
-
editar; la telemetría proyectada no permite reconstruir siempre su intención.
|
|
245
|
-
|
|
246
|
-
Corrección: conservar separadamente candidato, verificado e importado; registrar
|
|
247
|
-
etapas alcanzadas; evaluar el candidato en un entorno independiente después de
|
|
248
|
-
terminar, sin importarlo ni mostrarle tests ocultos al agente. Mantener el score
|
|
249
|
-
oficial de reparación segura y añadir un diagnóstico comparable de capacidad.
|
|
250
|
-
Usar holdout nuevo y varias repeticiones una vez congelada cada variante.
|
|
251
|
-
|
|
252
|
-
### H11 — Telemetría insuficiente para atribución y rendimiento
|
|
253
|
-
|
|
254
|
-
`scripts/swebench/telemetry.ts`; `zhivex-driver.ts:111`, `:126`;
|
|
255
|
-
`scripts/time-to-safe-fix-efficiency.ts`.
|
|
256
|
-
|
|
257
|
-
SymPy terminó con un fingerprint sin causa identificada y uso incompleto. Algunas
|
|
258
|
-
filas tienen `status=failed` y `failure=null`; la causa está en guardrails. El
|
|
259
|
-
instrumentador recoge tiempos por herramienta, pero el driver devuelve sólo la
|
|
260
|
-
suma de llamadas. Se observan respuestas, no todas las transiciones de etapa, y
|
|
261
|
-
los códigos de salida del verificador no explican la aserción que falló.
|
|
262
|
-
|
|
263
|
-
Corrección: taxonomía estructurada para transporte/parsing/schema/herramienta/
|
|
264
|
-
verificación/presupuesto/cancelación; conservar finish reason, herramientas
|
|
265
|
-
solicitadas con nombres permitidos, etapa y uso faltante. Añadir latencia de modelo,
|
|
266
|
-
TTFT cuando exista, herramientas, aprobaciones, OCI y grading. Mantener artefactos
|
|
267
|
-
de diagnóstico privados y acotados; no imprimir prompts, secretos o logs crudos.
|
|
268
|
-
|
|
269
|
-
## Superficies revisadas sin nuevo fallo confirmado
|
|
270
|
-
|
|
271
|
-
| Superficie | Qué se contrastó | Límite de la conclusión |
|
|
272
|
-
| --- | --- | --- |
|
|
273
|
-
| Persistencia y sesiones | revisiones, scope, leases del SDK, migraciones, backup y estados activos | No se ensayó caída real del proceso durante cada escritura ni multi-host |
|
|
274
|
-
| Presupuestos | guardrails, medición de transporte, continuación por aprobación | El probe `maxSteps=1` hizo una petición y terminó por límite; no se confirmó un reset de steps |
|
|
275
|
-
| Orquestación | selección de roles, presupuestos hijos, promoción de aprobación e herencia de entorno del SDK | Grupos de review y perfiles necesitan evaluaciones de calidad, además de mocks |
|
|
276
|
-
| MCP | límites de payload, permisos, aprobación, tratamiento no confiable | No se ensayaron todos los servidores/transportes externos; filtros de texto no son garantía universal contra inyección |
|
|
277
|
-
| OCI | políticas, transacciones por comando, rechazo de drift, importación | El nuevo probe usa un proceso simulado; no constituye certificación del daemon |
|
|
278
|
-
| Proveedores | configuración instalada, capability gate y recuperación comprobada | Sin llamadas live nuevas ni comparación de modelos con reasoning equivalente |
|
|
279
|
-
| Build/release | contratos, CI declarada, versiones y gate de seguridad | Sin consulta de registry ni certificación del paquete publicado |
|
|
280
|
-
|
|
281
|
-
Otros puntos para el backlog: `tester` ejecuta scripts de `package.json` y no es
|
|
282
|
-
un verificador genérico de repositorios Python; un `read_files` con un archivo
|
|
283
|
-
inválido pierde todos los resultados del batch; la compactación no guarda una
|
|
284
|
-
hipótesis estructurada; el contexto de proyecto puede consumir una parte grande
|
|
285
|
-
del prompt fijo. Son superficies de producto que requieren pruebas de uso y
|
|
286
|
-
medición antes de rediseñar la API.
|
|
287
|
-
|
|
288
|
-
## Orden recomendado de trabajo
|
|
289
|
-
|
|
290
|
-
1. **Cerrar H01/H02** con regresiones adversariales y validación en las plataformas soportadas.
|
|
291
|
-
2. **Corregir H03/H04/H05/H06**: objetivo recuperable, salidas acotadas, cobertura explícita e instrucciones coherentes.
|
|
292
|
-
3. **Resolver H07/H08/H09**: continuidad de audit y perfiles de ejecución compartidos con presupuesto por fase.
|
|
293
|
-
4. **Instrumentar H10/H11** antes de otra campaña de gasto live.
|
|
294
|
-
5. Ablaciones: contrato/instrucciones; memoria de tarea; control de exploración;
|
|
295
|
-
herramientas por fase. Cambiar una familia a la vez, manteniendo modelo,
|
|
296
|
-
reasoning, imágenes y límites. Luego confirmar en un holdout nuevo.
|
|
297
|
-
|
|
298
|
-
Medir resolución candidata/verificada/importada, tokens completos por reparación,
|
|
299
|
-
tiempo hasta primer cambio y primera verificación, errores recuperados, cobertura
|
|
300
|
-
de búsqueda y uso incompleto. Comparar presupuesto bajo, medio y alto para saber
|
|
301
|
-
si la curva mejora; un solo punto de 100k no responde esa pregunta.
|
|
302
|
-
|
|
303
|
-
No hay base para prometer que Muse cierre estas brechas. Una memoria adicional
|
|
304
|
-
puede ayudar a la continuidad, pero no corrige cancelación, resolución de rutas,
|
|
305
|
-
contratos incompatibles ni una evaluación que pierde etapas. Los hallazgos
|
|
306
|
-
confirmados de esta revisión pertenecen al harness; no se creó una HU nueva del SDK.
|