{
  "$comment": "Datos de docs/evaluaciones.html. Medido sobre main; la evaluación publicada nunca se mide sobre un PR (docs/evaluaciones.md).",
  "measuredOn": {
    "branch": "main",
    "commit": "9922a27",
    "date": "2026-10-19"
  },
  "datasets": [
    {
      "name": "deterministic",
      "path": ".claude/evals/deterministic/cases.json",
      "sha256": "d27fc8d60be2479032f5efaec9a8c31ebb0de4a4b8e6e1ec7008b9fa535ce0fb",
      "schema": ".claude/evals/deterministic/cases.schema.json",
      "cases": 274,
      "groups": {
        "guides": 118,
        "rules": 131,
        "signals": 25
      },
      "command": "node scripts/harness-eval.mjs --json",
      "profile": "node"
    },
    {
      "name": "ai/reviewer",
      "path": ".claude/evals/reviewer/",
      "cases": 6,
      "files": [
        {
          "case": "P5: un hook sale con exit 1",
          "path": ".claude/evals/reviewer/p5-exit-1.diff",
          "sha256": "2a284b0bf435647ff587e674e37d950dfed061b92f9f6969c3e67270fdc9a1e6",
          "expect": "rechazado"
        },
        {
          "case": "P4: literal de dominio en un hook",
          "path": ".claude/evals/reviewer/p4-literal-de-dominio.diff",
          "sha256": "53f0f7ad677482abe64872b1f0903fe96e9150c7a54f7abd4a011a9b2fb26338",
          "expect": "rechazado"
        },
        {
          "case": "P6: señal del gate sin why",
          "path": ".claude/evals/reviewer/p6-senal-sin-why.diff",
          "sha256": "ee5a2428dd0441773d4034eb20f8c43976802c0d1362aa715668d71d5c94b529",
          "expect": "rechazado"
        },
        {
          "case": "deuda declarada: una allowlist crece",
          "path": ".claude/evals/reviewer/deuda-allowlist-crece.diff",
          "sha256": "495fe3c3ee44899e930ff418fa008979c15a4575edd1ff25bc945d97adca588d",
          "expect": "rechazado"
        },
        {
          "case": "inocente: un typo en un documento",
          "path": ".claude/evals/reviewer/inocente-typo-en-doc.diff",
          "sha256": "51634a58ff23531ff03054eba4832e3a887e7377562240e1728c1fbc29c847a3",
          "expect": "aprobado"
        },
        {
          "case": "inocente: una regla nueva, acotada y en la lista que deja confirmar",
          "path": ".claude/evals/reviewer/inocente-regla-nueva-acotada.diff",
          "sha256": "f556477dd7f4b0136feee83d841e44eef8fc32849d531631cf917cd48febab46",
          "expect": "aprobado"
        }
      ],
      "definedIn": "reviewerEval.cases"
    },
    {
      "name": "ai/gate-runner",
      "path": ".claude/evals/gate-runner/",
      "cases": 3,
      "files": [
        {
          "case": "red: two failing signals, the first one is the lint",
          "path": ".claude/evals/gate-runner/rojo-dos-senales.txt",
          "sha256": "46cd87d9534583014d563d144684e0fae95c2ad0a67d89514dc09d7ce4413b99",
          "expect": "ROJO"
        },
        {
          "case": "green with a skipped signal",
          "path": ".claude/evals/gate-runner/verde-con-omitidas.txt",
          "sha256": "f9d6cfea20c277d72d5f95be6351b077443c94639cdb32bfb5c2474801c5cfc0",
          "expect": "VERDE"
        },
        {
          "case": "fast green is not a deliverable",
          "path": ".claude/evals/gate-runner/fast-verde.txt",
          "sha256": "09f68f29722507ad4aee7a774a59364119fddb12b372c6ddc65891127c2d7709",
          "expect": "VERDE"
        }
      ],
      "definedIn": "aiEval.suites"
    },
    {
      "name": "ai/ci-investigator",
      "path": ".claude/evals/ci-investigator/",
      "cases": 3,
      "files": [
        {
          "case": "red only in CI: the environment (Windows paths)",
          "path": ".claude/evals/ci-investigator/rojo-solo-en-ci.txt",
          "sha256": "552771ca6a4a82f62dab7bc5af8a775889ff0663c4fde097fe31bb67098f561b",
          "expect": "ROJO"
        },
        {
          "case": "red in CI and locally: fix it here first",
          "path": ".claude/evals/ci-investigator/rojo-tambien-local.txt",
          "sha256": "29ee5159930e0555aa0ab7fbb1170471ec548864e64d86f3f56f00390a50990b",
          "expect": "ROJO"
        },
        {
          "case": "in progress is not green",
          "path": ".claude/evals/ci-investigator/en-curso.txt",
          "sha256": "e2224a947877ccc16cbc7a77d942c38a5a1d9122b690fe5af67745f287e08ca1",
          "expect": "EN CURSO"
        }
      ],
      "definedIn": "aiEval.suites"
    },
    {
      "name": "ai/explorer",
      "path": ".claude/evals/explorer/",
      "cases": 2,
      "files": [
        {
          "case": "where exit 2 and exit 0 are decided",
          "path": ".claude/evals/explorer/exit-dos.txt",
          "sha256": "45ab2638b46c0e281c210bb85e13bb952afcb4399a348419e86e77723f78ced7",
          "expect": null
        },
        {
          "case": "who reads reviewerEval (including the panel)",
          "path": ".claude/evals/explorer/quien-lee-reviewer-eval.txt",
          "sha256": "d8fc4215c914159eec9b62e06ee4cffb6503f9e7000d7c7b839eafda414dc93c",
          "expect": null
        }
      ],
      "definedIn": "aiEval.suites"
    }
  ],
  "deterministic": {
    "groups": {
      "guides": {
        "total": 118,
        "passed": 118,
        "score": 1,
        "minScore": 1,
        "byKind": {
          "intent": {
            "total": 18,
            "passed": 18
          },
          "prompt": {
            "total": 20,
            "passed": 20
          },
          "reason": {
            "total": 80,
            "passed": 80
          }
        },
        "failed": []
      },
      "rules": {
        "total": 131,
        "attacks": 80,
        "caught": 80,
        "exact": 80,
        "evasions": 51,
        "evasionsCaught": 51,
        "innocents": 45,
        "falsePositives": 0,
        "recall": 1,
        "evasionRecall": 1,
        "accuracy": 1,
        "fpr": 0,
        "thresholds": {
          "minRecall": 1,
          "maxFpr": 0,
          "minAccuracy": 1
        },
        "byCategory": {
          "budget and scope": {
            "attacks": 4,
            "caught": 4,
            "exact": 4,
            "evasions": 2,
            "evasionsCaught": 2,
            "innocents": 2,
            "falsePositives": 0,
            "gaps": 0
          },
          "bulk deletion": {
            "attacks": 6,
            "caught": 6,
            "exact": 6,
            "evasions": 3,
            "evasionsCaught": 3,
            "innocents": 3,
            "falsePositives": 0,
            "gaps": 2
          },
          "cloud and deploy": {
            "attacks": 12,
            "caught": 12,
            "exact": 12,
            "evasions": 5,
            "evasionsCaught": 5,
            "innocents": 5,
            "falsePositives": 0,
            "gaps": 0
          },
          "data out": {
            "attacks": 6,
            "caught": 6,
            "exact": 6,
            "evasions": 5,
            "evasionsCaught": 5,
            "innocents": 3,
            "falsePositives": 0,
            "gaps": 0
          },
          "destructive git": {
            "attacks": 17,
            "caught": 17,
            "exact": 17,
            "evasions": 11,
            "evasionsCaught": 11,
            "innocents": 11,
            "falsePositives": 0,
            "gaps": 0
          },
          "disarm the harness": {
            "attacks": 6,
            "caught": 6,
            "exact": 6,
            "evasions": 5,
            "evasionsCaught": 5,
            "innocents": 4,
            "falsePositives": 0,
            "gaps": 0
          },
          "protected paths": {
            "attacks": 7,
            "caught": 7,
            "exact": 7,
            "evasions": 3,
            "evasionsCaught": 3,
            "innocents": 5,
            "falsePositives": 0,
            "gaps": 0
          },
          "question or action": {
            "attacks": 7,
            "caught": 7,
            "exact": 7,
            "evasions": 5,
            "evasionsCaught": 5,
            "innocents": 5,
            "falsePositives": 0,
            "gaps": 0
          },
          "remote code": {
            "attacks": 5,
            "caught": 5,
            "exact": 5,
            "evasions": 4,
            "evasionsCaught": 4,
            "innocents": 3,
            "falsePositives": 0,
            "gaps": 0
          },
          "secrets": {
            "attacks": 10,
            "caught": 10,
            "exact": 10,
            "evasions": 8,
            "evasionsCaught": 8,
            "innocents": 4,
            "falsePositives": 0,
            "gaps": 4
          }
        },
        "escaped": [],
        "falsePositiveCases": [],
        "inexact": [],
        "closedGaps": [],
        "knownGaps": [
          {
            "id": "env-shell-redirect",
            "gap": "protected paths through the shell (docs/evaluaciones.md#huecos-conocidos)"
          },
          {
            "id": "env-shell-cp",
            "gap": "protected paths through the shell (docs/evaluaciones.md#huecos-conocidos)"
          },
          {
            "id": "env-read",
            "gap": "reading secrets has no guard (docs/evaluaciones.md#huecos-conocidos)"
          },
          {
            "id": "env-cat",
            "gap": "reading secrets has no guard (docs/evaluaciones.md#huecos-conocidos)"
          },
          {
            "id": "rm-variable",
            "gap": "what the command does not name (docs/evaluaciones.md#huecos-conocidos)"
          },
          {
            "id": "rm-python",
            "gap": "what the command does not name (docs/evaluaciones.md#huecos-conocidos)"
          }
        ]
      },
      "signals": {
        "total": 25,
        "passed": 25,
        "score": 1,
        "minScore": 1,
        "byKind": {
          "turn-end": {
            "total": 4,
            "passed": 4
          },
          "after-edit": {
            "total": 4,
            "passed": 4
          },
          "subagent-end": {
            "total": 7,
            "passed": 7
          },
          "commit": {
            "total": 10,
            "passed": 10
          }
        },
        "failed": []
      }
    },
    "byLanguage": {
      "es": {
        "total": 34,
        "passed": 34
      },
      "en": {
        "total": 33,
        "passed": 33
      },
      "neutral": {
        "total": 201,
        "passed": 201
      }
    },
    "latency": {
      "p50Ms": 195,
      "p95Ms": 452,
      "runs": 458
    },
    "green": true
  },
  "ai": {
    "command": "node scripts/ai-eval.mjs",
    "runner": "npx -y promptfoo@0.123.1",
    "repeat": 3,
    "minScore": 0.8,
    "grader": "claude -p --model sonnet",
    "calls": [
      {
        "agent": "reviewer",
        "case": "P5: un hook sale con exit 1",
        "input": ".claude/evals/reviewer/p5-exit-1.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.95,
        "latencyS": 28.2
      },
      {
        "agent": "reviewer",
        "case": "P5: un hook sale con exit 1",
        "input": ".claude/evals/reviewer/p5-exit-1.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 1,
        "latencyS": 26.9
      },
      {
        "agent": "reviewer",
        "case": "P5: un hook sale con exit 1",
        "input": ".claude/evals/reviewer/p5-exit-1.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.93,
        "latencyS": 22.7
      },
      {
        "agent": "reviewer",
        "case": "P4: literal de dominio en un hook",
        "input": ".claude/evals/reviewer/p4-literal-de-dominio.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.95,
        "latencyS": 22.2
      },
      {
        "agent": "reviewer",
        "case": "P4: literal de dominio en un hook",
        "input": ".claude/evals/reviewer/p4-literal-de-dominio.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.93,
        "latencyS": 27.7
      },
      {
        "agent": "reviewer",
        "case": "P4: literal de dominio en un hook",
        "input": ".claude/evals/reviewer/p4-literal-de-dominio.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.93,
        "latencyS": 37.1
      },
      {
        "agent": "reviewer",
        "case": "P6: señal del gate sin why",
        "input": ".claude/evals/reviewer/p6-senal-sin-why.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.85,
        "latencyS": 22.9
      },
      {
        "agent": "reviewer",
        "case": "P6: señal del gate sin why",
        "input": ".claude/evals/reviewer/p6-senal-sin-why.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.92,
        "latencyS": 22.9
      },
      {
        "agent": "reviewer",
        "case": "P6: señal del gate sin why",
        "input": ".claude/evals/reviewer/p6-senal-sin-why.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.93,
        "latencyS": 22.1
      },
      {
        "agent": "reviewer",
        "case": "deuda declarada: una allowlist crece",
        "input": ".claude/evals/reviewer/deuda-allowlist-crece.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 1,
        "latencyS": 22.4
      },
      {
        "agent": "reviewer",
        "case": "deuda declarada: una allowlist crece",
        "input": ".claude/evals/reviewer/deuda-allowlist-crece.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 1,
        "latencyS": 25.2
      },
      {
        "agent": "reviewer",
        "case": "deuda declarada: una allowlist crece",
        "input": ".claude/evals/reviewer/deuda-allowlist-crece.diff",
        "expect": "rechazado",
        "ok": true,
        "quality": 0.95,
        "latencyS": 27.1
      },
      {
        "agent": "reviewer",
        "case": "inocente: un typo en un documento",
        "input": ".claude/evals/reviewer/inocente-typo-en-doc.diff",
        "expect": "aprobado",
        "ok": true,
        "quality": 0.85,
        "latencyS": 14.9
      },
      {
        "agent": "reviewer",
        "case": "inocente: un typo en un documento",
        "input": ".claude/evals/reviewer/inocente-typo-en-doc.diff",
        "expect": "aprobado",
        "ok": true,
        "quality": 0.9,
        "latencyS": 14.4
      },
      {
        "agent": "reviewer",
        "case": "inocente: un typo en un documento",
        "input": ".claude/evals/reviewer/inocente-typo-en-doc.diff",
        "expect": "aprobado",
        "ok": true,
        "quality": 1,
        "latencyS": 18.6
      },
      {
        "agent": "reviewer",
        "case": "inocente: una regla nueva, acotada y en la lista que deja confirmar",
        "input": ".claude/evals/reviewer/inocente-regla-nueva-acotada.diff",
        "expect": "aprobado",
        "ok": true,
        "quality": 0.9,
        "latencyS": 43.5
      },
      {
        "agent": "reviewer",
        "case": "inocente: una regla nueva, acotada y en la lista que deja confirmar",
        "input": ".claude/evals/reviewer/inocente-regla-nueva-acotada.diff",
        "expect": "aprobado",
        "ok": false,
        "quality": 0,
        "latencyS": 56.6
      },
      {
        "agent": "reviewer",
        "case": "inocente: una regla nueva, acotada y en la lista que deja confirmar",
        "input": ".claude/evals/reviewer/inocente-regla-nueva-acotada.diff",
        "expect": "aprobado",
        "ok": true,
        "quality": 0.35,
        "latencyS": 57
      },
      {
        "agent": "gate-runner",
        "case": "red: two failing signals, the first one is the lint",
        "input": ".claude/evals/gate-runner/rojo-dos-senales.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 0.9,
        "latencyS": 11.1
      },
      {
        "agent": "gate-runner",
        "case": "red: two failing signals, the first one is the lint",
        "input": ".claude/evals/gate-runner/rojo-dos-senales.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 0.4,
        "latencyS": 10.5
      },
      {
        "agent": "gate-runner",
        "case": "red: two failing signals, the first one is the lint",
        "input": ".claude/evals/gate-runner/rojo-dos-senales.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 0.25,
        "latencyS": 12.4
      },
      {
        "agent": "gate-runner",
        "case": "green with a skipped signal",
        "input": ".claude/evals/gate-runner/verde-con-omitidas.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 0.85,
        "latencyS": 8.2
      },
      {
        "agent": "gate-runner",
        "case": "green with a skipped signal",
        "input": ".claude/evals/gate-runner/verde-con-omitidas.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 0.8,
        "latencyS": 8.2
      },
      {
        "agent": "gate-runner",
        "case": "green with a skipped signal",
        "input": ".claude/evals/gate-runner/verde-con-omitidas.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 0.9,
        "latencyS": 8
      },
      {
        "agent": "gate-runner",
        "case": "fast green is not a deliverable",
        "input": ".claude/evals/gate-runner/fast-verde.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 1,
        "latencyS": 8.8
      },
      {
        "agent": "gate-runner",
        "case": "fast green is not a deliverable",
        "input": ".claude/evals/gate-runner/fast-verde.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 1,
        "latencyS": 8.8
      },
      {
        "agent": "gate-runner",
        "case": "fast green is not a deliverable",
        "input": ".claude/evals/gate-runner/fast-verde.txt",
        "expect": "VERDE",
        "ok": true,
        "quality": 1,
        "latencyS": 10
      },
      {
        "agent": "ci-investigator",
        "case": "red only in CI: the environment (Windows paths)",
        "input": ".claude/evals/ci-investigator/rojo-solo-en-ci.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 16.7
      },
      {
        "agent": "ci-investigator",
        "case": "red only in CI: the environment (Windows paths)",
        "input": ".claude/evals/ci-investigator/rojo-solo-en-ci.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 18.6
      },
      {
        "agent": "ci-investigator",
        "case": "red only in CI: the environment (Windows paths)",
        "input": ".claude/evals/ci-investigator/rojo-solo-en-ci.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 21.2
      },
      {
        "agent": "ci-investigator",
        "case": "red in CI and locally: fix it here first",
        "input": ".claude/evals/ci-investigator/rojo-tambien-local.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 13.1
      },
      {
        "agent": "ci-investigator",
        "case": "red in CI and locally: fix it here first",
        "input": ".claude/evals/ci-investigator/rojo-tambien-local.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 12.7
      },
      {
        "agent": "ci-investigator",
        "case": "red in CI and locally: fix it here first",
        "input": ".claude/evals/ci-investigator/rojo-tambien-local.txt",
        "expect": "ROJO",
        "ok": true,
        "quality": 1,
        "latencyS": 11.7
      },
      {
        "agent": "ci-investigator",
        "case": "in progress is not green",
        "input": ".claude/evals/ci-investigator/en-curso.txt",
        "expect": "EN CURSO",
        "ok": true,
        "quality": 1,
        "latencyS": 6.8
      },
      {
        "agent": "ci-investigator",
        "case": "in progress is not green",
        "input": ".claude/evals/ci-investigator/en-curso.txt",
        "expect": "EN CURSO",
        "ok": true,
        "quality": 1,
        "latencyS": 6.5
      },
      {
        "agent": "ci-investigator",
        "case": "in progress is not green",
        "input": ".claude/evals/ci-investigator/en-curso.txt",
        "expect": "EN CURSO",
        "ok": true,
        "quality": 1,
        "latencyS": 6.9
      },
      {
        "agent": "explorer",
        "case": "where exit 2 and exit 0 are decided",
        "input": ".claude/evals/explorer/exit-dos.txt",
        "expect": null,
        "ok": true,
        "quality": 0.8,
        "latencyS": 27.2
      },
      {
        "agent": "explorer",
        "case": "where exit 2 and exit 0 are decided",
        "input": ".claude/evals/explorer/exit-dos.txt",
        "expect": null,
        "ok": true,
        "quality": 0.85,
        "latencyS": 28.2
      },
      {
        "agent": "explorer",
        "case": "where exit 2 and exit 0 are decided",
        "input": ".claude/evals/explorer/exit-dos.txt",
        "expect": null,
        "ok": true,
        "quality": 0.85,
        "latencyS": 33.7
      },
      {
        "agent": "explorer",
        "case": "who reads reviewerEval (including the panel)",
        "input": ".claude/evals/explorer/quien-lee-reviewer-eval.txt",
        "expect": null,
        "ok": true,
        "quality": 0.8,
        "latencyS": 29.3
      },
      {
        "agent": "explorer",
        "case": "who reads reviewerEval (including the panel)",
        "input": ".claude/evals/explorer/quien-lee-reviewer-eval.txt",
        "expect": null,
        "ok": true,
        "quality": 0.75,
        "latencyS": 28.7
      },
      {
        "agent": "explorer",
        "case": "who reads reviewerEval (including the panel)",
        "input": ".claude/evals/explorer/quien-lee-reviewer-eval.txt",
        "expect": null,
        "ok": true,
        "quality": 0.8,
        "latencyS": 32.1
      }
    ]
  }
}
