- Merged. The reviewed commit landed on the target branch.
- Built and published. CI built the artifacts for that commit, such as container images, and pushed them.
- Reported deployed. A deploy job says it applied those artifacts to an environment.
- Observed running. Something independent of the deploy job saw the workload running.
Start with a request like this
Change request 42 in the payments project was approved. If it’s still mergeable at the head that was reviewed, tell me what merging needs and wait for my go-ahead. After it merges, follow the deploy to staging and tell me what you can and can’t confirm about what is running there.
Tools
On the managed ReasonOS MCP:check_merge: whether the request merges cleanly, its base and head commits, and what branch protection still requires.merge_change_request: merges the request. Passcheck_merge’shead_shaandbase_shaasexpected_head_shaandexpected_base_sha.merge_stackmerges a stack bottom-up through the same checks.ci_status,get_ci_run,get_ci_run_log: the runs for a commit and how their jobs ended.start_ci_run: runs a workflow by hand on a branch. Only workflows with amanualtrigger match. See CI triggers.list_deployment_reports: what deploy jobs reported applying, per environment and commit. Each report is that job’s claim and is always marked not verified.list_runtime_observations: what registered in-cluster observers saw running.issue_evidence: the evidence linked to an issue, including any deployment reports that match its commits exactly.
Before you start
Find out how this project ships. Read its CI configuration and deploy targets (see Kubernetes and Containers), and the project’s own release notes or runbook if it has one. Answer these:- Which workflow builds and pushes artifacts, and which deploys them? On which branches and triggers do they run?
- Which environment does a deploy run in? An environment comes from the ref’s branch pattern, not from anything the assistant chooses at run time.
- Does the deploy need migrations, configuration or secrets first? Secrets marked protected refs only are given only to runs on the default branch.
- What is the rollback, and who may run it?
- Does any observer report on the target environment?
The workflow
- Confirm the head that was reviewed. Run
check_mergeand compare itshead_shawith the commit that was approved. If the head moved, the review and checks were for an older commit. Stop and say so; see Review a change. - List what still blocks the merge.
check_mergenames unmet rules: missing approvals, unresolved threads, required checks that failed or haven’t run at this head. A check that hasn’t run isn’t a pass. - Find out what the merge will set off. A merge is a push to the target branch, and the project’s workflows may build, publish images or deploy on that push. Read which workflows trigger on a push to the target and what their jobs do. Tell the person everything the merge will start.
- Ask before merging. Merging is the person’s decision, and so is
everything it sets off. Merge only when the person has approved both the
merge and the publication or deployment it causes, or when those triggers
are verifiably held off first. Then call
merge_change_requestwith both expected commits and record the merged commit it returns. Approval to merge alone is never approval to deploy. - Follow the build. Call
ci_statuswith the merged commit asshaand the target branch asref, waiting withwait_secondsif you need to. Report each required job as passed, failed, still running or not run. Note the artifacts the build pushed and their digests, when the log or a report names them. - Follow the deploy. If the deploy runs on its own, find its run. If the
project deploys by hand and the person asks you to, run that workflow with
start_ci_runand arequest_keyyou choose. Then readlist_deployment_reportswith the environment and the full merged commit. - Look for independent evidence. Read
list_runtime_observationsand use the sources whoseenvironmentis the target. Check each source’s state and freshness before relying on it. Compare the images the observer saw with the digests the build pushed. Report the rollout state exactly as the observer gives it, for example complete, progressing, mixed or unknown. - Report the four facts separately. Say what was merged, built, reported deployed and observed running, with the exact commit, digests, run numbers and times. Name each one you couldn’t confirm.
What each piece of evidence proves
- A merge proves the commit is on the target branch, nothing more.
- A passing CI run proves its jobs passed for that commit. A pass at an earlier commit doesn’t count for a later one.
- A deployment report proves a deploy job said it applied those artifacts. ReasonOS ties its environment, commit and run to the job that filed it, so the job can’t claim another commit. ReasonOS never checks the report against what is running, so it is always shown as not verified.
- A runtime observation is what a registered observer saw: the Deployment’s rollout state and the image IDs its Pods report. Nothing yet links a running image to a source commit, so every observation’s provenance is unknown. Matching digests is your comparison, not ReasonOS’s verification. Say so.
- A tag, a release note or a message that a version is live proves nothing about what is running.
Approval points
Reading merge checks, runs, reports and observations changes nothing. Ask the person before you:- merge, or merge a stack, including whatever builds, publications or deploys that merge triggers;
- start a deploy workflow by hand, or retry one;
- run a migration, change configuration or secrets, or roll back.
When things go wrong
- The head or base moved.
merge_change_requestrefuses the merge. Readcheck_mergeagain and go back to step 1. Don’t drop the expected commits to get past it. - A required check hasn’t run, or failed. The merge is blocked. Report which check is missing or failed at this head. Don’t start unrelated runs to turn things green.
- The merge outcome is uncertain. If ReasonOS says it couldn’t confirm whether the merge landed, read the change request and target branch before doing anything else. If it says the merge landed but couldn’t be recorded, merging again finishes the record without merging twice. See Recover and resume.
- A run started by hand does nothing. If no workflow has a
manualtrigger, the run ends in error and says so. Report that; don’t edit the workflow to make it run unless the person asks. - A start’s answer is lost. Send
start_ci_runagain with the samerequest_key: it answers the first attempt’s event and starts nothing new. A new key starts a new run. - No deployment report. Either the deploy hasn’t run, it ran somewhere that doesn’t file reports, or it failed before reporting. Read the run’s log instead of assuming any of these.
- No observer, or a stale one. Say there is no independent evidence of what is running. The person may check the environment directly.
- A partial or mixed rollout. Report it as partial. Name the images seen and the state, and leave the next step to the person.
- Rollback. Treat a rollback as another deploy, of a known earlier commit or artifact. It needs the same approval and the same evidence afterwards.
Limits today
- ReasonOS has no release, promote or rollback command. Deploying is running the project’s own deploy targets, usually from a CI workflow.
- CI has no approval gate for deploy jobs. The only built-in guard is that protected refs only secrets go to runs on the default branch. Approval comes from the person, at the points above.
- Deploy jobs file reports themselves, through the CI runner’s job API. The report format isn’t a published customer contract yet. A project without a reporting step has no deployment reports.
- Observers are registered by a project admin in project settings, signed in to ReasonOS. An assistant’s access token can’t register one. Installing an observer in your cluster isn’t covered here yet.
- No record links a running image to the commit it was built from, so ReasonOS can’t yet state which commit is running.
- This page describes the current tools. A hosted deployment may run an earlier build: use the tools your connection actually offers.