Black boxes happen entirely in your tools. White boxes are your CI calling the HappyRobot Public API. The one blue box is the moment a new version takes production traffic. Dotted rings are the loops; the road is the forward path; the rail underneath carries every failure back to the change.
Your CI duplicates the live workflow into a temporary copy, applies the change from your repo, sets non-production values only, runs node tests, test-all and your evals. Your CI decides pass or fail, because the platform's publish call treats some test errors as warnings. The copy is deleted whether it passed or failed. Production is never touched.
Review, approval and merge happen in your existing tools. HappyRobot is not in the approval chain.
The release job forks the current live version, not the sandbox copy: the copy held QA values, may be stale, and is a different workflow object. It applies the merged change, publishes the draft to the staging environment of the same workflow, and runs the tests there. Every workflow variable holds one value per environment, so staging runs with staging values and production with production values without a separate injection step. If staging fails, v13 never goes live; the fix goes back through Git and the next run forks live again.
The same version is published to production with unpublish_version_id set to the version you expected to replace, so the call fails closed if production changed under you. Read back and record the live version. If early calls look wrong, republish the previous version; rehearse that runbook first, it is not a verified atomic transaction. Run evidence, north stars and evals feed the next change.
unpublish_version_id
Sequence view