Versions
trigora deploy creates a Program version. The version records the artifact hash and engine pin. An Execution stores programVersionId and artifactHash when it starts.
Recovery uses the stored artifact. A later deploy does not rewrite an Execution that is already waiting. If a caller supplies a different artifact on resume, the host rejects it as a mismatch.
const versions = await trigora.listProgramVersions("approval");HTTP: GET /v1/programs/:id/versions.
Read Artifact pinning for why the hash is part of recovery, not just a label.