becwright

Guías

Portabilidad

Exportá una BEC a un bundle autocontenido e importala en otro repo.

En corto: ¿escribiste una buena regla y la quieres en otro proyecto (o pasársela a un compañero)? export la empaqueta en un archivito; import la mete en el otro repo. El archivo lleva todo lo que la regla necesita — incluido el código del check si es propio — así que no se rompe nada del otro lado.

Una BEC es portable — la puedes mover entre repos. Un bundle (el archivo empaquetado) es un único archivo .bec.yaml autocontenido.

Exportar

becwright export no-token-in-logs -o no-token-in-logs.bec.yaml

Sin -o, el bundle se escribe por stdout.

Importar

becwright import no-token-in-logs.bec.yaml          # desde un archivo
becwright import https://example.com/rule.bec.yaml  # desde una URL

Al importar, becwright imprime la regla y el código del check, y luego pide confirmación antes de instalar — importar una BEC significa importar código que corre en cada commit. Usá --yes para saltar el prompt en automatización. becwright se niega a sobrescribir un id de regla existente o un archivo de check distinto que ya esté en disco.

Formato del bundle

becwright_bec: 1
exported_from: https://github.com/owner/repo   # procedencia (la parte "bound")
rule:
  id: no-token-in-logs
  intent: ...
  why_it_matters: ...
  paths: ["src/**/*.py"]
  severity: blocking
check:
  kind: builtin            # builtin | script | command
  module: no_token_in_logs

La regla nueva se agrega al .bec/rules.yaml del destino, preservando el contenido existente (comentarios y formato).

Los tres tipos de check

Cuando exportás una regla, su comando check se clasifica:

TipoCuándoQué viaja en el bundle
builtinbecwright run X [args]el nombre del módulo (y args)
scriptreferencia un archivo del repo, p.ej. .bec/checks/foo.pyel fuente del script, embebido
commandcualquier otra cosala cadena del comando crudo (se avisa al importar)

La forma antigua python3 -m becwright.checks.X se sigue reconociendo al importar, así que los bundles exportados por versiones previas siguen funcionando.

Un bundle script deja su código embebido en .bec/checks/ del repo destino, así un check propio viaja con su código. Un bundle builtin solo necesita el nombre, porque ese código viene con el paquete becwright.

El directorio becs/ del repositorio es un catálogo de BECs listas para usar, importables directamente desde su URL raw. Incluye BECs de Python y JavaScript/TypeScript.