# Contribute

> How to change the map: a row, a profile, a mandate or a correction, as a pull request against the data pack.

*Source: <https://what-can-it-do.games.sgit.ai/map/contribute/index.html> · site v0.8.0 · this file is generated from the same content
as the page, so the two cannot drift. Every page on this site has a `.md` twin; internal links
below point at them.*

---

[Play](../../index.md) / [The map](../../map/index.md) / Contribute

# Change the map

Everything on the map is generated from JSON in one folder of one repository. Change the JSON, open a pull request, and the pages change on the next build. There is no other way to edit them, on purpose — but there is a way to open that pull request without a GitHub account, below.

## Without a GitHub account: the map vault

The same map, drawn live from this pack inside an encrypted vault, and on every row — a grant row, a cell the profile does not list, a mandate line, a reduction, an entry above the ceiling — a form that asks what that row can answer and sends one sealed record over a write-only lane. A drain on this site turns each record into a pull request against `data/`, with your reasoning as the body and nobody named; the row then shows *proposals on this row: n open*.

*[A live vault surface here in the HTML page — the game running out of vault `mxhepww5`. In this markdown twin, [open it in the vault UI](https://dev.vault.sgraph.ai/#3e1009cc489f07e9b1ffa9ff08087a5ff23f60367451708860ecde9439128816%3Amxhepww5).]*

> The map vault sends **nothing** unless you press *Send* on a proposal — then one sealed record goes over a write-only lane, with no name and no identity attached. [How a proposal becomes a pull request](../../map/contribute/index.md).

[Open the map vault read-only in a new tab](https://dev.vault.sgraph.ai/#3e1009cc489f07e9b1ffa9ff08087a5ff23f60367451708860ecde9439128816%3Amxhepww5). Its read key is published on purpose; it cannot write. What it holds is the app and its build, not a copy of the pack.

## What is worth contributing, most valuable first

1. **A measurement that replaces a claim.** Most rows are *derived*. Run the probes on a real instance, attach the evidence file, change the row's tier. This is the single most useful thing anyone can do to this map.
2. **A profile that is missing.** A product you use, or a setup of one — a container, a corporate-managed desktop, confirmations off. One file under `data/profiles/`, named `<vendor>/<product>/<variant>.json`, listed in `index.json`. Label every row's tier honestly; a derived profile is welcome and says it is derived.
3. **A mandate you disagree with.** Every one under `data/mandates/` is a first draft. Change a row from *want* to *do not want*, add a note saying why, and that is an argument the site can show.
4. **A capability the set is missing.** Only if it is a new verb, object class or reach — a specific path or host is an instance of an existing one. New primitives need a probe.

## The files

| File | What it is | Who edits it |
|---|---|---|
| `data/primitives.json` | the capability vocabulary | rarely — a new verb, object or reach |
| `data/profiles/<vendor>/<product>/<variant>.json` | one product in one setup, tool by tool | anyone who runs that product |
| `data/profiles/index.json` | the manifest of profiles | add a line when you add a file |
| `data/reductions.json` | what narrows each capability, and what it costs | anyone with a better setting |
| `data/ceiling.json` | what nothing can do, and the control that stops it | anyone with a counter-example |
| `data/mandates/<id>.json` | what a reasonable person wanted, per setup | anyone who disagrees |
| `data/mesh/` | the graph the levels are derived from | compiled — edit the sources |
| `data/pack.json` | the manifest the game reads | generated by the build; do not edit |

## The shape of a profile row

```
{ "capability": "read.file.host",
  "tier": "derived",          // derived · documented · measured · observed
  "control": "the tool's own directory restriction and its confirmation prompt",
  "control_tier": "setting",  // none · expectation · setting · boundary
  "note": "outside the working tree only with the prompt, which the shell does not need" }
```

`tier` is how the row is known. `control_tier` is what stands on the path: *none*; an *expectation* somebody wrote down; a *setting* the agent's own account could change; a *boundary* enforced above it. The matrix is coloured by the second and the tooltip names the first.

## What the build checks

The release gate refuses a pull request whose data does not hold together: every capability id in every profile, reduction, mandate and ceiling row must exist in the primitives; every profile in the index must exist on disk; a profile's stated union must equal what its rows imply; a mandate cannot both want and not want the same capability. If it merges, the map is consistent.

## Where the data came from

The primitives, profiles, reductions, ceiling and mesh were built at [pki.sgit.ai](https://github.com/SGit-AI/SGit-AI__Website__PKI/tree/dev/probes) under CC BY 4.0 and vendored here on 6 September 2026 so that this site could be their home for contribution. The mandates were authored here. [Provenance](https://github.com/SGit-AI/SGit-AI__Website__Game__What-Can-It-Do/blob/dev/data/PROVENANCE.md).

[Open a pull request](https://github.com/SGit-AI/SGit-AI__Website__Game__What-Can-It-Do/pulls) · [the data folder](https://github.com/SGit-AI/SGit-AI__Website__Game__What-Can-It-Do/blob/dev/data/)

---

*[Site index for agents](../../llms.txt) · [HTML version](https://what-can-it-do.games.sgit.ai/map/contribute/index.html)*
