Divvent

For Divvent’s own team. It is generated from the operations document in our repository, which is the one to edit. If you use Divvent, the help centre is for you.

6c. The §2.1 round against staging (acceptance.yml)

Weekly (Mondays 02:30 UTC) and by hand from the Actions tab — Run workflow on acceptance. It is the only thing that drives STAGE2.md §2.1 steps 2 to 6 against the deployed system as a customer reaches it: a new owner invited, joined, enrolled and signed back in with a code; then the portal's own routes and the Releases screen's own buttons. About 45–50 minutes: two model calls and six tenant deploys. acceptance/live/round.ts is the account of what each step asserts.

**Its company is acceptance, never heatco**, in the test fleet's account. Heatco's production is what staging.yml's doctor --require reads on every push, and step 6 breaks production on purpose.

What it leaves standing, and why each week can follow the last:

Waiting on the runner. Every deploy is a request. The round runs no pass of its own: it dispatches deploys.yml while the request is queued (at most once every 15 minutes), and waits while that pass holds it — up to 40 minutes per request, which is two whole passes of four jobs (plan, a build leg per hash, collect, deploy; about eighteen minutes each). A step that runs out says which request, its target, its state and who held it. claimed by deploys.yml-… for 40 minutes is a runner that died with the claim; claims go stale at 20 minutes, so the next pass takes it back — re-run the workflow. The job's ceiling is 180 minutes.

When a round stopped part-way, the next one heals it — re-run, or wait for Monday. A revision is only ever written after step 3 has put production on the latest, so neither target is ever more than one revision behind: step 3 says "already runs … Nothing to deploy" where production is at the latest, and step 4 brings the trial to production's revision. That holds for a failure at any single point, and was worked through for each.

**What it cannot heal is acceptance moved by hand.** A revision approved or deployed outside the round can leave a target two revisions behind, and then a deploy fails in the runner's ledger (table "…" already exists — the runner planned from scratch, because the target is not at the revision before). There is no command that deploys a revision other than the latest, and a trial that has been deployed cannot be closed: divvent destroy leaves the control plane's row naming its revision, which is what closeTrial refuses on. Leave acceptance to the round.

It needs, in the staging environment: the secrets staging.yml's tenant steps already have, PREVIEW_ACCOUNT_ID and PREVIEW_DEPLOY_TOKEN, and the portal's Anthropic federation configured (step 2's no-credential names the missing setting).