ProfileComposition
The effective ceiling AND the receipt of how it was reached (greenhouse decisions/0057). `forCall` composes a ceiling and returns it; for a long time that was all — the answer kept, the question thrown away. This carries both: the effective profile this call runs under, and one {@see AxisReduction} per axis that came down, each naming the producer that had the right to lower it. The effective ceiling is not a number; it is a list of reductions, each signed by its producer.
ProfileComposition::__construct()
public function __construct(Milpa\Command\Effect\EffectProfile $effective, array $reductions):Parameters
| Name | Type | Description |
|---|---|---|
| $effective | Milpa\Command\Effect\EffectProfile | |
| $reductions | list<AxisReduction> | one per axis lowered, in declaration order of the axes |
ProfileComposition::confinedByTrial()
public function confinedByTrial(): boolWhether a trial workspace produced this composition's mutation — the ONE fact the policy reads to know «this call is confined» (greenhouse decisions/0069). Read from the reductions, never from the effective profile alone: an operation that merely writes temp files is also Ephemeral, and it is not confined to anything.