Reference
System map fields
Updated
On this page
Every zof.yaml key the System map review shows, what Zof does with it, and which values it accepts. Also the words the screens use: where a value came from, the source badges, the changes that need a tick, and what the AI did.
To set up a map, see Set up your system map. For the ideas behind it, see How Zof understands your system.
The file
A system map is one zof.yaml document with up to four top-level keys:
| Key | What it holds | Accepted values |
|---|---|---|
version | The file format | 1 |
services | Each service's settings, by name | A mapping of service name to its keys (below). A name uses letters, digits, ., _ and -. |
endpoints | Which service an environment variable's address points to | A mapping of env var name to a service ID, for example PAYMENTS_URL: service:other-repo/billing |
agents | The bots that open pull requests, and the person accountable for each | A mapping of GitHub login to on_behalf_of: the accountable person's GitHub login |
When you check or accept, the System Graph refuses any other top-level key. A service the graph doesn't already know needs a path, or the graph refuses it.
Service keys
The review form shows Tier, Owner, Domains, Tags and Environments. The other keys are edited in the YAML view. Only the first four can come from an AI suggestion.
| Key | What Zof does with it | Accepted values | AI may suggest |
|---|---|---|---|
tier | How critical the service is: 0 is the most critical. Release policy rules apply by tier, and a change counts at the lowest tier it touches. An unknown tier is treated as tier 0, the strictest. | 0, 1, 2 or 3. Anything else, or no value, is unknown. On the review screen, any other value is a problem to fix before accepting. | Yes |
owner | The team that owns the service. When a rule needs an approval, Zof asks the owners the rule names, of the services a change touches, through Release approvers. The owners of the most critical services a change touches can also take over an agent's change by approving it (see Agents and accountable people). With no owner known, nobody can take over. | Non-empty text. @your-org/payments-team names a GitHub team. | Yes, up to 100 characters, and only a name that appears in a file the AI read and cited |
domains | Names that group services, kept by the System Graph with the service. Zof's decisions don't use them. | A list of names | Yes, up to 8, each starting with a lowercase letter, then lowercase letters, digits and -, up to 40 characters |
tags | Labels such as payments that release policy rules match on. No tags: line means the tags are unknown, and a rule that matches on a tag then applies to the service. tags: [] means the service has none. | Up to 16 tags, each starting with a lowercase letter, then lowercase letters, digits and -, up to 32 characters. One bad tag makes the whole list unknown. On the review screen, a bad tag is a problem to fix. | Yes, within the same limits |
environments | Where the service is deployed, such as production or staging. The System Graph keeps them with the service and shows them with a change's affected services. | Up to 16 names, each starting with a lowercase letter, then lowercase letters, digits and -, up to 32 characters. They're kept sorted, once each. One bad name makes the whole list unknown. | No |
path | The service's folder, to declare a service no manifest shows | A folder that exists in the repository at the commit the graph last read. Not allowed on a service the graph found from the repository's manifests, which give its folder. | No |
calls, reads, writes, depends_on | Links the code doesn't show | A list of names: a service in this repository, repo/name for another repository's service, or a full ID such as service:other-repo/billing | No |
The graph's own links show under Found by the graph on the review screen. They aren't written into the file, so a link the code stops showing doesn't live on in it.
Where a value came from
Under each value on the review form, and in the Origin column of Changes:
| Label | Meaning |
|---|---|
| Found by the graph | Reserved for a value the System Graph found in the code. Today it finds services and links, not values, so values show as In use or AI suggestion. |
| In use | The value is already in the map in use, or in a zof.yaml the graph read. Zof carries it forward unchanged. |
| AI suggestion | The AI suggested it. Its reason and the files it cited show below it. |
| Edited | A person changed it on this screen. It replaces the earlier origin and the AI's reason. |
Source badges
The System map column on the Configuration tab of the GitHub page says which map is in use. A map Zof couldn't read never shows as mapped.
| Badge | Meaning |
|---|---|
| From the repo file | The repository's own zof.yaml, on its default branch, is in use. No stored copy is. |
| Confirmed vN | Stored version N is in use, and this company accepted or adopted it. Shown in green. |
| Confirmed vN under a previous connection | Stored version N is in use, but this company didn't store it. No draft can be made until a company admin adopts or stops it. |
| Accepted as vN, applying… | Version N is stored, and the System Graph hasn't applied it yet. It isn't in use until it has. |
| Stop accepted, applying… | A stop is stored, and the System Graph hasn't applied it yet. The stored copy stays in use until it has. |
| Not mapped | Zof found no stored copy in use and no zof.yaml on the repository's default branch. |
| Couldn't check | Zof, the System Graph or GitHub didn't answer, or gave an answer Zof can't read. |
| Draft ready | Beside the source badge: a draft is open for review. |
Changes that lower protection
These changes make Zof less strict, or move authority. Each one is listed under Changes that lower protection. In draft review, the explained changes are grouped by service with before and after values; one informed confirmation acknowledges every row in that group. Takeovers, unfamiliar changes and changes explicitly flagged by the server retain individual checkboxes. Stopping a stored copy retains a checkbox per change. Zof still refuses the operation unless every required change is acknowledged:
- a higher tier number, such as 0 to 2, or a tier other than 0 on a service that had none (no tier counts as the strictest);
- a tag removed;
- tags set (even an empty list) on a service whose tags were unknown, because tag rules that applied to it may stop applying;
- a service removed;
- a
calls,reads,writesordepends_onlink removed; - an
owneradded, changed or removed, because an owner can approve and take over changes; - a
pathadded, changed or removed, because it moves files between services; - an
endpointsentry added, changed or removed, because it moves an env var's calls between services; - any change to
agents, because it changes who a bot acts for; - a key in the map in use that Zof can't keep, so it would be lost;
- a stored copy put in use where none was. Its row reads "Use a stored copy instead of the repo's own zof.yaml": from then on the repository's own
zof.yamlstops applying, until an admin stops using the stored copy. When the repository has nozof.yaml, as on a first map, the row reads "Keep this map in Zof, not in a zof.yaml file": nothing is replaced now, but azof.yamladded later doesn't apply until an admin stops using the stored copy.
Lowering a tier number, adding a link and changing domains need no tick. Adding a tag needs none when the service already had tags. A new service needs acknowledgement for each owner, path, tags list, or tier other than 0 it gets. Any edit clears the ticks, so check again after you edit. A row Zof still wants after you accept is marked "Still needs a tick".
The same rules judge Stop using the stored copy: Zof compares the stored copy with the repository's own zof.yaml, and an absent file means every value becomes unset.
AI status
The line under the status on the review screen says what the AI did for the draft:
| Status | The screen says |
|---|---|
| Off | "Basic draft: no AI suggestions were added. Review and fill any missing values before accepting." |
| Used | "AI suggestions included. Check each one and its reason before accepting." |
| Partial | "Some AI suggestions were retained, but drafting stopped before it finished. Review their reasons and cited files, and fill any remaining values by hand." |
| Unavailable | "Basic draft: AI suggestions unavailable (the model couldn't be reached); review and fill any missing values before accepting." |
| Timed out | "Basic draft: AI suggestions unavailable (the model took too long); review and fill any missing values before accepting." |
| Budget used up | "Basic draft: AI suggestions unavailable (this draft's AI budget ran out); review and fill any missing values before accepting." |
| Unreadable answer | "Basic draft: AI suggestions unavailable (the model's answer couldn't be read); review and fill any missing values before accepting." |
| Too large | "Basic draft: AI suggestions unavailable (this repo is too large for AI drafting); review and fill any missing values before accepting." |
| Interrupted | "Basic draft: AI suggestions unavailable (the draft was interrupted); review and fill any missing values before accepting." |
| Out of date | "Basic draft: AI suggestions unavailable (the AI run was out of date); review and fill any missing values before accepting." |
Whatever the status, the draft still carries what the graph found and the values in use. Zof runs the AI once per draft and never retries it, so to try again, generate a new draft.
Why a suggestion was dropped
Zof checks every AI suggestion before it reaches the draft. One that fails a check is left out, and the field keeps its earlier value, or stays empty. The dropped ones are listed under No supported suggestion:
| Reason | The screen says |
|---|---|
| Unknown service | "The suggestion named a service that isn't in this repo." |
| Two suggestions | "More than one suggestion was made for this field." |
| Already set | "The field already had a value, and this draft only fills empty ones." |
| Bad value | "The suggested value or its reason isn't allowed." |
| No citation | "The suggestion cited no file." |
| Too many citations | "The suggestion cited more than five files, or one file twice." |
| File not read | "The suggestion cited a file that wasn't read." |
| Owner not found | "The suggested owner doesn't appear in any file it cited." |