Mutates
What this operation can do AT WORST — the ceiling, declared by the operation about itself. It carries the vocabulary of {@see EffectProfile} unchanged, on purpose: that vocabulary is measured and this attribute is a SYNTAX for it, not a second opinion about it. What the attribute adds is where the declaration lives — next to the code that performs the effect, in the same place the human writes the intent and the agent reads it. A class carrying this is mutating. A class carrying {@see Reads} is not. A class carrying NEITHER does not become an operation at all — silence is not an answer here (greenhouse decisions/0212 §5).
Mutates::__construct()
public function __construct(Milpa\Command\Effect\Mutation $mutation = Milpa\Command\Effect\Mutation::Unknown, Milpa\Command\Effect\Externality $externality = Milpa\Command\Effect\Externality::Unknown, Milpa\Command\Effect\Reversibility $reversibility = Milpa\Command\Effect\Reversibility::Unknown, Milpa\Command\Effect\Authority $authority = Milpa\Command\Effect\Authority::Unknown, Milpa\Command\Effect\Subject $subject = Milpa\Command\Effect\Subject::Unknown, ?string $rollback = null, array $escalatesOn = [], array $descents = []):Parameters
| Name | Type | Description |
|---|---|---|
| $mutation | Milpa\Command\Effect\Mutation | |
| $externality | Milpa\Command\Effect\Externality | |
| $reversibility | Milpa\Command\Effect\Reversibility | |
| $authority | Milpa\Command\Effect\Authority | |
| $subject | Milpa\Command\Effect\Subject | |
| $rollback | ?string | |
| $escalatesOn | list<string> | Argument names whose value can RAISE this ceiling. |
| $descents | list<Descent> | Declared descents from the ceiling, where they are proven — `new Descent(...)` is a valid attribute argument, so a proven descent is written right here rather than reconstructed later. |
Mutates::profile()
public function profile(): Milpa\Command\Effect\EffectProfileThe same value object every consumer in the platform already reads.