Referencia

Referencia de la línea de comandos

Cada comando, opción, código de salida, variable de entorno, clave de política y señal de riesgo de la versión actual de Probe (última versión: v0.5.1). Con las entradas marcadas v0.4, un binario anterior a v0.4.0 termina con el código 3; consulta el orden de publicación antes de fijar una versión en CI. Pulsa / para buscar.

Esta página trata de Probe para código, la herramienta de línea de comandos. ¿Vigilas archivos de Word, Excel o PowerPoint? Consulta Probe Desktop.

Sinopsis

probe init [--repo PATH] [--language go|typescript|javascript|python|rust]
probe lint [--base main] [--head HEAD] [--ci] [flags]
probe review [--base main] [--reviewer=false] [--ci] [flags]
probe review [flags] BASE..HEAD
probe plan --intent-file FILE [--base main] [--ci]
probe review --plan .probe/PLAN.json [flags]
probe report [--input .probe/confidence-report.json] [--out DIR] [--format LIST] [--report-url URL]
probe version
  • lint analiza un cambio de forma estática. Nunca ejecuta código del repositorio ni llama a un proveedor de IA.
  • review añade comprobaciones en un sandbox de Docker, las etapas de evidencia opcionales (tests base modificados, tests afectados, fuzzing diferencial, mutación, preparación de dependencias) y, cuando hay un modelo configurado, una investigación con IA.
  • plan pide al proveedor configurado un plan de implementación antes de escribir código, lo evalúa con reglas fijas y lo convierte en un contrato con el que lint --plan y review --plan contrastan el diff.
  • Solo se analizan los archivos confirmados en un commit; las ediciones sin commit y los archivos no rastreados se ignoran.
  • Por defecto, los informes se escriben en .probe/ dentro del repositorio. La salida de consola se mantiene breve.
  • Las opciones aceptan uno o dos guiones (-ci o --ci). Los booleanos se activan con --ci o --ci=true y se desactivan con --checks=false. Un valor se indica como --base main o --base=main.
  • Ejecuta probe <command> --help para ver las opciones de un comando.

Elegir revisiones

Ambos lados de una comparación se resuelven en ID de commit inmutables, que quedan registrados en el informe. Se gestionan los renombrados, las eliminaciones, los archivos binarios y los cambios de tipo de archivo.

FormaCompara
--base main (predeterminado)Desde la base de merge de main y --head hasta --head, como una pull request. Los commits añadidos a main desde el punto de bifurcación no forman parte del cambio.
--base main --exactDesde la punta de main directamente hasta --head.
BASE..HEADLos dos commits exactos, por ejemplo HEAD~1..HEAD para revisar el último commit. Tiene prioridad sobre --base, --head y --exact.
BASE...HEADDesde la base de merge de las dos revisiones hasta HEAD.

Un rango puede aparecer antes o después de las opciones: probe review main..HEAD --ci y probe review --ci main..HEAD son equivalentes. Se acepta como máximo un rango. Funciona cualquier revisión que Git entienda: ramas, etiquetas, origin/main, HEAD~3 o un ID de commit. Los jobs de CI necesitan suficiente historial para resolver la base (por ejemplo fetch-depth: 0).

La política de confianza se lee siempre de la rama base, nunca del cambio en revisión, para que una pull request no pueda relajar sus propias reglas.

probe lint

Análisis estático de un cambio: comparación con Git, señales de riesgo y un informe. Sin Docker, sin llamadas a proveedores, sin ejecutar código del repositorio. Se puede ejecutar con seguridad en ramas no confiables.

OpciónPredeterminadoDescripción
--base REVmainRama o revisión base. La comparación empieza en su base de merge con --head; su punta aporta la política de confianza.
--head REVHEADRevisión candidata en revisión.
--exactfalseComparar con la propia revisión base en lugar de con la base de merge.
BASE..HEAD—Rango posicional; consulta Elegir revisiones.
--repo PATH.Directorio del repositorio. Sirve cualquier directorio dentro del árbol de trabajo.
--config PATHpolítica de la baseUsa este archivo de política local en lugar del .probe.json de la rama base. Pasa solo un archivo en el que confíes.
--out DIR.probeDirectorio de informes, relativo a la raíz del repositorio. La ruta no puede contener enlaces simbólicos.
--format LISTmarkdown,jsonFormatos de informe que se escriben, separados por comas: markdown, json, sarif v0.4, pr-comment v0.4. Consulta Archivos de salida.
--report-url URL v0.4—Un enlace https al informe completo, citado en PR_COMMENT.md. Requiere el formato pr-comment; una URL que parezca contener una credencial se rechaza con el código de salida 3.
--impacttrueConstruye el índice de impacto estático de las funciones modificadas. --impact=false lo omite.
--plan PATH—Un PLAN.json escrito por probe plan: contrasta el diff con su contrato y añade una sección plan_drift y señales.
--cifalseTermina con el código 2 cuando se requiere revisión humana. Consulta Códigos de salida.
--intent TEXT—Intención de la pull request o criterios de aceptación, registrados en el informe (como máximo 64 KiB).
--intent-file PATH—Lee la intención de un archivo UTF-8. No se puede combinar con --intent.
--checks, --reviewerfalseDeben seguir en false: lint termina con el código 3 si alguna está activada. Usa review. Las opciones de etapas exclusivas de review (--base-tests, --impacted-tests, --fuzz, --cache-dir, --parallel, --deadline, --allow-prepare-network) se rechazan de la misma forma.
probe lint HEAD~1..HEAD                 # the last commit
probe lint --base origin/main --ci      # this branch as a pull request, for CI
probe lint --base main --format json    # JSON report only
probe lint --base main --plan .probe/PLAN.json   # scope drift against an approved plan

probe review

Todo lo que hace lint, más los comandos test, typecheck, build y coverage de la política en contenedores Docker desechables, más una investigación con IA cuando hay un modelo configurado. Requiere Docker con contenedores Linux y una sandbox.image precargada.

OpciónPredeterminadoDescripción
--base REVmainRama o revisión base. La comparación empieza en su base de merge con --head; su punta aporta la política de confianza.
--head REVHEADRevisión candidata en revisión.
--exactfalseComparar con la propia revisión base en lugar de con la base de merge.
BASE..HEAD—Rango posicional; consulta Elegir revisiones.
--repo PATH.Directorio del repositorio.
--config PATHpolítica de la baseUsa este archivo de política local en lugar del .probe.json de la rama base, por ejemplo para probar una política antes de hacer commit. Pasa solo un archivo en el que confíes: decide qué se ejecuta y adónde se envía el código fuente.
--out DIR.probeDirectorio de informes, relativo a la raíz del repositorio. Los artefactos van a DIR/artifacts/.
--format LISTmarkdown,jsonFormatos de informe que se escriben, separados por comas: markdown, json, sarif v0.4, pr-comment v0.4.
--report-url URL v0.4—Un enlace https al informe completo, citado en PR_COMMENT.md. Requiere el formato pr-comment.
--cifalseTermina con el código 2 cuando se requiere revisión humana, incluidas las señales de alto riesgo, las áreas no verificadas o las comprobaciones incompletas.
--checkstrueEjecuta las comprobaciones configuradas en el sandbox. --checks=false las omite; un revisor configurado puede seguir ejecutando experimentos en el sandbox.
--reviewerautoInvestigación con IA. Se activa automáticamente cuando hay un modelo definido en la política de confianza o en PROBE_REVIEWER_MODEL. --reviewer=false desactiva toda llamada a proveedores; --reviewer termina con el código 3 si no hay ningún modelo configurado.
--max-iterations Npolítica (20)Sustituye reviewer.max_iterations para esta ejecución, de 1 a 100.
--intent TEXT—Intención de la pull request o criterios de aceptación (como máximo 64 KiB). Se registran en el informe y se entregan al revisor.
--intent-file PATH—Lee la intención de un archivo UTF-8. No se puede combinar con --intent.
--allow-networkfalseDa acceso a la red a los contenedores del sandbox. Solo surte efecto si la política de confianza también define sandbox.network: true.
--no-networkfalseFuerza la desactivación de la red del sandbox. No afecta a las llamadas a la API del revisor; para eso, añade --reviewer=false.
--plan PATH—Contrasta el diff con el contrato de un PLAN.json. Un cambio que se desvía solicita revisión humana (código 2 con --ci), nunca el código 1.
--impacttrueConstruye el índice de impacto estático de las funciones modificadas. --impact=false lo omite (y no se puede combinar con --impacted-tests).
--impacted-tests v0.4falseEjecuta, sobre la base y sobre el candidato, los tests de Go sin cambios que según el índice de impacto alcanzan una función modificada. Un test que pasa en la base y falla en el candidato es FAILS_ON_CANDIDATE: un motivo para revisar, no un defecto.
--base-tests v0.4falseEjecuta la versión base de cada función de test de Go que el cambio modificó o eliminó, sobre el código base y el candidato.
--fuzz v0.4trueEjecuta el fuzzing diferencial que configura el objeto fuzz de la política. --fuzz=false registra la etapa como desactivada.
--cache-dir DIR v0.4—Caché opcional de las ejecuciones de la base, fuera del repositorio y del directorio de salida. Una ejecución de la base reproducida desde la caché nunca sustenta un resultado positivo.
--parallel N v0.41Ejecuta las comprobaciones iniciales de N en N, de 1 a 4.
--deadline D v0.4—Límite de tiempo global de la ejecución, de 1m a 24h; se reservan 30 segundos para la limpieza y el informe.
--allow-prepare-network v0.4falseDa acceso a la red al contenedor de prepare, solo si prepare.network de la política también lo permite. Las comprobaciones siguen sin conexión.
probe review --base main --ci                        # typical pull request run
probe review HEAD~1..HEAD --reviewer=false           # checks only, no provider
probe review --base main --checks=false --reviewer=false   # static only, like lint
probe review --base main --intent-file PR.md         # give acceptance criteria
probe review --base main --impacted-tests --base-tests --ci   # run tests on both revisions
probe review --base main --format markdown,json,sarif,pr-comment --report-url "$RUN_URL"

La preparación de dependencias se ejecuta primero, cuando la política tiene un objeto prepare. Después, las comprobaciones se ejecutan en este orden: test, typecheck, build y coverage, seguidas de las etapas de evidencia y del revisor. Cada contenedor se ejecuta sin root, con la raíz y el código fuente montados en solo lectura, sin capacidades añadidas, sin red por defecto y con los límites de CPU, memoria, PID y tiempo de la política del sandbox. Nunca se montan el socket de Docker, tu copia de trabajo ni las claves de API. Si falta Docker o la imagen, la ejecución termina con el código 4; nunca se recurre a tu máquina anfitriona.

probe plan

Antes de escribir el cambio: el proveedor configurado simula, en solo lectura, cómo implementaría una intención sobre el commit base y envía un plan estructurado (archivos, símbolos, dependencias, pasos). Probe lo evalúa con reglas fijas y escribe PLAN.json y PLAN.md. El modelo produce el plan; nunca juzga su riesgo. No se modifica ni se ejecuta nada.

OpciónPredeterminadoDescripción
--intent-file PATH, --intent TEXT—El cambio que se planifica. Obligatorio; como máximo 64 KiB de UTF-8, se lee igual que la intención de la revisión.
--base REVmainLa revisión desde la que parte el plan. Su punta aporta la política de confianza.
--config PATHpolítica de la basePolítica local de confianza explícita.
--out DIR.probeDirectorio de salida, relativo al repositorio.
--cifalseTermina con el código 2 cuando se señala una categoría o algo quedó sin verificar.
--max-iterations NpolíticaSustituye el presupuesto de iteraciones del proveedor, de 1 a 100.
--reviewertrueUn proveedor es obligatorio: sin un modelo configurado, o con --reviewer=false, plan termina con el código 3 y no escribe nada.

Las herramientas del planificador son de solo lectura y trabajan sobre una instantánea del commit base: list_files, read_file, search_code y las basadas en el índice find_references, inspect_symbol y find_callers, y después submit_plan una sola vez. La evaluación señala cuatro categorías a partir únicamente del plan y del commit base:

CategoríaSeñales
Partes críticasplan_critical_path (una ruta planificada coincide con sensitive_paths), plan_sensitive_symbol (un nombre de autenticación, autorización o pago).
Arquitecturaplan_exported_signature, plan_dependency_change, plan_new_package.
Riesgo de regresiónplan_wide_impact (10 o más llamadores), plan_untested_impact (llamadores sin ningún test que los alcance), medidos sobre el índice estático del commit base.
Otro cambio importanteplan_file_deletion, plan_large_scope (20 archivos o más), plan_inconsistent, plan_unmeasured.

Códigos de salida: 0; 2 con --ci cuando se señala una categoría; 3 uso o configuración; 4 fallo del proveedor o ningún plan aceptado.

Desviación del alcance: --plan

lint --plan y review --plan leen el contrato del plan y lo comparan con el diff real. Cada diferencia en el diff se convierte además en una señal plan_drift. La sección queda en drifted cuando un elemento es de gravedad media o superior.

ElementoGravedadCuándo
unplanned_filemediaUn archivo modificado que el plan no incluye (unplanned_test_file, baja, si es un archivo de test).
unannounced_exported_changealtaUna declaración exportada de Go modificada o eliminada sin haberse anunciado como signature o remove.
unannounced_critical_pathaltaUna ruta modificada coincide con un glob crítico de la política de esta revisión y el plan no la incluía.
unannounced_dependency_changemediaUn manifiesto de dependencias cambió sin haberse declarado.
planned_file_untouchedbajaUn archivo planificado que el cambio no toca (solo en la sección).
probe plan --intent-file task.md --ci                     # 1. plan; exit 2: a human validates it
# 2. an agent implements the plan
probe review --base origin/main --plan .probe/PLAN.json --ci   # 3-4. exit 0: merge; exit 2: review

El plan gate

review --plan termina con una decisión, plan_drift.decision, que se imprime en stdout y al principio de la sección Plan Conformance. Con --ci, es el código de salida.

DecisiónCuándo
no_human_review_required (código 0)Todo lo siguiente: el plan, reevaluado por la revisión a partir de su propuesta en su commit base con la política de confianza de esta revisión, no señala ninguna categoría ni tiene lagunas de medición; el cambio se ajusta al plan y a su base; se ejecutó al menos una comprobación y todas pasaron; no hay ningún problema reproducido, señal alta o crítica, área no verificada ni otra sección que solicite revisión.
human_review_required (código 2)Cualquier otro caso. Todos los motivos se enumeran en plan_drift.decision_reasons. lint --plan no ejecuta ninguna comprobación, así que siempre requiere revisión.

Las marcas y el contrato guardados en PLAN.json nunca se consideran de confianza: el contrato se vuelve a derivar de la propuesta, de modo que un plan editado no puede ampliar el alcance sin evaluación, y probe report recalcula la decisión a partir del informe registrado. El gate es una decisión de proceso, no un veredicto sobre la corrección. Un plan que no señala nada no demuestra que el cambio sea seguro, y la desviación no comprueba que el cambio implemente la intención. Consulta planes previos al cambio y la receta de CI.

probe init

Escribe un .probe.json inicial para el proyecto. Se niega a sobrescribir un archivo existente. Revisa los comandos y la imagen y, después, haz commit del archivo en tu rama base.

OpciónPredeterminadoDescripción
--repo PATH.Directorio en el que crear .probe.json.
--language NAMEdetectadogo, typescript, javascript, python, rust o unknown. Se detecta a partir de go.mod/go.work, Cargo.toml, tsconfig.json, package.json y, después, pyproject.toml/setup.py/requirements.txt. Selecciona los valores predeterminados.

probe report

Vuelve a generar un informe JSON guardado, por ejemplo para regenerar el Markdown o producir SARIF en CI. No se vuelve a ejecutar nada, y regenerar no autentica las evidencias que contiene; cada estado se vuelve a derivar de las comprobaciones registradas, así que un informe editado se corrige en lugar de darse por bueno.

OpciónPredeterminadoDescripción
--input PATH.probe/confidence-report.jsonInforme JSON guardado (versión 1, como máximo 64 MiB).
--out DIR.probeDirectorio de salida, relativo al directorio actual.
--format LISTmarkdown,jsonFormatos que se escriben, separados por comas: markdown, json, sarif v0.4, pr-comment v0.4.
--report-url URL v0.4—Un enlace https al informe completo, citado en PR_COMMENT.md.

probe version y ayuda

ComandoMuestra
probe version, --versionLa versión, por ejemplo probe v0.5.1, y el aviso de licencia.
probe help, -h, --helpLa sinopsis. Sin argumentos, Probe muestra el mismo texto.
probe <command> --helpLas opciones de un comando, con sus valores predeterminados.

Códigos de salida

CódigoSignificado
0Informe completado sin ningún problema alto o crítico reproducido. Sin --ci, las áreas sin resolver no cambian este código.
1Una hipótesis alta o crítica está respaldada por un fallo diferencial: un test generado pasó en la base y falló en el candidato. Nada más produce 1: ni una divergencia de fuzzing, ni un mutante superviviente, ni un test afectado o base que falla, ni la desviación del plan.
2Solo con --ci: se requiere revisión humana, incluidas las señales de alto riesgo, las áreas no verificadas, las comprobaciones incompletas, un test FAILS_ON_CANDIDATE, una divergencia de fuzzing o una etapa no concluyente, la desviación del plan, un plan que señaló una categoría (el plan gate) o (para plan) una categoría señalada.
3Argumentos no válidos, comparación de Git o configuración de confianza (incluida una clave de política o un nombre de comando desconocidos).
4Error operativo en el entorno de ejecución, el análisis o la escritura del informe, como que Docker o la imagen del sandbox no estén disponibles, una comprobación que no se pudo ejecutar, una preparación de dependencias fallida o un fallo del proveedor durante plan.

Ningún código significa "aprobado". Un 0 indica que no se reprodujo nada, no que el cambio sea correcto.

Variables de entorno

El proveedor de IA pertenece al despliegue y no al repositorio, así que estos ajustes pueden venir del entorno. Nada más puede hacerlo: la imagen, los comandos, los presupuestos y las rutas sensibles los decide siempre la política de confianza.

VariableEfecto
PROBE_REVIEWER_ENDPOINTSustituye reviewer.endpoint. Mismas reglas de URL que la política.
PROBE_REVIEWER_MODELSustituye reviewer.model y, por sí sola, activa el revisor durante review.
PROBE_API_KEYClave de API. El nombre lo define reviewer.api_key_env; este es el predeterminado.
PROBE_API_KEY_FILERuta de un archivo que contiene la clave, usada cuando la variable anterior no está definida. El archivo debe poder leerse o la ejecución termina con el código 3.
/run/secrets/PROBE_API_KEYSecreto de Docker que se lee en último lugar, cuando no está definida ninguna de las dos variables. Su ausencia no es un error.

Una variable vacía cuenta como no definida. Los archivos de claves se leen enteros, sin los espacios en blanco del principio y del final, con un límite de 8 KiB, y deben contener una sola línea. Cuando se ejecuta el revisor, el registro indica de dónde procede cada valor, nunca el valor en sí. Quien controla este entorno elige adónde se envía el código fuente redactado: mantenlo fuera de los jobs que ejecutan código de forks no confiables.

Archivos de salida

RutaContenido
.probe/CONFIDENCE_REPORT.mdEl informe que se lee: resumen del cambio, comprobaciones automáticas, resumen de la investigación, problemas reproducidos, áreas no verificadas, revisión humana sugerida, superficie de revisión, ejecución de las líneas modificadas, evidencias registradas y artefactos.
.probe/confidence-report.jsonLos mismos datos para herramientas: ID de commit, líneas modificadas, señales, comprobaciones, hipótesis, evidencias, eventos de auditoría y hashes de los artefactos. Consulta el esquema JSON.
.probe/confidence-report.sarif v0.4Con --format sarif: un registro SARIF 2.1.0 para herramientas de análisis de código, que contiene solo los hallazgos respaldados por evidencias registradas en el sandbox. Ningún hallazgo no significa aprobación.
.probe/PR_COMMENT.md v0.4Con --format pr-comment: un comentario de pull request con un bloque de estado y todos los hallazgos respaldados por evidencias.
.probe/PLAN.json, PLAN.mdEscrito por probe plan: la propuesta redactada por el modelo, la evaluación determinista y el contrato (esquema).
.probe/artifacts/Registros de las comprobaciones, perfiles de cobertura, código fuente de los tests generados, resultados de los tests, parches de mutantes y registros de fuzzing, cada uno referenciado por su hash SHA-256 en el informe.

Añade .probe/ a .gitignore. La consola muestra un único resumen: archivos y líneas modificados, número de señales y de problemas reproducidos, la superficie de revisión enfocada y la ejecución de las líneas modificadas.

Señales de riesgo

Las señales son motivos para mirar, no defectos confirmados. Los archivos de Go reciben un análisis sintáctico; TypeScript/JavaScript, Python, Rust y otros lenguajes usan heurísticas de texto etiquetadas. Las señales sobre las mismas líneas se fusionan en un único rango de revisión en el informe. Las señales de archivo (sensitive_path, dependency_change, migration_change, infrastructure_change, binary_change, file_deleted, file_type_change, large_change, branch_growth, no_test_change, prepare_input_changed, plan_drift) afectan al archivo, no a una línea: el informe las muestra bajo el archivo como archivo completo, y el JSON las marca con "scope": "file". Su line solo las sitúa en la primera línea modificada del archivo.

TipoGravedadSe genera cuando
sensitive_pathaltaUna ruta modificada coincide con un glob de sensitive_paths.
private_keycríticaUna línea añadida inicia un bloque de clave privada PEM (RSA, DSA, EC, OpenSSH, PGP, cifrada) o una clave PuTTY. La clave nunca se copia en el informe.
hardcoded_secretaltaUna línea añadida contiene algo con forma de credencial (claves de AWS, GitHub, GitLab, Slack, Stripe, Google, proveedores de LLM, npm, Twilio/SendGrid, almacenamiento de Azure, JWT) o asigna un literal entre comillas de 8 caracteres o más, con un dígito o un símbolo, a una clave con nombre de secreto (password, api_key, token, client_secret…). Se ignoran los marcadores de posición, las plantillas y las lecturas del entorno o de un almacén de secretos; el valor se enmascara en las evidencias.
credential_in_urlaltaUna URL añadida contiene user:password@ o un parámetro de consulta con nombre de secreto (api_key=, token=, password=…).
tls_verification_disabledaltaInsecureSkipVerify: true, verify=False, rejectUnauthorized: false, NODE_TLS_REJECT_UNAUTHORIZED=0, curl -k, sslmode=disable, mínimos de TLS 1.0/1.1 y similares.
excessive_permissionsaltaPermisos de escritura para todos (chmod 777, 0666 en API de archivos), contenedores privilegiados, escalada de privilegios, runAsUser: 0, USER root, PID o red del host, SYS_ADMIN, un socket de Docker montado, NOPASSWD: ALL.
protection_disabledaltaCSRF desactivado o exceptuado, orígenes CORS comodín, cookies inseguras, escape automático de plantillas desactivado, algoritmo JWT none o firmas sin verificar, SELinux, cortafuegos, seccomp o AppArmor desactivados, buckets públicos o entrada desde 0.0.0.0/0, permissions: write-all en un workflow.
debug_enabledmediaDEBUG = True, debug: true, app.run(debug=True), FLASK_DEBUG=1, gin.DebugMode y similares.
hardcoded_email, hardcoded_ipbajaUna dirección de correo electrónico añadida, o una dirección IPv4 dentro de una cadena o URL, fuera de los tests y la documentación. Se ignoran los rangos de documentación, loopback y ejemplo.
auth_changealtaSe modifica el cuerpo de una función de Go cuyo nombre sugiere autenticación o autorización, o una línea modificada menciona autorización, autenticación, JWT, bcrypt, argon2, CSRF o CORS.
sensitive_function_changealtaSe modifica el cuerpo de una función de Go cuyo nombre sugiere pagos (payment, refund, charge, capture, withdraw, deposit, balance…).
validation_removedaltaUna línea eliminada llamaba a una función de validación, aserción o saneamiento, o lanzaba un error de validación.
public_api_changealta mediaGo: se eliminó o modificó una declaración exportada (alta) o se añadió (media). Otros lenguajes: una línea parece una declaración pública (media).
database_writealtaUna línea modificada parece una mutación o transacción de base de datos (INSERT, UPDATE … SET, .Exec(, .Commit(…).
dynamic_executionaltaeval, ejecución de procesos, subprocess, child_process, innerHTML y similares.
type_suppressionaltaSupresión de tipos o de lint, como @ts-ignore, as any, unsafe, nolint, eslint-disable.
migration_changealtaCambió una ruta que contiene migration o que termina en .sql.
infrastructure_changealtaCambió un workflow de GitHub, un Dockerfile o un archivo de Terraform.
file_type_changealtaGit informa de un cambio de tipo, por ejemplo un archivo que se convierte en un enlace simbólico.
network_changemediaUna línea modificada hace llamadas HTTP, gRPC o de socket, o contiene una URL.
error_handling_changemediaCambiaron comprobaciones de errores, envoltorios de errores, panic/recover, catch o except.
dependency_changemediaCambió un manifiesto de dependencias o un lockfile (go.mod, package.json, Cargo.lock, pyproject.toml…).
uncovered_changemedia bajaLas líneas de Go añadidas no se ejecutaron en la ejecución de coverage registrada. Baja cuando la propia ejecución de cobertura falló.
branch_growthmediaEn un archivo se añadieron al menos cinco líneas con construcciones de ramificación más de las que se eliminaron. No es una métrica de complejidad.
large_changemediaMás de 400 líneas modificadas en un archivo.
file_deletedmediaSe eliminó un archivo rastreado.
binary_changemediaUn archivo binario cambió y no se puede analizar como texto.
analysis_limitedmediaEl análisis de declaraciones de Go no pudo completarse para un archivo, por ejemplo porque no se puede analizar sintácticamente, o el índice de impacto estaba limitado o no disponible para las funciones modificadas (símbolo impact_index).
test_focus_added v0.4altaSe añadió un marcador de foco a un archivo de test (it.only, fdescribe…).
test_assertion_removed, test_case_removed v0.4mediaUn archivo de test perdió más líneas de aserción, o más declaraciones de test, de las que ganó. Reglas para Go, TS/JS, Python y Rust.
test_skip_added, test_expectation_relaxed v0.4mediaSe añadió un marcador de omisión (t.Skip, it.skip, @pytest.mark.skip, #[ignore]…), o en un hunk se sustituyeron expectativas exactas por otras más laxas.
surviving_mutant v0.4mediaUna mutación de una línea de Go añadida no hizo fallar ningún test de su paquete. El mutante puede ser equivalente.
prepare_input_changed v0.4mediaEl cambio toca un archivo incluido en prepare.inputs de la política; la capa de dependencias se construyó igualmente a partir del commit base.
plan_driftalta media bajaCon --plan: el diff se sale del contrato del plan. Consulta desviación del alcance.
impacted_callerbajaCódigo sin cambios llama a una función modificada, según el índice de impacto. Como máximo 10 por función y 100 por ejecución.
no_test_changebajaCambió un archivo de código fuente y no cambió ningún archivo de test en el mismo directorio o con la misma raíz de nombre. La cobertura existente no se mide.
todo_addedbajaSe añadió un marcador TODO, FIXME, HACK o XXX.

Análisis de impacto

Con --impact (el valor predeterminado), lint y review construyen en el host un índice estático del commit candidato, a partir de los objetos de Git confirmados, sin ejecutar código del repositorio. Para cada función modificada, enumera los lugares del código sin cambios que la llaman y los tests existentes que la alcanzan en 3 llamadas como máximo, añade señales impacted_caller bajas y da soporte a las herramientas find_references, inspect_symbol y find_callers del revisor.

LenguajeCómo se indexaResolución
GoAnalizado y con comprobación de tipos mediante la biblioteca estándar de Go, paquete a paquete, con las restricciones de compilación linux/amd64. Las llamadas a interfaces son despachos posibles.static, interface
TypeScript/JavaScript, Python, RustAnálisis léxico: las funciones, los métodos y los tests se localizan a partir de los tokens, y una llamada se vincula por nombre a las declaraciones homónimas del mismo lenguaje, dando preferencia a la clase del llamador, al módulo o tipo calificador y al mismo archivo. Se omiten node_modules, dist, target, venv y directorios similares.name

Todas las respuestas son aproximadas: un llamador listado es un lugar que revisar, y la ausencia de llamadores no demuestra que no exista ninguno. --impacted-tests solo ejecuta tests de Go que alcanzan el cambio. Consulta análisis de impacto.

Lenguajes

FuncionalidadGoTS/JSPythonRust
Señales de riesgo y reglas de debilitamiento de testssintácticotextotextotexto
Índice de impacto y herramientas de símbolos del revisorcon comprobación de tiposléxicoléxicoléxico
Comprobaciones en sandbox y valores predeterminados de initsísísísí
Tests generados verificadossísí (JSON de Jest/Vitest)se ejecutan, sin verificación por nombresin comando predeterminado
Fuzzing diferencialsísí——
Cobertura, mutación, --base-tests, --impacted-testssí———

Archivo de política: .probe.json

La política decide qué comandos se ejecutan, en qué imagen, con qué límites y si se usa un proveedor de IA. Se lee de .probe.json en la rama base o de --config PATH. Si no hay ninguna, se aplican los valores predeterminados integrados para el lenguaje detectado. Las claves que omitas toman los valores predeterminados que se muestran a continuación.

El archivo debe ser un único objeto JSON de 1 MiB como máximo. Las claves desconocidas, los nombres de comando desconocidos y las claves duplicadas se rechazan con el código 3, de modo que un binario antiguo rechaza una clave que no conoce.

ClaveTipoPredeterminadoDescripción
versionentero1Versión del formato de la política. Debe ser 1.
languagecadenadetectadoLenguaje escrito por init. Informativo.
fuzz, mutation, prepare v0.4objetoausenteEtapas de evidencia opcionales: fuzzing diferencial, mutación de las líneas añadidas y preparación de dependencias de confianza. init nunca las escribe.
{
  "version": 1,
  "language": "go",
  "commands": {
    "test": ["go", "test", "./..."],
    "typecheck": ["go", "vet", "./..."],
    "build": ["go", "build", "./..."],
    "generated_test": ["go", "test", "{package}"],
    "coverage": ["go", "test", "-covermode=count", "-coverprofile={coverage_out}", "./..."]
  },
  "sandbox": { "image": "golang:1.26-bookworm", "network": false, "timeout_seconds": 120,
               "max_runtime_seconds": 600, "max_output_bytes": 65536, "memory_mb": 1024, "cpus": 2 },
  "reviewer": { "endpoint": "https://api.openai.com/v1/chat/completions", "model": "",
                "api_key_env": "PROBE_API_KEY", "max_iterations": 20, "max_generated_tests": 10,
                "timeout_seconds": 600, "max_input_bytes": 131072 },
  "sensitive_paths": ["**/auth/**", "**/payment*/**", "**/migrations/**", ".github/workflows/**", ".probe.json"]
}

commands

Cada comando es un array argv, no una cadena de shell: ["npm", "test"], nunca "npm test". Como máximo 128 argumentos; configura solo las comprobaciones que tu proyecto ofrece.

ClaveMarcadores de posiciónDescripción
commands.test—Suite de tests, ejecutada por review.
commands.typecheck—Comprobación de tipos o estática, por ejemplo go vet o tsc --noEmit.
commands.build—Comando de compilación.
commands.generated_test{file}, {package}, {results_out}Cómo se ejecutan los tests temporales del revisor de IA (y --impacted-tests) sobre la base y el candidato. El valor predeterminado de Go usa el paquete del test para poder ejercitar código no exportado. Los experimentos de Go verificados necesitan un único marcador de posición de destino independiente; un comando de Jest o Vitest que escribe un informe JSON en {results_out} hace que los experimentos de TS/JS sean verificables por nombre de test.
commands.coverage{coverage_out} (exactamente una vez)Solo Go. Mide qué líneas añadidas ejecutó una ejecución en el sandbox. Se ejecuta en último lugar, además de test, dentro de sandbox.max_runtime_seconds. Añade -coverpkg=./... para atribuir la ejecución entre paquetes.

sandbox

ClavePredeterminadoPermitidoDescripción
sandbox.imagegolang:1.26-bookwormnombre de imagenImagen precargada con la cadena de herramientas y las dependencias. Probe nunca la descarga; fíjala por digest si puedes.
sandbox.networkfalsebooleanoPermite la red en los contenedores. También requiere --allow-network en la línea de comandos.
sandbox.timeout_seconds1201–3600Límite de tiempo de cada comando.
sandbox.max_runtime_seconds6001–7200Tiempo total de sandbox para la ejecución, compartido por las comprobaciones y los experimentos.
sandbox.max_output_bytes655361024–4194304Salida capturada que se conserva por comando.
sandbox.memory_mb1024128–32768Límite de memoria de cada contenedor, en MiB.
sandbox.cpus21–32Límite de CPU de cada contenedor.

reviewer

ClavePredeterminadoPermitidoDescripción
reviewer.model""ID de modeloModelo compatible con herramientas. Vacío desactiva el revisor. Se sustituye con PROBE_REVIEWER_MODEL.
reviewer.endpointhttps://api.openai.com/v1/chat/completionsURLEndpoint de Chat Completions con llamada a funciones; también sirve una URL base /v1. HTTPS, o HTTP solo en loopback. Sin credenciales, consulta ni fragmento; las redirecciones se rechazan.
reviewer.api_key_envPROBE_API_KEYnombre de variableVariable de entorno que contiene la clave; a continuación se prueban <NAME>_FILE y /run/secrets/<NAME>. Vacío para un proveedor que no necesita clave.
reviewer.max_iterations201–100Turnos del modelo por investigación. --max-iterations lo sustituye.
reviewer.max_generated_tests100–100Tests temporales que puede crear el revisor.
reviewer.timeout_seconds6001–1800Tiempo total de la investigación.
reviewer.max_input_bytes1310724096–2097152Límite del contexto de código fuente enviado al proveedor.

sensitive_paths

Globs de rutas que, al cambiar, generan siempre una señal sensitive_path alta. Las rutas son relativas a la raíz del repositorio, con barras normales; * coincide dentro de un segmento de ruta y ** a través de segmentos. Se rechazan las rutas absolutas, las barras invertidas y ...

Glob predeterminadoCubre
**/auth/**Cualquier directorio auth.
**/payment*/**Directorios payment, payments y similares.
**/migrations/**Migraciones de base de datos.
.github/workflows/**Workflows de CI.
.probe.jsonLa propia política.

fuzz v0.4

Pasa las mismas entradas con semilla por cada función de Go de nivel de paquete modificada y cada función exportada de TS/JS modificada (con la firma sin cambios), sobre la base y el candidato, y compara lo que registraron las dos revisiones. Una función diverged es una observación, nunca un defecto: solicita revisión (código 2 con --ci) y nunca produce el código 1. {} lo activa con los valores predeterminados.

ClavePredeterminadoPermitido
fuzz.max_functions81–32 funciones por revisión
fuzz.max_packages41–16 paquetes de Go y módulos de TS/JS
fuzz.max_inputs641–256 entradas por función
fuzz.call_timeout_ms100010–10000, como máximo el tiempo límite del comando
fuzz.max_runtime_seconds2401–7200, dentro de sandbox.max_runtime_seconds

mutation v0.4

Hace pequeños cambios deterministas en las líneas añadidas de los archivos de Go modificados que no son de test y ejecuta los tests del paquete una vez por mutante. Un mutante que ningún test detecta se convierte en una señal surviving_mutant media; no se calcula ninguna puntuación. Las cuatro claves son obligatorias.

"mutation": {
  "command": ["go", "test", "-json", "-count=1", "-failfast", "{package}"],
  "max_mutants": 20, "timeout_seconds": 60, "max_runtime_seconds": 300
}
ClavePermitido
mutation.commandgo test con exactamente un -json y un {package} independiente; se rechazan las opciones que cambian los tests seleccionados o el binario (-run, -exec, -o…).
mutation.max_mutants1–200.
mutation.timeout_secondsDe 1 a sandbox.timeout_seconds, por ejecución.
mutation.max_runtime_secondsDe timeout_seconds a sandbox.max_runtime_seconds, dentro del presupuesto compartido.

prepare v0.4

Permite que la política de confianza de la rama base construya la capa de dependencias: antes de que se ejecute código del candidato, su comando se ejecuta una vez, en un contenedor acotado, sobre los archivos de dependencias exportados del commit base, y el contenedor se convierte en la imagen local de todas las comprobaciones. Una revisión posterior con la misma base y las mismas entradas la reutiliza. Si no produce ninguna imagen, la revisión termina con el código 4; nunca recurre a la imagen sin preparar.

"prepare": { "command": ["go", "mod", "download"], "inputs": ["go.mod", "go.sum"], "network": true }
ClavePredeterminadoDescripción
prepare.commandobligatorioArgv de 1 a 128 argumentos; no se sustituye ningún marcador de posición.
prepare.inputsobligatorioDe 1 a 64 patrones relativos al repositorio (* nunca cruza /, sin **).
prepare.networkfalseRed para el contenedor de construcción, solo con --allow-prepare-network y sin --no-network.
prepare.user"sandbox""sandbox" (la identidad de las comprobaciones) o "root".
prepare.timeout_seconds6001–3600.
prepare.envningunoHasta 32 variables incorporadas a la imagen derivada; se rechazan los nombres que cambiarían lo que ejecutan las comprobaciones (GOFLAGS, NODE_OPTIONS, LD_PRELOAD, PROBE_*…).
prepare.max_added_mb4096De 1 a 65536 MiB que puede añadir la imagen derivada.

Valores predeterminados por lenguaje

Los escribe probe init y se usan cuando la rama base no tiene política. Las imágenes estándar de Node.js, Python y Rust no contienen tus dependencias: construye una imagen que las incluya, o añade un objeto prepare, y adapta los comandos.

LenguajeImagenComandos
gogolang:1.26-bookwormtest go test ./... · typecheck go vet ./... · build go build ./... · generated_test go test {package} · coverage go test -covermode=count -coverprofile={coverage_out} ./...
typescript, javascriptnode:22-bookwormtest npm test · build npm run build · generated_test npx --no vitest run {file} --reporter=json --outputFile={results_out}
pythonpython:3.13-bookwormtest python -m unittest discover · generated_test python -m unittest {file}
rustrust:1-bookwormtest cargo test --workspace --offline · typecheck cargo check --workspace --all-targets --offline · build cargo build --workspace --offline · sin generated_test
unknowngolang:1.26-bookwormSin comandos: review no ejecuta ninguna comprobación hasta que las añadas.

Revisor de IA

Opcional. Cuando hay un modelo configurado, review le permite investigar el cambio con herramientas acotadas: leer archivos y diffs redactados, buscar en el código fuente, consultar referencias y llamadores en el índice estático, ejecutar comprobaciones existentes y crear y ejecutar tests temporales sobre la base y el candidato. No tiene shell ni forma de descargar URL. Sus afirmaciones siguen siendo hipótesis hasta que un test reproduce una diferencia.

{
  "reviewer": {
    "endpoint": "https://your-provider.example/v1",
    "model": "your-tool-capable-model",
    "api_key_env": "PROBE_API_KEY"
  }
}
export PROBE_API_KEY=…                       # from your shell or CI secret store
probe review --base main --config .probe.json   # try it before committing
probe review --base main --reviewer=false            # turn it off for one run
  • Solo la política de confianza, --config o el entorno de despliegue pueden activar el revisor; una pull request no puede.
  • Se envía al proveedor un contexto de código fuente acotado y redactado. El enmascaramiento de secretos se hace lo mejor posible, sin garantías; usa un proveedor local (por ejemplo http://127.0.0.1:1234/v1) si el código fuente debe quedarse en local.
  • Las claves de API nunca entran en los contenedores de test. lint nunca llama a un proveedor.
  • Los fallos del proveedor y los presupuestos agotados conservan los resultados deterministas y marcan la investigación como incompleta; con --ci, eso requiere revisión humana.