Saltar al contenido
AKOS
Benchmarks y evals

32/32 · última auditoría conocida

Dos suites distintas: benchmarks/ mide el motor de reglas determinista y evals/ mide lo que AKOS realmente produce, la review.

Motor de reglas · 32 casos

Cada caso fija un comportamiento: detectar lo que hay que detectar (positive) y no marcar lo que no procede (near-miss). Los casos mixtos verifican ambas cosas a la vez sobre el mismo fixture.

Nivel A — fixture sintético

Caso mínimo construido para aislar un único detector.

Nivel B — código real reducido

Fragmento extraído de un repositorio real, recortado al patrón.

Nivel C — review simulada

Salida de review mockeada contra un provider de prueba.

32 casos
near-miss · nivel B
passed

a11y-input-aria-label-not-flagged

Dominio: accessibility
Reglas:A11Y_INPUT_NO_LABEL
near-miss · nivel B
passed

a11y-input-labeled-not-flagged

Dominio: accessibility
Reglas:A11Y_INPUT_NO_LABEL
positive · nivel B
passed

a11y-input-unlabeled-flagged

Dominio: accessibility
Reglas:A11Y_INPUT_NO_LABEL
near-miss · nivel B
passed

a11y-select-labeled-not-flagged

Dominio: accessibility
Reglas:A11Y_SELECT_NO_LABEL
positive · nivel B
passed

a11y-select-unlabeled-flagged

Dominio: accessibility
Reglas:A11Y_SELECT_NO_LABEL
positive · nivel A
passed

destructive-guard-does-not-bleed

Dominio: devops
Reglas:DESTRUCTIVE_MIGRATION_NO_GUARD
near-miss · nivel A
passed

destructive-guarded-not-flagged

Dominio: devops
Reglas:DESTRUCTIVE_MIGRATION_NO_GUARD
positive · nivel A
passed

destructive-unguarded-flagged

Dominio: devops
Reglas:DESTRUCTIVE_MIGRATION_NO_GUARD
mixed · nivel C
passed

level-c-mock-security-review

Dominio: security
Reglas:review simulada (sin detector)
mixed · nivel C
passed

level-c-mock-ux-review

Dominio: ux
Reglas:review simulada (sin detector)
mixed · nivel A
passed

migration-missing-down-file

Dominio: devops
Reglas:MIGRATION_NO_DOWN_FILE
near-miss · nivel A
passed

migration-no-convention-adopted

Dominio: devops
Reglas:MIGRATION_NO_DOWN_FILE
mixed · nivel B
passed

real-a11y-jsx-component

Dominio: accessibility
Reglas:A11Y_INPUT_NO_LABEL
near-miss · nivel A
passed

real-destructive-in-comment

Dominio: devops
Reglas:DESTRUCTIVE_MIGRATION_NO_GUARD
near-miss · nivel A
passed

real-policy-dropped-later

Dominio: security
Reglas:SUPABASE_POLICY_TOO_PERMISSIVE
near-miss · nivel A
passed

real-rls-dynamic-loop

Dominio: security
Reglas:SUPABASE_RLS_DISABLED
positive · nivel A
passed

real-rls-dynamic-loop-gap

Dominio: security
Reglas:SUPABASE_RLS_DISABLED
near-miss · nivel A
passed

real-secret-in-gitignored-env

Dominio: security
Reglas:SECRET_IN_SOURCE
near-miss · nivel A
passed

real-service-role-in-comment

Dominio: security
Reglas:SERVICE_ROLE_IN_CLIENT
near-miss · nivel A
passed

secret-anon-jwt-not-flagged

Dominio: security
Reglas:SECRET_IN_SOURCE
near-miss · nivel A
passed

secret-env-example-excluded

Dominio: security
Reglas:SECRET_IN_SOURCE
positive · nivel A
passed

secret-github-fine-grained-pat

Dominio: security
Reglas:SECRET_IN_SOURCE
positive · nivel A
passed

secret-openssh-private-key

Dominio: security
Reglas:SECRET_IN_SOURCE
near-miss · nivel A
passed

secret-placeholder-not-flagged

Dominio: security
Reglas:SECRET_IN_SOURCE
positive · nivel A
passed

secret-service-role-jwt

Dominio: security
Reglas:SECRET_IN_SOURCE
positive · nivel A
passed

secret-vendor-key

Dominio: security
Reglas:SECRET_IN_SOURCE
positive · nivel A
passed

service-role-client-jwt

Dominio: security
Reglas:SERVICE_ROLE_IN_CLIENT
near-miss · nivel A
passed

service-role-server-path-excluded

Dominio: security
Reglas:SERVICE_ROLE_IN_CLIENT
positive · nivel A
passed

supabase-policy-permissive-flagged

Dominio: security
Reglas:SUPABASE_POLICY_TOO_PERMISSIVE
positive · nivel A
passed

supabase-policy-permissive-suppressed

Dominio: security
Reglas:SUPABASE_POLICY_TOO_PERMISSIVE
positive · nivel A
passed

supabase-rls-basic

Dominio: security
Reglas:SUPABASE_RLS_DISABLED
near-miss · nivel A
passed

supabase-rls-multi-migration

Dominio: security
Reglas:SUPABASE_RLS_DISABLED

Evals de review · 14 casos

Cada caso es un fixture pequeño con código real, más un expected.yaml que nombra los must_find (hallazgos que una review competente debe encontrar) y los must_not_find (las trampas: falsos positivos que ocurrieron de verdad).

Recall exigido
100 % — cada must_find, sin crédito parcial
Falsos positivos
0 — cualquier trampa detectada suspende el caso
Exit codes
0 todos los casos por encima del umbral · 1 error de uso · 2 al menos un caso por debajo
terminal
akos eval --report path/to/review.md --case optional-auth
CasoLentePerfilmust_findTrampas
a11y-wrapper-label
RAK, verified by hand 2026-07-20 — 110 of 122 tool findings were wrapped.
accessibilityProduction11
boundary-not-in-ui
RAK, verified by hand 2026-07-20 — permissions.ts:18 states the boundary.
architectureProduction11
copy-honors-style-direction
RAK's committed style direction — all Catalan including error messages and toasts.
copyProduction11
db-missing-index
RAK shipped 0064_budgets_org_index.sql late, which is the shape this.
databaseProduction11
dropped-policy
brotapp-main, verified by hand 2026-07-20
securityStartup MVP11
frontend-primitive-spread
RAK's fields.tsx (the correct half) paired with a constructed derived-state.
frontendProduction11
masked-ci-step
AKOS's own ci.yml, 2026-07-20 — shipped red for three runs across two.
releaseProduction11
mobile-ios-zoom
RAK's fields.tsx carries the inverse — a comment explaining why text-base is deliberate on mobile.
mobileProduction20
optional-auth
CONTRASTA apps/api, verified by hand 2026-07-20
securityStartup MVP20
perf-budget-not-enforced
RAK ships a check-build-budget script; this reproduces the shape where it reports without.
performanceProduction11
private-schema-secrets
brotapp-main, verified by hand 2026-07-20
securityStartup MVP11
product-output-not-outcome
two briefs side by side; the difference is measurable, not a matter of taste.
productProduction11
typecheck-noop
RAK, verified by hand 2026-07-20 — `tsc --noEmit` exits 0 on a repo with a real type.
testingProduction11
ux-async-states
constitution Article 8 — four async states on every user-facing.
uxProduction11

Lo que deliberadamente no hace

  • · No ejecuta la review: puntúa un informe ya producido (por un agente, a mano o repetido desde .akos/reviews/).
  • · `--case` es obligatorio: un informe solo puede puntuarse contra el fixture que realmente revisó.
  • · No distingue reportar un hallazgo de explicar por qué algo no lo es; separar ambos exige un juez calibrado.
  • · No puntúa redacción, estructura, tono ni exactitud del score: el matching es conceptual.
  • · Los hallazgos extra ni suman ni restan; solo cuentan las trampas listadas.
  • · No está en CI: CI no tiene informes que puntuar; sí lo está tests/unit/test_evals.py.