From 208125ecde34cd80579cbcc20647f9733c6c8573 Mon Sep 17 00:00:00 2001 From: Rodrigo Vicente Date: Wed, 2 Sep 2026 16:06:19 -0600 Subject: [PATCH] feat: implement declares it creates its named target (createsNamedTarget) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D-05 of greenhouse decisions/0187. `implement` materialises the class its plan implies — WHICH class realises the criterion is the model's interpretive domain, not a human's decision. It now declares `createsNamedTarget`, so a non-grave build no longer stops to ask "the request does not name TareaService" (the measured 3.46M-token defect). `edit` and `make` keep the flag false: they select or scaffold against existing structure, so they still name their target, and any grave op still asks regardless. Requires milpa/command ^0.22. --- src/Operations/DevToolsOperations.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Operations/DevToolsOperations.php b/src/Operations/DevToolsOperations.php index d0c2389..792ad98 100644 --- a/src/Operations/DevToolsOperations.php +++ b/src/Operations/DevToolsOperations.php @@ -231,9 +231,15 @@ public function operations(): array 'required' => ['plugin', 'class'], ], mutating: true, - // The target is named by the human (ADR-0044), and here the target is THE CLASS: a - // request that does not name it is exactly the one that should not be filling it. + // The target is the CLASS. ADR-0044 asked the human to name it; greenhouse + // decisions/0187 (D-05) refines that: implement MATERIALISES a component the plan + // implies — WHICH class realises the criterion is the model's interpretive domain, not + // a human's decision — so it declares `createsNamedTarget`. A reversible WriteAsUser + // build no longer stops to ask «you did not name TareaService»; a grave op still would + // (the gate keeps the intent question for the NEVER tier), and selecting an EXISTING + // target — `edit` below — keeps the flag false and keeps asking. namedTarget: 'class', + createsNamedTarget: true, ), new Operation( name: 'edit',