Change packages
What a change package contains, how its states and verification labels work, and the rules that keep it safe in Git.
Watch this in the tutorial: A backend change, from Alice to Bob (7:33)A change package is a YAML file that describes one API change, so that the backend and the web team can agree on it without a handoff document. It lives in the same repository as the code, and it is written by Getman, not typed by hand.
What a change package contains
Each package holds the contract diff between the last published API and the current one, request and response examples, migration notes for consumers, evidence from real runs, and each consumer’s integration status.
Files in the workspace
getman/
contracts/openapi.yaml the current API contract (OpenAPI 3.1)
changes/GT-SHOP-001.yaml one file per change package
The reference GT-SHOP-001 is an example. The ID has the form GT-<KEY>-<NNN>. The key comes from the project name (letters and digits only, upper case, at most 12 characters), or from a changeKey setting. The number is the highest existing number for that key plus one, and at least three digits. Secrets are never written to these files.
Main fields
| Field | Meaning |
|---|---|
id |
The change reference, such as GT-SHOP-001. |
title, summary, migration |
What changed, and what consumers must do. The migration text is the part the web team reads first. |
state |
draft, published or withdrawn. New packages start as drafts. |
author |
kind (human or agent), name and optional tool. Names are informational. They do not grant permissions. |
endpoints |
Affected operations, such as GET /orders/{id}. |
contract.base and contract.head |
The revision (a SHA-256 hash of the normalized contract) before and after the change. |
contract.changes |
Structured diff entries, each with a kind, a location, before and after values, and a severity. |
severity |
The highest severity in the diff: breaking, potentially-breaking, non-breaking or unknown. |
evidence |
Entries from real runs. Only Getman writes them. |
integrations |
One entry per consumer, with status set to pending, in-progress, reported, verified or blocked. |
Change states
States move with the buttons in a change’s header in the desktop app, with getman change state, or with the MCP update_change tool. Withdrawn changes leave consumers’ inboxes.
| Transition | Desktop button | CLI |
|---|---|---|
| Draft to published | Publish | getman change state <ID> published |
| Published to withdrawn | Withdraw | getman change state <ID> withdrawn |
| Withdrawn to published | Publish again | getman change state <ID> published |
| Published or withdrawn to draft | Back to draft | getman change state <ID> draft |
Verification labels
The label shown next to a change is calculated from its evidence. It is never stored.
| Label | When it applies |
|---|---|
| Not tested | No evidence. |
| Documented | No evidence, but every endpoint has a description and an example. |
| Schema validated | The latest run matched the response schemas, and no tests are defined. |
| Tests passed | The latest run against the head contract passed all tests and schema checks. |
| Tests failed | The latest run has a failure. |
| Integration reported | A consumer set its status to reported. |
| Integration verified | A consumer set its status to verified, with a passing run of its own. |
Evidence recorded against an older contract revision is marked stale. The label still shows, with the stale flag.
Evidence
Each evidence entry records the time, the tool that ran it (desktop, CLI or MCP, with its version), the environment name and kind, the contract revision that was checked, the requests run, the test results, the schema checks and the totals. All text is redacted before it is written.
Evidence comes only from a real run. To create it, use Verify now in the desktop app, getman change verify, or the MCP verify_change tool. Failing runs are recorded too.
Git rules
- Getman uses your installed Git, with your own credentials and SSH keys. It never prompts for a password.
- Nothing is committed, pushed or pulled without an explicit action.
git pullruns with--ff-only. A diverged branch is reported, and Getman does not merge it.- When a file changed both locally and in the folder, it is listed as a conflict for you to resolve.
- A file that still contains conflict markers, or invalid YAML, is refused with its path and a hint.
- Two clones can create the same number. Getman shows the duplicate as a conflict. Renumbering is manual: change
id, rename the file to match, and commit.
Limits
- A change does not rewrite references to its old ID. Check
relatedfields, commit messages and other files after a renumber. - The author name is not read from Git configuration.
- Migration and summary text is plain text in the desktop app.
For the step-by-step handoff between backend and web, see the team workflow. For the commands, see the CLI reference, and for agent access, see the MCP server.