The controller's input model. Extends ModelData with the one
field the matcher always stamps when relevant — subcommand —
so controllers can switch on it without a per-call cast.
Concrete controllers narrow further by declaring their own field
shape (interface DropModel extends CommandModel { targets: Stuff[] }).
Verb / commandText / executionId / commandId / the matched
CommandDefinition live on CommandContext; the model carries
field data only.
Stamped by the matcher when the active YAML declares
subcommands: and the input named one. Absent for flat verbs
(no subcommands: block) and for subcommanded verbs invoked
without a subcommand (the controller decides what that means).
The controller's input model. Extends
ModelDatawith the one field the matcher always stamps when relevant —subcommand— so controllers can switch on it without a per-call cast.Concrete controllers narrow further by declaring their own field shape (
interface DropModel extends CommandModel { targets: Stuff[] }).Verb / commandText / executionId / commandId / the matched
CommandDefinitionlive onCommandContext; the model carries field data only.