Skip to content
docsv0.24.0

MakeHandler

Genera artefactos del framework —un controller, una entidad— siguiendo sus convenciones, y verifica de inmediato lo que escribió. Es el PRIMER átomo que muta, y por eso vale la pena decir qué se decidió con su consentimiento. ── POR QUÉ NO EXIGE FIRMA ────────────────────────────────────────────────────────────────────── Se declara `mutating: true` porque escribe archivos y mentir sobre eso sería lo peor que puede hacer una declaración. Pero NO `requiresConfirmation`, y la razón es que su daño ya está acotado por dos mecanismos más finos que una firma: - `WriteGuard` se niega a sobrescribir salvo que alguien pase `--force`. Ese permiso NOMBRA el archivo, que es más específico de lo que una firma sobre la llamada puede ser. - Un verify que falla borra lo recién creado. Una generación rota no deja basura en el árbol. Pedir firma para andamiar un controller convertiría la compuerta en trámite, y una compuerta que se pide siempre se aprueba sin leer. Se reserva para lo que no se puede deshacer. ── LO QUE SÍ CUIDA ───────────────────────────────────────────────────────────────────────────── `plugin` y `name` se interpolan directo en rutas del sistema de archivos, así que ambos tienen que casar `^[A-Za-z_][A-Za-z0-9_]*$`. Un `name` como `../../../tmp/x` jamás llega a los generadores. Esa guarda venía del comando y se conserva palabra por palabra: al volverse átomo la entrada deja de venir sólo de una terminal, así que importa más, no menos.

MakeHandler::__construct()

public function __construct(Milpa\DevTools\Support\RootResolver $roots = new RootResolver()):

TODOS los que el paquete implementa, no dos. Cableaba `controller` y `entity`. Los otros cuatro estaban completos y probados —`CrudGeneratorTest` y `ToolGeneratorTest` pasan de las quinientas líneas cada una— y no se alcanzaban desde ninguna superficie: ni terminal, ni HTTP, ni TUI, ni el agente. Ningún gate lo notaba, porque no faltaba código sino la línea que lo enchufa; y como nunca estuvieron proyectados, un inventario dorado de lo ofrecido tampoco los habría extrañado. Lo encontró alguien preguntándole al agente por un plugin nuevo y viendo que no tenía a dónde ir. El séptimo (`test`, el juez conductual) llegó luego, enchufado aquí mismo el día uno.

Parameters

Parameters of __construct()
NameTypeDescription
$rootsMilpa\DevTools\Support\RootResolver

MakeHandler::kinds()

public function kinds(): array

Los artefactos que este host sabe andamiar.

MakeHandler::handle()

public function handle(array $input): array

Andamia el artefacto y corre su verificación. `dry_run` planea sin escribir: devuelve los mismos archivos con acción `would-create`, que es la forma de preguntar «¿qué harías?» sin causarlo — y la que una superficie de agente debería usar antes de la de verdad. When the produced class passes its shape verify but a promised CONSEQUENCE is missing — a referenced enum with no file, a repository/controller/routes registration that landed as guidance instead of code — the run is `incomplete`: `ok` is `false`, an `incomplete` flag is set, and the `postconditions` report names what is missing. The written files are NOT rolled back in that case (they are valid, only unwired); rollback stays reserved for a shape-verify failure. See {@see \Milpa\DevTools\Make\PostconditionVerifier}.

Parameters

Parameters of handle()
NameTypeDescription
$inputarray<string, mixed>