Tus propias reglas
Declara en un solo manifiesto las verificaciones que le importan a tu taller, y Orchemax las corre donde corre las suyas.
Objetivo#
Escribir las reglas que son tuyas — no las que trae Orchemax — en
.orch/gates/user/manifest.json, y que se juzguen en los mismos puntos de
corte que los guards incorporados, dentro del mismo veredicto.
Antes de esto, .orch/gates/user/ era una carpeta que Orchemax nunca leía.
Una regla que escribieras vivía ahí como una nota y no la hacía cumplir nadie.
El manifiesto#
orch init siembra uno vacío:
{ "version": 1, "gates": [] }
Cada gate es una regla:
{
"version": 1,
"gates": [
{
"id": "no-todo",
"on": ["seal", "pre-commit"],
"files": ["**/*.go"],
"deny": "TODO",
"severity": "block",
"message": "termínalo o abre el ticket"
},
{
"id": "vet",
"on": ["seal"],
"files": ["**/*.go"],
"cmd": ["go", "vet", "./..."],
"timeout_s": 60,
"severity": "warn",
"message": "go vet se quejó"
}
]
}
| Campo | Qué significa |
|---|---|
id |
Único. Se reporta como user:<id>, así una regla del taller nunca se confunde con una de Orchemax |
on |
Dónde corre: seal, pre-commit, pre-push, ide-pre, ide-post |
files |
Globs; sirven **/*.go y **/dir/**. Omítelo para todos los archivos del cambio |
deny |
Regex de Go — cualquier coincidencia en un archivo que aplique reprueba el gate |
require |
Regex de Go — un archivo que aplique sin coincidencia reprueba el gate |
cmd |
argv, con los archivos que aplican añadidos al final. Exactamente uno de deny, require, cmd |
timeout_s |
Solo para cmd. Por defecto 10, máximo 120 |
severity |
block (por defecto) reprueba el veredicto; warn deja la nota y pasa |
message |
Lo que dice la nota cuando el gate falla |
Dónde corre cada gate#
on |
Punto de corte | Qué hace un block |
|---|---|---|
seal |
La verificación de cada worker despachado, sea cual sea su CLI | verify_report.guardrails: fail, con la nota en guardrail_notes |
pre-commit, pre-push |
orch guard hooks run, invocado por los hooks de git |
El commit o el push se detiene |
ide-pre |
orch guard ide-hook, en Write/Edit/MultiEdit |
La escritura se deniega y el agente recibe el mensaje |
ide-post |
Se acepta y se valida, todavía no se ejecuta | Nada |
En ide-pre el gate lee el cuerpo que está por escribirse, no el archivo en
disco. En el sellado y en el hook de git lee los archivos tal como están en el
árbol.
Qué puede y qué no puede ver un gate cmd#
Un gate cmd es un tercero corriendo dentro del árbol de procesos de un
worker, así que se le tiene corto:
- argv explícito, nunca un shell. Sin
SHELL, sinsh -c. Un worker en Windows que heredóSHELLde Git Bash llegó a evaluar cada wrapper de PowerShell con elevalde bash y mató en silencio todos sus hooks; ese camino no existe acá. - El cwd es la raíz del proyecto, y los archivos que aplican se añaden al argv.
- El entorno es una lista blanca:
PATH,HOME,USERPROFILE,TEMP,TMP,SystemRoot,ComSpec,PATHEXT, más tus propias variablesORCH_*. Se descarta todo lo que tengaKEY,TOKEN,SECREToPASSWORDen el nombre, así un gate nunca ve las credenciales de proveedor del worker. - Salir con 0 aprueba. Cualquier otro código reprueba, y los primeros 400 bytes de su salida quedan como la nota.
- Un timeout es un aviso, no un veredicto. Un gate que nunca respondió deja
warn — timed outy el trabajo sigue. - Máximo 50 archivos por gate — el mismo tope que usa el gate de duplicados. Pasado eso el reporte dice cuántos quedaron fuera en vez de fingir que los miró.
Revisar y probar en seco#
orch guard rules # lista los gates, valida el manifiesto
orch guard rules run --files a.go,b.go # los corre sobre una lista explícita
orch guard rules run --files a.go --on ide-pre
orch guard rules sale con 1 si el manifiesto es inválido y nombra la línea y
el id del gate. Un manifiesto que Orchemax no puede leer nunca bloquea el
trabajo: se reporta como nota y los guards por defecto siguen.
Verificar#
orch guard rules
orch guard rules run --files <un archivo que sepas que rompe una regla>
Instalar reglas desde un pack en vez de escribirlas a mano#
orch pack install <path|git-url> mezcla en este mismo manifiesto reglas ya
probadas por otro taller, etiquetadas source: <pack>@<version> para
distinguirlas de las que escribiste tú:
orch pack install https://github.com/<org>/<pack-repo>.git --ref main
orch pack list
orch pack update starter-rules # refresca archivos que nunca editaste a mano
orch pack remove starter-rules # los quita; lo que editaste se conserva
Una regla que edites después de instalarla nunca se sobrescribe ni se borra
en silencio — update y remove la reportan como "kept (edited)" en vez de
tocarla. Un pack también puede traer documentos de gate (instalados en
.orch/gates/user/<pack>-<nombre>.md) y skills (instaladas como archivos
editables bajo el directorio de skills de cada CLI, marcadas para que
Orchemax nunca las sobrescriba).
Relacionado#
hooks-and-guards.md— los guards que trae Orchemax y dónde están cableados.packs-audit-and-policy.md— instalar un pack, exportar la bitácora de auditoría y leer la política efectiva.../shared-code-law.md— las reglas que no te toca cambiar.