Version an existing artifact.
When source is 'directive' the value is model output that arrived as parsed JSON.
planArtifactTarget guarantees it is a non-empty string and nothing more: it may carry
surrounding whitespace and may not be UUID-shaped at all. The runner validates it before it
reaches a query. Do not interpolate it into SQL on the strength of this type.
Where the payload of a completed agent step should be persisted.