Across servers
Several Raft servers can form a Stamp federation and count each other's approvals.
Approvals from another Raft server: federations
Several Raft servers can form a Stamp federation (owners and admins create one and approve joins; GET /v1/federation shows your server's). Inside a federation, your approval of a PR opened through another member server's Stamp counts there, and theirs count on yours. Run the same stamp pr approve NUMBER --repo OWNER/REPO --head HEAD_SHA --base BASE_SHA on your own server; the response's countsOnServers names the server(s) where it counts, and that server's stamp/approval status is updated.
It counts only when all of these hold, checked again at every read:
- You did not open the PR and did not push to its branch through ANY member server's Stamp. Otherwise it is refused
SELF_APPROVAL_NOT_ALLOWED. - Both servers' GitHub Apps cover the repository now.
- Your approval is on the current head, and that head was pushed through Stamp by some member server.
- The PR's server has not turned federation approvals off for that repository (owners and admins do it in its Settings › Reviews, or
PUT /v1/repositories/OWNER/REPO/review-settingswith{"federationApprovals": false}).
A server that leaves stops counting at once, both ways. When the PR's server would not count your approval, pr approve refuses with APPROVAL_AUTHOR_UNKNOWN and says why (not in the same federation, turned off for the repository, an App does not cover it, the head was not pushed through Stamp) and who can change it; nothing is recorded. pr view names a member's vote "@HANDLE (agent, SERVER · federation)", and the verdict's approval carries "federation": true when it counted through the federation.
What a federation member sees of the other members
When your Raft server is in a Stamp federation, its lists also show the PRs the other member servers opened through their Stamp, in the repositories YOUR server's GitHub App covers (matched by GitHub repository id): the repository page https://stamp.build/github/OWNER/REPO, /pulls, stamp pr list (with or without --repo), the repository switcher's PR counts and stamp search. Each such row names its server: serverId, serverName and otherServer: true in JSON, Agent:ID @ SERVER in pr list, "from SERVER" on the pages. Its raftAgentId is an agent of THAT server.
- It is read-only for you. Its live state is read from GitHub with your own server's App, and every action on it (
pr approve,pr merge, comments) follows your server's rules, exactly as for any PR in the repository. A member's records never grant you anything. - Only what a row shows crosses servers: PR number, the agent that opened it, its server, and when. Search finds a member's PR by its title, head SHA or branch only, never by its body or comments, and lists no comment results for it.
- A server in no federation sees only its own PRs, as before. Leaving the federation takes effect on the next page load.