diff --git a/id/01a13c3b-bcac-71ee-ac2f-b1a009c4621b/index.html b/id/01a13c3b-bcac-71ee-ac2f-b1a009c4621b/index.html new file mode 100644 index 0000000..e6793f1 --- /dev/null +++ b/id/01a13c3b-bcac-71ee-ac2f-b1a009c4621b/index.html @@ -0,0 +1,13 @@ + + + + + +A secret is refused at the push + + + + +

Go on to A secret is refused at the push.

+ + diff --git a/id/01a13c3b-bcac-733d-bcdd-46851e86a21a/index.html b/id/01a13c3b-bcac-733d-bcdd-46851e86a21a/index.html new file mode 100644 index 0000000..cde5336 --- /dev/null +++ b/id/01a13c3b-bcac-733d-bcdd-46851e86a21a/index.html @@ -0,0 +1,13 @@ + + + + + +A registry entry waits for a release tag and the Owner + + + + +

Go on to A registry entry waits for a release tag and the Owner.

+ + diff --git a/id/01a13c3b-bcac-73b9-a9e0-3bc936d5d27c/index.html b/id/01a13c3b-bcac-73b9-a9e0-3bc936d5d27c/index.html new file mode 100644 index 0000000..927dd4a --- /dev/null +++ b/id/01a13c3b-bcac-73b9-a9e0-3bc936d5d27c/index.html @@ -0,0 +1,13 @@ + + + + + +A secret is never written into a repository + + + + +

Go on to A secret is never written into a repository.

+ + diff --git a/id/01a13c3b-bcac-759f-a36d-6c5debdd029d/index.html b/id/01a13c3b-bcac-759f-a36d-6c5debdd029d/index.html new file mode 100644 index 0000000..63cee3b --- /dev/null +++ b/id/01a13c3b-bcac-759f-a36d-6c5debdd029d/index.html @@ -0,0 +1,13 @@ + + + + + +An id, a decision and a label are held as they were + + + + +

Go on to An id, a decision and a label are held as they were.

+ + diff --git a/id/01a13c3b-bcac-773e-b292-07d708e86454/index.html b/id/01a13c3b-bcac-773e-b292-07d708e86454/index.html new file mode 100644 index 0000000..0a18042 --- /dev/null +++ b/id/01a13c3b-bcac-773e-b292-07d708e86454/index.html @@ -0,0 +1,13 @@ + + + + + +A release tag stays where the Owner put it + + + + +

Go on to A release tag stays where the Owner put it.

+ + diff --git a/id/01a13c3b-bcac-77ab-9a88-db0b9df63874/index.html b/id/01a13c3b-bcac-77ab-9a88-db0b9df63874/index.html new file mode 100644 index 0000000..4ad2863 --- /dev/null +++ b/id/01a13c3b-bcac-77ab-9a88-db0b9df63874/index.html @@ -0,0 +1,13 @@ + + + + + +What is cited from outside the model is not rewritten + + + + +

Go on to What is cited from outside the model is not rewritten.

+ + diff --git a/id/01a13c3b-bcac-78ef-92ca-b6eef73f2769/index.html b/id/01a13c3b-bcac-78ef-92ca-b6eef73f2769/index.html new file mode 100644 index 0000000..fbe2df6 --- /dev/null +++ b/id/01a13c3b-bcac-78ef-92ca-b6eef73f2769/index.html @@ -0,0 +1,13 @@ + + + + + +An agent's hook refuses removing a worktree that holds a plan + + + + +

Go on to An agent's hook refuses removing a worktree that holds a plan.

+ + diff --git a/id/01a13c3b-bcac-7c67-972c-d2b6671fd3ac/index.html b/id/01a13c3b-bcac-7c67-972c-d2b6671fd3ac/index.html new file mode 100644 index 0000000..c77eeee --- /dev/null +++ b/id/01a13c3b-bcac-7c67-972c-d2b6671fd3ac/index.html @@ -0,0 +1,13 @@ + + + + + +A deployed server is asked which commit it serves + + + + +

Go on to A deployed server is asked which commit it serves.

+ + diff --git a/id/01a13c3b-bcac-7c87-887e-58290cbffaef/index.html b/id/01a13c3b-bcac-7c87-887e-58290cbffaef/index.html new file mode 100644 index 0000000..edede7a --- /dev/null +++ b/id/01a13c3b-bcac-7c87-887e-58290cbffaef/index.html @@ -0,0 +1,13 @@ + + + + + +A worktree is removed only once its plan is done + + + + +

Go on to A worktree is removed only once its plan is done.

+ + diff --git a/id/01a13c3b-bcac-7df7-9a12-e973d8625df1/index.html b/id/01a13c3b-bcac-7df7-9a12-e973d8625df1/index.html new file mode 100644 index 0000000..78e5535 --- /dev/null +++ b/id/01a13c3b-bcac-7df7-9a12-e973d8625df1/index.html @@ -0,0 +1,13 @@ + + + + + +Only the Owner's account changes main + + + + +

Go on to Only the Owner's account changes main.

+ + diff --git a/id/01a13d68-db37-70a7-a505-5713fdca4f22/index.html b/id/01a13d68-db37-70a7-a505-5713fdca4f22/index.html new file mode 100644 index 0000000..16df312 --- /dev/null +++ b/id/01a13d68-db37-70a7-a505-5713fdca4f22/index.html @@ -0,0 +1,13 @@ + + + + + +A guest's data in a request is taken out of it + + + + +

Go on to A guest's data in a request is taken out of it.

+ + diff --git a/id/01a13d68-db37-75d3-94ab-1955459a0828/index.html b/id/01a13d68-db37-75d3-94ab-1955459a0828/index.html new file mode 100644 index 0000000..765c19b --- /dev/null +++ b/id/01a13d68-db37-75d3-94ab-1955459a0828/index.html @@ -0,0 +1,13 @@ + + + + + +A family resync refuses to start beside another + + + + +

Go on to A family resync refuses to start beside another.

+ + diff --git a/id/01a13d68-db37-7841-a30e-fa297747437e/index.html b/id/01a13d68-db37-7841-a30e-fa297747437e/index.html new file mode 100644 index 0000000..35327ee --- /dev/null +++ b/id/01a13d68-db37-7841-a30e-fa297747437e/index.html @@ -0,0 +1,13 @@ + + + + + +The Implementer reads the merge before deleting the branch + + + + +

Go on to The Implementer reads the merge before deleting the branch.

+ + diff --git a/id/01a13d68-db37-786e-b64d-1fe60ac2adf0/index.html b/id/01a13d68-db37-786e-b64d-1fe60ac2adf0/index.html new file mode 100644 index 0000000..56ed9c0 --- /dev/null +++ b/id/01a13d68-db37-786e-b64d-1fe60ac2adf0/index.html @@ -0,0 +1,13 @@ + + + + + +A message from another session carries no word of the Owner's + + + + +

Go on to A message from another session carries no word of the Owner's.

+ + diff --git a/id/01a13d68-db37-797f-86b0-67aecc352fe4/index.html b/id/01a13d68-db37-797f-86b0-67aecc352fe4/index.html new file mode 100644 index 0000000..3993335 --- /dev/null +++ b/id/01a13d68-db37-797f-86b0-67aecc352fe4/index.html @@ -0,0 +1,13 @@ + + + + + +A request is asked for its gap and never its hotel + + + + +

Go on to A request is asked for its gap and never its hotel.

+ + diff --git a/id/01a13d68-db37-7f46-b1e4-64a481a608d3/index.html b/id/01a13d68-db37-7f46-b1e4-64a481a608d3/index.html new file mode 100644 index 0000000..b5b5007 --- /dev/null +++ b/id/01a13d68-db37-7f46-b1e4-64a481a608d3/index.html @@ -0,0 +1,13 @@ + + + + + +A chat answer's claims are read back against the model + + + + +

Go on to A chat answer's claims are read back against the model.

+ + diff --git a/model.json b/model.json index eb69839..1de3a74 100644 --- a/model.json +++ b/model.json @@ -1,5 +1,5 @@ { - "commit": "d2efc960525abb769ca51041ad29d32bf51c0bc3", + "commit": "bd1aa8cfb1bb651c57e74f45862f9b42abd28e0d", "core": "0.69.0", "root": "GuestGraph", "rootId": "01a0d2e2-f788-788d-ac26-56e9ef94fdd2", @@ -1451,25 +1451,24 @@ "path": "model/concepts/timeline.md" }, { - "id": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "address": "controls/a-reviewer-reads-the-output-not-the-report", + "id": "01a13d68-db37-7f46-b1e4-64a481a608d3", + "address": "controls/a-chat-answer-s-claims-are-read-back-against-the-model", "type": "control", - "name": "A reviewer reads the output, not the report", - "tagline": "Each task's change is reviewed against its diff and the checks' output, and the implementer's report is read as a claim to verify.", + "name": "A chat answer's claims are read back against the model", + "tagline": "Each claim of an answer the chat gives on guestgraph.io is read back against the tool answers it rests on, and the chat marks one they do not carry before the visitor takes it for what the model says.", "fields": { - "id": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "id": "01a13d68-db37-7f46-b1e4-64a481a608d3", "source": "Local", "kind": "detective", - "mode": "manual", + "mode": "automated", "enforces": [ - "A check counts only when its output was seen" - ], - "performed-by": "Reviewer" + "Nothing claims what the model does not hold" + ] }, "sections": [ { "heading": "How it is carried out", - "text": "The Reviewer, after each task in Implement and once over the whole branch at the start of Integrate: it reads the diff and the output of the checks the task ran, verifies each claim of the report against them, and names a gap as a finding; a check whose output it cannot see does not count as passed.", + "text": "The chat server behind guestgraph.io, on every answer once it is written: it sends each claim, with the tool answers the chat's model was given, to TypeSafe's Jev, which returns a verdict and its probability and writes no text, and the widget marks a claim whose verdict is that the evidence does not carry it, above the threshold this deployment's configuration sets. Only an answer written in English is marked; a German one is checked and its verdicts kept until German has a threshold of its own. The check changes no word of the answer, and a check that cannot run, or does not finish within its budget, marks nothing. It holds the chat's answers and nothing else: a specification or a page someone writes is held to the rule by whoever writes it.", "tables": [] }, { @@ -1484,20 +1483,10 @@ "Owner" ], "rows": [ - [ - "seat", - "Reviewer", - "" - ], - [ - "phase", - "Implement", - "Delivery" - ], [ "phase", - "Integrate", - "Delivery" + "Answer", + "Answering" ] ] } @@ -1510,20 +1499,10 @@ "Owner" ], "rows": [ - [ - "seat", - "Reviewer", - "" - ], - [ - "phase", - "Implement", - "Delivery" - ], [ "phase", - "Integrate", - "Delivery" + "Answer", + "Answering" ] ] } @@ -1540,8 +1519,12 @@ ], "rows": [ [ - "Rulebook, superpowers", - "https://github.com/obra/superpowers/blob/main/skills/subagent-driven-development/SKILL.md" + "The claim check", + "https://github.com/companygraph/chat-server/blob/main/lib/verdict.mjs" + ], + [ + "This deployment's configuration", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/chat/chat.json" ] ] } @@ -1554,35 +1537,39 @@ ], "rows": [ [ - "Rulebook, superpowers", - "https://github.com/obra/superpowers/blob/main/skills/subagent-driven-development/SKILL.md" + "The claim check", + "https://github.com/companygraph/chat-server/blob/main/lib/verdict.mjs" + ], + [ + "This deployment's configuration", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/chat/chat.json" ] ] } } ], "owner": null, - "path": "model/controls/a-reviewer-reads-the-output-not-the-report.md" + "path": "model/controls/a-chat-answer-s-claims-are-read-back-against-the-model.md" }, { - "id": "01a0ffcb-f64d-7b19-a126-b386e59263cc", - "address": "controls/a-vendored-copy-is-held-to-the-release-it-names", + "id": "01a13c3b-bcac-7c67-972c-d2b6671fd3ac", + "address": "controls/a-deployed-server-is-asked-which-commit-it-serves", "type": "control", - "name": "A vendored copy is held to the release it names", - "tagline": "A pull request fails where what a repository vendors differs from the release it pins, so a change reaches another repository only once it is released.", + "name": "A deployed server is asked which commit it serves", + "tagline": "After every deploy of mcp.guestgraph.io the run asks the live server which commit of the model it answers at, and fails unless it is the commit the repository pins.", "fields": { - "id": "01a0ffcb-f64d-7b19-a126-b386e59263cc", + "id": "01a13c3b-bcac-7c67-972c-d2b6671fd3ac", "source": "Local", "kind": "detective", "mode": "automated", "enforces": [ - "A change to what another repository vendors is released" + "A state is read again before it is relied on" ] }, "sections": [ { "heading": "How it is carried out", - "text": "The conventions job, required on the default branch of each of our repositories, on every pull request: `conventions-sync check` compares the vendored `conventions/` with the release `conventions.json` names and fails for each file that differs. In the engine and the Apaleo connector, the required `service-conventions` job runs `service-conventions-sync check`, which fails where the vendored service conventions differ from the release they pin. In our model, the required instance check refuses a checker other than the release `.companygraph/manifest.json` names and fails where a vendored core file differs from the hash the manifest recorded when that release was taken. Nothing checks what a release's notes ask of a consumer.", + "text": "The deploy job that mcp.guestgraph.io's workflow calls from the MCP server, on every push to main, once Terraform has applied: it calls the live server's own `list_types` tool, reads the commit every answer names under `model`, and fails unless it is the commit `source.json` pins. A deploy that applied cleanly but left an earlier revision serving, or one built from another commit, then turns the run red instead of reading as done.", "tables": [] }, { @@ -1601,11 +1588,6 @@ "phase", "Integrate", "Delivery" - ], - [ - "phase", - "Integrate", - "Contribution" ] ] } @@ -1622,11 +1604,6 @@ "phase", "Integrate", "Delivery" - ], - [ - "phase", - "Integrate", - "Contribution" ] ] } @@ -1643,24 +1620,12 @@ ], "rows": [ [ - "The conventions job", - "https://github.com/robertblust/conventions/blob/main/.github/workflows/check.yml" - ], - [ - "The conventions copy check", - "https://github.com/robertblust/conventions/blob/main/conventions/conventions-sync" - ], - [ - "The engine's CI", - "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" - ], - [ - "The service conventions copy check", - "https://github.com/guestgraph/service-conventions/blob/main/spring/service-conventions-sync" + "The deploy job and its check", + "https://github.com/companygraph/mcp-server/blob/main/.github/workflows/deploy-google.yml" ], [ - "The instance check", - "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + "The workflow that calls it", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/.github/workflows/deploy.yml" ] ] } @@ -1673,51 +1638,39 @@ ], "rows": [ [ - "The conventions job", - "https://github.com/robertblust/conventions/blob/main/.github/workflows/check.yml" - ], - [ - "The conventions copy check", - "https://github.com/robertblust/conventions/blob/main/conventions/conventions-sync" - ], - [ - "The engine's CI", - "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" - ], - [ - "The service conventions copy check", - "https://github.com/guestgraph/service-conventions/blob/main/spring/service-conventions-sync" + "The deploy job and its check", + "https://github.com/companygraph/mcp-server/blob/main/.github/workflows/deploy-google.yml" ], [ - "The instance check", - "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + "The workflow that calls it", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/.github/workflows/deploy.yml" ] ] } } ], "owner": null, - "path": "model/controls/a-vendored-copy-is-held-to-the-release-it-names.md" + "path": "model/controls/a-deployed-server-is-asked-which-commit-it-serves.md" }, { - "id": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "address": "controls/an-agent-s-permissions-refuse-a-merge-it-was-not-given", + "id": "01a13d68-db37-75d3-94ab-1955459a0828", + "address": "controls/a-family-resync-refuses-to-start-beside-another", "type": "control", - "name": "An agent's permissions refuse a merge it was not given", - "tagline": "The permission layer an agent runs under refuses a merge the agent attempts without the Owner's word for it in that conversation.", + "name": "A family resync refuses to start beside another", + "tagline": "A resync takes a lock before it moves anything, and refuses to start while another run holds it or while a resync pull request it did not open is still open.", "fields": { - "id": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "id": "01a13d68-db37-75d3-94ab-1955459a0828", "source": "Local", "kind": "preventive", "mode": "automated", "enforces": [ - "The Owner's word merges" + "One session holds a piece of shared work" ] }, "sections": [ { "heading": "How it is carried out", - "text": "Claude Code's permission layer, before the agent's command runs: it judges the action against the conversation, and a merge without a review it can see is refused, so the agent stops and the merge waits for the Owner.", + "text": "The family resync in robertblust/conventions, each time a session starts it: it takes a lock in the clone's own git directory, which every worktree of that clone shares, and refuses while the run that holds it is alive; it then asks GitHub for the open pull requests of every member whose branch begins with `resync-`, and refuses where one is open that no run in this checkout opened or took on that day, unless it is started with `--force`. It holds a resync and nothing else: a release, a re-pin by hand or a change across repositories is claimed by the session itself, which reads the open pull requests, branches and tags and asks the running sessions before it starts, and nothing refuses a session that skips that.", "tables": [] }, { @@ -1732,21 +1685,6 @@ "Owner" ], "rows": [ - [ - "seat", - "Controller", - "" - ], - [ - "seat", - "Implementer", - "" - ], - [ - "seat", - "Surveyor", - "" - ], [ "phase", "Integrate", @@ -1763,21 +1701,6 @@ "Owner" ], "rows": [ - [ - "seat", - "Controller", - "" - ], - [ - "seat", - "Implementer", - "" - ], - [ - "seat", - "Surveyor", - "" - ], [ "phase", "Integrate", @@ -1798,8 +1721,8 @@ ], "rows": [ [ - "Claude Code permission modes", - "https://code.claude.com/docs/en/permission-modes" + "The family resync", + "https://github.com/robertblust/conventions/blob/main/family/resync.mjs" ] ] } @@ -1812,35 +1735,36 @@ ], "rows": [ [ - "Claude Code permission modes", - "https://code.claude.com/docs/en/permission-modes" + "The family resync", + "https://github.com/robertblust/conventions/blob/main/family/resync.mjs" ] ] } } ], "owner": null, - "path": "model/controls/an-agent-s-permissions-refuse-a-merge-it-was-not-given.md" + "path": "model/controls/a-family-resync-refuses-to-start-beside-another.md" }, { - "id": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", - "address": "controls/german-left-behind-is-found", + "id": "01a13d68-db37-70a7-a505-5713fdca4f22", + "address": "controls/a-guest-s-data-in-a-request-is-taken-out-of-it", "type": "control", - "name": "German left behind is found", - "tagline": "A pull request to guestgraph.io fails where an English edit left its German unchanged, unless a commit says the German is right on purpose.", + "name": "A guest's data in a request is taken out of it", + "tagline": "The Owner reads every feature request for a guest's data before restating it, and takes out any it finds, from the issue and from its edit history.", "fields": { - "id": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "id": "01a13d68-db37-70a7-a505-5713fdca4f22", "source": "Local", "kind": "detective", - "mode": "automated", + "mode": "manual", "enforces": [ - "German follows reviewed English" - ] + "A feature request carries no guest's data" + ], + "performed-by": "Owner" }, "sections": [ { "heading": "How it is carried out", - "text": "The site's CI, on every pull request, in the `verify` job the ruleset requires: `design german stale` compares the change with its base and fails for each element whose English moved while its German did not; a commit that names the element in a `German-unchanged:` trailer releases it.", + "text": "The Owner, in Understand, on every feature request: before restating it, it reads the request and every comment on it for a guest's data, a name, an address, a booking or anything else that points at a guest; where it finds any, it edits it out, deletes the content of that edit from the issue's edit history, which leaves only who edited and when, and asks for the gap again without it. It never asks for a guest's data to illustrate a request. An issue is public from the moment it is opened, so what was read before the Owner took it out stays read; the control shortens that time and cannot undo it.", "tables": [] }, { @@ -1857,8 +1781,8 @@ "rows": [ [ "phase", - "Integrate", - "Delivery" + "Understand", + "Feature request" ] ] } @@ -1873,8 +1797,8 @@ "rows": [ [ "phase", - "Integrate", - "Delivery" + "Understand", + "Feature request" ] ] } @@ -1891,12 +1815,8 @@ ], "rows": [ [ - "guestgraph.io's CI", - "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" - ], - [ - "The German stale check", - "https://github.com/robertblust/design#readme" + "GitHub's edit history and how to delete from it", + "https://docs.github.com/en/communities/moderating-comments-and-conversations/tracking-changes-in-a-comment" ] ] } @@ -1909,41 +1829,35 @@ ], "rows": [ [ - "guestgraph.io's CI", - "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" - ], - [ - "The German stale check", - "https://github.com/robertblust/design#readme" + "GitHub's edit history and how to delete from it", + "https://docs.github.com/en/communities/moderating-comments-and-conversations/tracking-changes-in-a-comment" ] ] } } ], "owner": null, - "path": "model/controls/german-left-behind-is-found.md" + "path": "model/controls/a-guest-s-data-in-a-request-is-taken-out-of-it.md" }, { - "id": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "address": "controls/main-takes-a-change-only-through-a-green-current-pull-request", + "id": "01a13d68-db37-786e-b64d-1fe60ac2adf0", + "address": "controls/a-message-from-another-session-carries-no-word-of-the-owner-s", "type": "control", - "name": "Main takes a change only through a green, current pull request", - "tagline": "The default branch of each of our repositories refuses a push, and takes a change only through a pull request whose named checks pass on a branch that is up to date with it, merged with a merge commit.", + "name": "A message from another session carries no word of the Owner's", + "tagline": "A session that receives a message from another takes it as that session's and never as the Owner's, so a refusal one session met is not passed to another to carry out.", "fields": { - "id": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "id": "01a13d68-db37-786e-b64d-1fe60ac2adf0", "source": "Local", "kind": "preventive", "mode": "automated", "enforces": [ - "A check counts only when its output was seen", - "A state is read again before it is relied on", - "A commit keeps the author it was made with" + "A refusal is not carried out by another session" ] }, "sections": [ { "heading": "How it is carried out", - "text": "GitHub's ruleset on each repository's default branch, on every attempt to change it: it refuses a force push and a deletion, takes a change only through a pull request, requires the named checks to pass, and requires the branch to be up to date with the default branch, so a pull request whose base has moved shows as behind until main is merged into it. A pull request merges only with a merge commit: in each repository either the ruleset allows no other merge method or the repository's settings turn squash and rebase off, so a commit reaches main under the author it was made with. The ruleset lets a repository admin bypass it, except on service-conventions.", + "text": "The agent harness, in every session that receives a message from another: it delivers the message marked as another session's and not as the Owner's, tells the receiving agent that such a message grants no permission and that a request to do what the sender was refused is to be declined and shown to the Owner, and its permission layer judges any action the message asks for against the receiving session's own conversation, where the Owner gave no word for it. The marking is how the agent harness delivers such a message, seen in its sessions and not in its documentation, and it rests on the agent heeding it; a session the Owner gives the word in, in its own conversation, may carry out what another was refused, because the word is then the Owner's.", "tables": [] }, { @@ -1959,14 +1873,19 @@ ], "rows": [ [ - "phase", - "Integrate", - "Delivery" + "seat", + "Controller", + "" ], [ - "phase", - "Integrate", - "Contribution" + "seat", + "Implementer", + "" + ], + [ + "seat", + "Surveyor", + "" ] ] } @@ -1980,14 +1899,19 @@ ], "rows": [ [ - "phase", - "Integrate", - "Delivery" + "seat", + "Controller", + "" ], [ - "phase", - "Integrate", - "Contribution" + "seat", + "Implementer", + "" + ], + [ + "seat", + "Surveyor", + "" ] ] } @@ -2004,12 +1928,8 @@ ], "rows": [ [ - "GitHub rulesets", - "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets" - ], - [ - "GitHub merge methods", - "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github" + "The agent harness's permission modes", + "https://code.claude.com/docs/en/permission-modes" ] ] } @@ -2022,39 +1942,35 @@ ], "rows": [ [ - "GitHub rulesets", - "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets" - ], - [ - "GitHub merge methods", - "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github" + "The agent harness's permission modes", + "https://code.claude.com/docs/en/permission-modes" ] ] } } ], "owner": null, - "path": "model/controls/main-takes-a-change-only-through-a-green-current-pull-request.md" + "path": "model/controls/a-message-from-another-session-carries-no-word-of-the-owner-s.md" }, { - "id": "01a0ffcc-327f-7562-ac09-5df548965b62", - "address": "controls/pages-drawn-from-the-model-are-held-to-it", + "id": "01a13c3b-bcac-733d-bcdd-46851e86a21a", + "address": "controls/a-registry-entry-waits-for-a-release-tag-and-the-owner", "type": "control", - "name": "Pages drawn from the model are held to it", - "tagline": "A pull request to guestgraph.io fails where a page drawn from the model differs from what the model, at the commit the site pins, would draw.", + "name": "A registry entry waits for a release tag and the Owner", + "tagline": "A server's entry in the MCP registry is published only from a release tag and only once the Owner has approved that run, because the key that signs it is held where no other run can reach it.", "fields": { - "id": "01a0ffcc-327f-7562-ac09-5df548965b62", + "id": "01a13c3b-bcac-733d-bcdd-46851e86a21a", "source": "Local", - "kind": "detective", + "kind": "preventive", "mode": "automated", "enforces": [ - "The model is corrected first" + "The Owner's word merges" ] }, "sections": [ { "heading": "How it is carried out", - "text": "The site's CI, on every pull request, in the `verify` job the ruleset requires: `model:check` parses this model at the commit `source.json` pins and fails where the committed `model.json` differs, and `pages:check` renders every region drawn from it and fails where the committed page differs, so a page edited by hand, or one the model no longer produces, cannot merge until the model is corrected and the page drawn again.", + "text": "GitHub's `registry` environment on mcp.guestgraph.io's repository, on every run of the publish workflow: it lets a job in only from a tag matching `v*`, and holds that job until the Owner approves it. The key that signs the entry is a secret of the environment and of no other, so a run from a branch, or one nobody approved, never holds it and cannot publish. A repository admin may bypass the review, which is the Owner's account, so an agent working under it is held by An agent's permissions refuse a merge it was not given.", "tables": [] }, { @@ -2105,8 +2021,12 @@ ], "rows": [ [ - "guestgraph.io's CI", - "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + "GitHub's deployment environments", + "https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments" + ], + [ + "The publish workflow and its registry job", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/.github/workflows/publish.yml" ] ] } @@ -2119,35 +2039,39 @@ ], "rows": [ [ - "guestgraph.io's CI", - "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + "GitHub's deployment environments", + "https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments" + ], + [ + "The publish workflow and its registry job", + "https://github.com/guestgraph/mcp-guestgraph-io/blob/main/.github/workflows/publish.yml" ] ] } } ], "owner": null, - "path": "model/controls/pages-drawn-from-the-model-are-held-to-it.md" + "path": "model/controls/a-registry-entry-waits-for-a-release-tag-and-the-owner.md" }, { - "id": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", - "address": "controls/the-engine-s-scenario-tests-run-on-every-pull-request", + "id": "01a13c3b-bcac-773e-b292-07d708e86454", + "address": "controls/a-release-tag-stays-where-the-owner-put-it", "type": "control", - "name": "The engine's scenario tests run on every pull request", - "tagline": "A pull request to the resolution engine cannot merge unless its scenario tests, run over the change as it stands, pass.", + "name": "A release tag stays where the Owner put it", + "tagline": "Each of our repositories refuses a tag beginning with `v` that any account but the Owner's creates, moves or deletes, so a release exists only where the Owner tagged it and stays on the commit it was made on.", "fields": { - "id": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "id": "01a13c3b-bcac-773e-b292-07d708e86454", "source": "Local", - "kind": "detective", + "kind": "preventive", "mode": "automated", "enforces": [ - "A change to the resolution engine merges only with its scenario tests" + "The Owner's word merges" ] }, "sections": [ { "heading": "How it is carried out", - "text": "The engine's CI, on every pull request: the `verify` job runs `./mvnw -B verify`, which runs every test under `src/test`, among them the resolution scenario tests for transitive merges, chains of shared identifiers, a shared identifier parked for review, and an unmerge followed by a fresh record; the ruleset on the engine's default branch requires `verify` to pass on a branch up to date with main. It holds a change to the scenarios that are there; whether they were written before the change is read in review.", + "text": "GitHub's ruleset `protect-release-tags` on each repository, on every push of a tag matching `v*`: it refuses its creation, its update and its deletion, and lets only the repository's admin role past, which is the Owner's account. A release is its tag and a consumer takes it by naming the tag, so a tag moved after it was taken would change what every consumer already holds; a release tagged wrongly is followed by a patch release and never moved. An agent working under the Owner's account passes it, so what holds an agent's tag to the Owner's word is An agent's permissions refuse a merge it was not given.", "tables": [] }, { @@ -2208,12 +2132,8 @@ ], "rows": [ [ - "The engine's CI", - "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" - ], - [ - "The scenario tests", - "https://github.com/guestgraph/engine/tree/main/src/test/java/io/guestgraph/engine/resolution" + "GitHub's rulesets for branches and tags", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#branch-and-tag-rulesets" ] ] } @@ -2226,57 +2146,54 @@ ], "rows": [ [ - "The engine's CI", - "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" - ], - [ - "The scenario tests", - "https://github.com/guestgraph/engine/tree/main/src/test/java/io/guestgraph/engine/resolution" + "GitHub's rulesets for branches and tags", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#branch-and-tag-rulesets" ] ] } } ], "owner": null, - "path": "model/controls/the-engine-s-scenario-tests-run-on-every-pull-request.md" + "path": "model/controls/a-release-tag-stays-where-the-owner-put-it.md" }, { - "id": "01a108dd-f1fd-7218-96bc-e52350522fa0", - "address": "data-processors/anthropic", - "type": "data-processor", - "name": "Anthropic", - "tagline": "Writes the chat's answers with Claude, through Anthropic's API, from the visitor's messages and what the model's tools returned; it may process a request in any country it chooses, and stores what it keeps in the United States.", + "id": "01a13d68-db37-797f-86b0-67aecc352fe4", + "address": "controls/a-request-is-asked-for-its-gap-and-never-its-hotel", + "type": "control", + "name": "A request is asked for its gap and never its hotel", + "tagline": "Whoever reads a request asks only for what the asker could not do, never which hotel it comes from, and a hotel's name the asker offers stays out of the restatement.", "fields": { - "id": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "id": "01a13d68-db37-797f-86b0-67aecc352fe4", "source": "Local", - "legal-name": "Anthropic Ireland, Limited", - "countries": [ - "US" + "kind": "preventive", + "mode": "manual", + "enforces": [ + "Nobody is asked which hotel a request comes from" ], - "processing": "any", - "retention": "Within 30 days of receipt or generation, under its own terms", - "sub-processor-authorization": "general" + "performed-by": "Owner" }, "sections": [ { - "heading": "Own purposes", - "text": "- Keeps the inputs and outputs of a conversation it flags under its Usage Policy for up to two years, and its trust and safety classification scores for up to seven.", + "heading": "How it is carried out", + "text": "The Owner, in Understand, on every feature request: it reads the request as written, asks only for the gap where the request leaves it out, and restates it in the issue without the name of any hotel the asker offered.", "tables": [] }, { - "heading": "Transfers", + "heading": "Applies to", "text": "", "tables": [ { "caption": null, "columns": [ - "Jurisdiction", - "Safeguard" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "ch", - "Standard contractual clauses, module two, as the DPA's Swiss addendum amends them for Swiss law, with the FDPIC as authority and Swiss courts" + "phase", + "Understand", + "Feature request" ] ] } @@ -2284,43 +2201,71 @@ "table": { "caption": null, "columns": [ - "Jurisdiction", - "Safeguard" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "ch", - "Standard contractual clauses, module two, as the DPA's Swiss addendum amends them for Swiss law, with the FDPIC as authority and Swiss courts" + "phase", + "Understand", + "Feature request" ] ] } + } + ], + "owner": null, + "path": "model/controls/a-request-is-asked-for-its-gap-and-never-its-hotel.md" + }, + { + "id": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "address": "controls/a-reviewer-reads-the-output-not-the-report", + "type": "control", + "name": "A reviewer reads the output, not the report", + "tagline": "Each task's change is reviewed against its diff and the checks' output, and the implementer's report is read as a claim to verify.", + "fields": { + "id": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "source": "Local", + "kind": "detective", + "mode": "manual", + "enforces": [ + "A check counts only when its output was seen" + ], + "performed-by": "Reviewer" + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The Reviewer, after each task in Implement and once over the whole branch at the start of Integrate: it reads the diff and the output of the checks the task ran, verifies each claim of the report against them, and names a gap as a finding; a check whose output it cannot see does not count as passed.", + "tables": [] }, { - "heading": "References", + "heading": "Applies to", "text": "", "tables": [ { "caption": null, "columns": [ - "What", - "URL" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "Data processing addendum", - "https://www.anthropic.com/legal/data-processing-addendum" - ], - [ - "Commercial terms", - "https://www.anthropic.com/legal/commercial-terms" + "seat", + "Reviewer", + "" ], [ - "Sub-processor list", - "https://trust.anthropic.com/subprocessors" + "phase", + "Implement", + "Delivery" ], [ - "Retention terms", - "https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data" + "phase", + "Integrate", + "Delivery" ] ] } @@ -2328,49 +2273,29 @@ "table": { "caption": null, "columns": [ - "What", - "URL" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "Data processing addendum", - "https://www.anthropic.com/legal/data-processing-addendum" - ], - [ - "Commercial terms", - "https://www.anthropic.com/legal/commercial-terms" + "seat", + "Reviewer", + "" ], [ - "Sub-processor list", - "https://trust.anthropic.com/subprocessors" + "phase", + "Implement", + "Delivery" ], [ - "Retention terms", - "https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data" + "phase", + "Integrate", + "Delivery" ] ] } - } - ], - "owner": null, - "path": "model/data-processors/anthropic.md" - }, - { - "id": "01a108de-0195-7bc3-ad53-a16299aa585b", - "address": "data-processors/google-cloud", - "type": "data-processor", - "name": "Google Cloud", - "tagline": "Runs the chat service and the MCP server in its Zürich region, and keeps the chat's log of questions there.", - "fields": { - "id": "01a108de-0195-7bc3-ad53-a16299aa585b", - "source": "Local", - "legal-name": "Google Cloud EMEA Limited", - "countries": [ - "CH" - ], - "sub-processor-authorization": "general" - }, - "sections": [ + }, { "heading": "References", "text": "", @@ -2383,16 +2308,8 @@ ], "rows": [ [ - "Cloud data processing addendum", - "https://cloud.google.com/terms/data-processing-addendum" - ], - [ - "Contracting entity by region", - "https://cloud.google.com/terms/google-entity" - ], - [ - "Sub-processor list", - "https://cloud.google.com/terms/subprocessors" + "Rulebook, superpowers", + "https://github.com/obra/superpowers/blob/main/skills/subagent-driven-development/SKILL.md" ] ] } @@ -2405,55 +2322,63 @@ ], "rows": [ [ - "Cloud data processing addendum", - "https://cloud.google.com/terms/data-processing-addendum" - ], - [ - "Contracting entity by region", - "https://cloud.google.com/terms/google-entity" - ], - [ - "Sub-processor list", - "https://cloud.google.com/terms/subprocessors" + "Rulebook, superpowers", + "https://github.com/obra/superpowers/blob/main/skills/subagent-driven-development/SKILL.md" ] ] } } ], "owner": null, - "path": "model/data-processors/google-cloud.md" + "path": "model/controls/a-reviewer-reads-the-output-not-the-report.md" }, { - "id": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", - "address": "data-processors/typesafe", - "type": "data-processor", - "name": "TypeSafe", - "tagline": "Judges whether the model's public pages carry each sentence of a chat answer, from those sentences and the parts of the pages they rest on.", + "id": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", + "address": "controls/a-secret-is-refused-at-the-push", + "type": "control", + "name": "A secret is refused at the push", + "tagline": "GitHub refuses a push to any of our repositories that carries a secret it recognizes, before the secret is published, and scans what is already there for any that got in.", "fields": { - "id": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", + "id": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", "source": "Local", - "legal-name": "TypeSafe AI, Inc.", - "countries": [ - "US" - ], - "retention": "For as long as necessary for the purpose of the processing, under its own terms", - "sub-processor-authorization": "general" + "kind": "preventive", + "mode": "automated", + "enforces": [ + "A secret is never written into a repository" + ] }, "sections": [ { - "heading": "Transfers", + "heading": "How it is carried out", + "text": "GitHub's secret scanning with push protection, turned on in each of our repositories and for every repository the organization creates: on every push it looks for the shapes of keys and tokens its providers register, refuses the push that carries one and names the file and line, and it keeps scanning the history for any that reached a repository before. Whoever pushes may push past a refusal by giving a reason, that the secret is used in tests, is a false positive or will be fixed later, and GitHub then records an alert, writes the bypass to the audit log and emails the owners. It knows only those shapes, so a password someone made up, or a key in a form no provider registered, passes it; for those the rule rests on whoever writes the change.", + "tables": [] + }, + { + "heading": "Applies to", "text": "", "tables": [ { "caption": null, "columns": [ - "Jurisdiction", - "Safeguard" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "ch", - "Standard contractual clauses, module two, with Swiss courts and the FDPIC for transfers from Switzerland, under Irish governing law" + "phase", + "Implement", + "Delivery" + ], + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" ] ] } @@ -2461,13 +2386,25 @@ "table": { "caption": null, "columns": [ - "Jurisdiction", - "Safeguard" + "Type", + "Entity", + "Owner" ], "rows": [ [ - "ch", - "Standard contractual clauses, module two, with Swiss courts and the FDPIC for transfers from Switzerland, under Irish governing law" + "phase", + "Implement", + "Delivery" + ], + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" ] ] } @@ -2484,16 +2421,8 @@ ], "rows": [ [ - "Data processing addendum", - "https://typesafe.ai/legal/data-processing" - ], - [ - "Privacy policy", - "https://typesafe.ai/legal/privacy-policy" - ], - [ - "Sub-processor list", - "https://trust.typesafe.ai/subprocessors" + "GitHub's push protection", + "https://docs.github.com/en/code-security/concepts/secret-security/push-protection" ] ] } @@ -2506,27 +2435,1400 @@ ], "rows": [ [ - "Data processing addendum", - "https://typesafe.ai/legal/data-processing" - ], - [ - "Privacy policy", - "https://typesafe.ai/legal/privacy-policy" - ], - [ - "Sub-processor list", - "https://trust.typesafe.ai/subprocessors" + "GitHub's push protection", + "https://docs.github.com/en/code-security/concepts/secret-security/push-protection" ] ] } } ], "owner": null, - "path": "model/data-processors/typesafe.md" + "path": "model/controls/a-secret-is-refused-at-the-push.md" }, { - "id": "01a0dd52-d3a0-79fe-9c24-994ac9b255c9", - "address": "decision-kinds/architecture", + "id": "01a0ffcb-f64d-7b19-a126-b386e59263cc", + "address": "controls/a-vendored-copy-is-held-to-the-release-it-names", + "type": "control", + "name": "A vendored copy is held to the release it names", + "tagline": "A pull request fails where what a repository vendors differs from the release it pins, so a change reaches another repository only once it is released.", + "fields": { + "id": "01a0ffcb-f64d-7b19-a126-b386e59263cc", + "source": "Local", + "kind": "detective", + "mode": "automated", + "enforces": [ + "A change to what another repository vendors is released" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The conventions job, required on the default branch of each of our repositories, on every pull request: `conventions-sync check` compares the vendored `conventions/` with the release `conventions.json` names and fails for each file that differs. In the engine and the Apaleo connector, the required `service-conventions` job runs `service-conventions-sync check`, which fails where the vendored service conventions differ from the release they pin. In our model, the required instance check refuses a checker other than the release `.companygraph/manifest.json` names and fails where a vendored core file differs from the hash the manifest recorded when that release was taken. Nothing checks what a release's notes ask of a consumer.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The conventions job", + "https://github.com/robertblust/conventions/blob/main/.github/workflows/check.yml" + ], + [ + "The conventions copy check", + "https://github.com/robertblust/conventions/blob/main/conventions/conventions-sync" + ], + [ + "The engine's CI", + "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" + ], + [ + "The service conventions copy check", + "https://github.com/guestgraph/service-conventions/blob/main/spring/service-conventions-sync" + ], + [ + "The instance check", + "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The conventions job", + "https://github.com/robertblust/conventions/blob/main/.github/workflows/check.yml" + ], + [ + "The conventions copy check", + "https://github.com/robertblust/conventions/blob/main/conventions/conventions-sync" + ], + [ + "The engine's CI", + "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" + ], + [ + "The service conventions copy check", + "https://github.com/guestgraph/service-conventions/blob/main/spring/service-conventions-sync" + ], + [ + "The instance check", + "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/a-vendored-copy-is-held-to-the-release-it-names.md" + }, + { + "id": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", + "address": "controls/an-agent-s-hook-refuses-removing-a-worktree-that-holds-a-plan", + "type": "control", + "name": "An agent's hook refuses removing a worktree that holds a plan", + "tagline": "Before an agent on the Owner's machine runs a shell command, a hook refuses it where it would remove a worktree that still holds a plan's ledger.", + "fields": { + "id": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", + "source": "Local", + "kind": "preventive", + "mode": "automated", + "enforces": [ + "A worktree is removed only once its plan is done" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "A hook the agent harness runs on the Owner's machine before every shell command an agent issues: it reads each `git worktree remove` in the command, resolves the worktree's path through any `cd` or `-C` before it, and refuses the command where that worktree holds a plan's ledger under `.superpowers/sdd/`, saying why, so the agent stops before anything is deleted. It holds an agent and not the Owner's own terminal, and a worktree deleted some other way, such as by `rm -rf`, passes it; the hook lives in the Owner's own settings and in no repository.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Implement", + "Delivery" + ], + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Implement", + "Delivery" + ], + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The agent harness's hooks", + "https://code.claude.com/docs/en/hooks" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The agent harness's hooks", + "https://code.claude.com/docs/en/hooks" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/an-agent-s-hook-refuses-removing-a-worktree-that-holds-a-plan.md" + }, + { + "id": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "address": "controls/an-agent-s-permissions-refuse-a-merge-it-was-not-given", + "type": "control", + "name": "An agent's permissions refuse a merge it was not given", + "tagline": "The permission layer an agent runs under refuses a merge the agent attempts without the Owner's word for it in that conversation.", + "fields": { + "id": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "source": "Local", + "kind": "preventive", + "mode": "automated", + "enforces": [ + "The Owner's word merges" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The agent harness's permission layer, before the agent's command runs: it judges the action against the conversation, and a merge without a review it can see is refused, so the agent stops and the merge waits for the Owner.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "seat", + "Controller", + "" + ], + [ + "seat", + "Implementer", + "" + ], + [ + "seat", + "Surveyor", + "" + ], + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "seat", + "Controller", + "" + ], + [ + "seat", + "Implementer", + "" + ], + [ + "seat", + "Surveyor", + "" + ], + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The agent harness's permission modes", + "https://code.claude.com/docs/en/permission-modes" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The agent harness's permission modes", + "https://code.claude.com/docs/en/permission-modes" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/an-agent-s-permissions-refuse-a-merge-it-was-not-given.md" + }, + { + "id": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "address": "controls/an-id-a-decision-and-a-label-are-held-as-they-were", + "type": "control", + "name": "An id, a decision and a label are held as they were", + "tagline": "A pull request to the model fails where it changes an id already on the default branch, rewrites a decision beyond closing it, or moves, swaps or reuses a label.", + "fields": { + "id": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "source": "Local", + "kind": "preventive", + "mode": "automated", + "enforces": [ + "What is cited from outside the model is not rewritten" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The instance check, required on the default branch, on every pull request: its step `companygraph ids --range` compares each page of the branch with its base after both are put in the one form, and refuses a changed id, a decision whose text changed beyond its status and one dated closing sentence, and a label of a scenario, a step or an invariant that moved to another item, swapped with one or came back after it was removed. A reference name may follow the rename of what it names, and a URL under `## References` may change on its own. Where a release of core changed the schema that governs a type, the decision and label checks stand aside for that type and say so in a note.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The instance check", + "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + ], + [ + "The change checks", + "https://github.com/companygraph/meta-model/blob/main/lib/checks.mjs" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The instance check", + "https://github.com/companygraph/meta-model/blob/main/.github/workflows/instance-check.yml" + ], + [ + "The change checks", + "https://github.com/companygraph/meta-model/blob/main/lib/checks.mjs" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/an-id-a-decision-and-a-label-are-held-as-they-were.md" + }, + { + "id": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "address": "controls/german-left-behind-is-found", + "type": "control", + "name": "German left behind is found", + "tagline": "A pull request to guestgraph.io fails where an English edit left its German unchanged, unless a commit says the German is right on purpose.", + "fields": { + "id": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "source": "Local", + "kind": "detective", + "mode": "automated", + "enforces": [ + "German follows reviewed English" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The site's CI, on every pull request, in the `verify` job the ruleset requires: `design german stale` compares the change with its base and fails for each element whose English moved while its German did not; a commit that names the element in a `German-unchanged:` trailer releases it.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "guestgraph.io's CI", + "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + ], + [ + "The German stale check", + "https://github.com/robertblust/design#readme" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "guestgraph.io's CI", + "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + ], + [ + "The German stale check", + "https://github.com/robertblust/design#readme" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/german-left-behind-is-found.md" + }, + { + "id": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "address": "controls/main-takes-a-change-only-through-a-green-current-pull-request", + "type": "control", + "name": "Main takes a change only through a green, current pull request", + "tagline": "The default branch of each of our repositories refuses a push, and takes a change only through a pull request whose named checks pass on a branch that is up to date with it, merged with a merge commit.", + "fields": { + "id": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "source": "Local", + "kind": "preventive", + "mode": "automated", + "enforces": [ + "A check counts only when its output was seen", + "A state is read again before it is relied on", + "A commit keeps the author it was made with" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "GitHub's ruleset on each repository's default branch, on every attempt to change it: it refuses a force push and a deletion, takes a change only through a pull request, requires the named checks to pass, and requires the branch to be up to date with the default branch, so a pull request whose base has moved shows as behind until main is merged into it. A pull request merges only with a merge commit: in each repository either the ruleset allows no other merge method or the repository's settings turn squash and rebase off, so a commit reaches main under the author it was made with. The ruleset lets a repository admin bypass it, except on service-conventions.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "GitHub rulesets", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets" + ], + [ + "GitHub merge methods", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "GitHub rulesets", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets" + ], + [ + "GitHub merge methods", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/main-takes-a-change-only-through-a-green-current-pull-request.md" + }, + { + "id": "01a13c3b-bcac-7df7-9a12-e973d8625df1", + "address": "controls/only-the-owner-s-account-changes-main", + "type": "control", + "name": "Only the Owner's account changes main", + "tagline": "The default branch of each of our repositories takes a push or a merge from the Owner's account alone, so anyone else with write access can open a branch and a pull request but cannot merge it.", + "fields": { + "id": "01a13c3b-bcac-7df7-9a12-e973d8625df1", + "source": "Local", + "kind": "preventive", + "mode": "automated", + "enforces": [ + "The Owner's word merges" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "GitHub's branch protection on each repository's default branch, on every push and every merge into it: it restricts who may push to the Owner's account, so anyone else the organization gives write access can push a branch and open a pull request and is refused the merge. The protection holds nothing else; the pull request and the checks are what Main takes a change only through a green, current pull request holds. It is set as branch protection and not as a rule of the ruleset, because a ruleset lets only its bypass actors past such a rule, which would turn every merge the Owner makes into a bypass that Merges Past Their Checks counts. An agent working under the Owner's account passes it, so what holds an agent to the Owner's word is An agent's permissions refuse a merge it was not given.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "GitHub's restriction of who can push", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#restrict-who-can-push-to-matching-branches" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "GitHub's restriction of who can push", + "https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#restrict-who-can-push-to-matching-branches" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/only-the-owner-s-account-changes-main.md" + }, + { + "id": "01a0ffcc-327f-7562-ac09-5df548965b62", + "address": "controls/pages-drawn-from-the-model-are-held-to-it", + "type": "control", + "name": "Pages drawn from the model are held to it", + "tagline": "A pull request to guestgraph.io fails where a page drawn from the model differs from what the model, at the commit the site pins, would draw.", + "fields": { + "id": "01a0ffcc-327f-7562-ac09-5df548965b62", + "source": "Local", + "kind": "detective", + "mode": "automated", + "enforces": [ + "The model is corrected first" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The site's CI, on every pull request, in the `verify` job the ruleset requires: `model:check` parses this model at the commit `source.json` pins and fails where the committed `model.json` differs, and `pages:check` renders every region drawn from it and fails where the committed page differs, so a page edited by hand, or one the model no longer produces, cannot merge until the model is corrected and the page drawn again.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "guestgraph.io's CI", + "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "guestgraph.io's CI", + "https://github.com/guestgraph/guestgraph.github.io/blob/main/.github/workflows/ci.yml" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/pages-drawn-from-the-model-are-held-to-it.md" + }, + { + "id": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "address": "controls/the-engine-s-scenario-tests-run-on-every-pull-request", + "type": "control", + "name": "The engine's scenario tests run on every pull request", + "tagline": "A pull request to the resolution engine cannot merge unless its scenario tests, run over the change as it stands, pass.", + "fields": { + "id": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "source": "Local", + "kind": "detective", + "mode": "automated", + "enforces": [ + "A change to the resolution engine merges only with its scenario tests" + ] + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The engine's CI, on every pull request: the `verify` job runs `./mvnw -B verify`, which runs every test under `src/test`, among them the resolution scenario tests for transitive merges, chains of shared identifiers, a shared identifier parked for review, and an unmerge followed by a fresh record; the ruleset on the engine's default branch requires `verify` to pass on a branch up to date with main. It holds a change to the scenarios that are there; whether they were written before the change is read in review.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The engine's CI", + "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" + ], + [ + "The scenario tests", + "https://github.com/guestgraph/engine/tree/main/src/test/java/io/guestgraph/engine/resolution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "The engine's CI", + "https://github.com/guestgraph/engine/blob/main/.github/workflows/verify.yml" + ], + [ + "The scenario tests", + "https://github.com/guestgraph/engine/tree/main/src/test/java/io/guestgraph/engine/resolution" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/the-engine-s-scenario-tests-run-on-every-pull-request.md" + }, + { + "id": "01a13d68-db37-7841-a30e-fa297747437e", + "address": "controls/the-implementer-reads-the-merge-before-deleting-the-branch", + "type": "control", + "name": "The Implementer reads the merge before deleting the branch", + "tagline": "A branch is deleted only after the Implementer has read its pull request as merged, in a step of its own.", + "fields": { + "id": "01a13d68-db37-7841-a30e-fa297747437e", + "source": "Local", + "kind": "preventive", + "mode": "manual", + "enforces": [ + "A branch is deleted only after its merge is confirmed" + ], + "performed-by": "Implementer" + }, + "sections": [ + { + "heading": "How it is carried out", + "text": "The Implementer, at the end of Integrate, once a pull request it carried has been merged: it reads the pull request's state and its merge commit from GitHub in a command of its own, and only when the state reads merged removes the worktree, the local branch and the remote branch, each by name and each as a step of its own, never chained after the merge. A branch whose merge it cannot read stays. GitHub's own deletion of a merged branch is turned off in each of our repositories, so a branch goes only when this step takes it.", + "tables": [] + }, + { + "heading": "Applies to", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Type", + "Entity", + "Owner" + ], + "rows": [ + [ + "phase", + "Integrate", + "Delivery" + ], + [ + "phase", + "Integrate", + "Contribution" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Working rules", + "https://github.com/robertblust/conventions/blob/main/conventions/WORKING.md" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Working rules", + "https://github.com/robertblust/conventions/blob/main/conventions/WORKING.md" + ] + ] + } + } + ], + "owner": null, + "path": "model/controls/the-implementer-reads-the-merge-before-deleting-the-branch.md" + }, + { + "id": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "address": "data-processors/anthropic", + "type": "data-processor", + "name": "Anthropic", + "tagline": "Writes the chat's answers with Claude, through Anthropic's API, from the visitor's messages and what the model's tools returned; it may process a request in any country it chooses, and stores what it keeps in the United States.", + "fields": { + "id": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "source": "Local", + "legal-name": "Anthropic Ireland, Limited", + "countries": [ + "US" + ], + "processing": "any", + "retention": "Within 30 days of receipt or generation, under its own terms", + "sub-processor-authorization": "general" + }, + "sections": [ + { + "heading": "Own purposes", + "text": "- Keeps the inputs and outputs of a conversation it flags under its Usage Policy for up to two years, and its trust and safety classification scores for up to seven.", + "tables": [] + }, + { + "heading": "Transfers", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Jurisdiction", + "Safeguard" + ], + "rows": [ + [ + "ch", + "Standard contractual clauses, module two, as the DPA's Swiss addendum amends them for Swiss law, with the FDPIC as authority and Swiss courts" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Jurisdiction", + "Safeguard" + ], + "rows": [ + [ + "ch", + "Standard contractual clauses, module two, as the DPA's Swiss addendum amends them for Swiss law, with the FDPIC as authority and Swiss courts" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Data processing addendum", + "https://www.anthropic.com/legal/data-processing-addendum" + ], + [ + "Commercial terms", + "https://www.anthropic.com/legal/commercial-terms" + ], + [ + "Sub-processor list", + "https://trust.anthropic.com/subprocessors" + ], + [ + "Retention terms", + "https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Data processing addendum", + "https://www.anthropic.com/legal/data-processing-addendum" + ], + [ + "Commercial terms", + "https://www.anthropic.com/legal/commercial-terms" + ], + [ + "Sub-processor list", + "https://trust.anthropic.com/subprocessors" + ], + [ + "Retention terms", + "https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data" + ] + ] + } + } + ], + "owner": null, + "path": "model/data-processors/anthropic.md" + }, + { + "id": "01a108de-0195-7bc3-ad53-a16299aa585b", + "address": "data-processors/google-cloud", + "type": "data-processor", + "name": "Google Cloud", + "tagline": "Runs the chat service and the MCP server in its Zürich region, and keeps the chat's log of questions there.", + "fields": { + "id": "01a108de-0195-7bc3-ad53-a16299aa585b", + "source": "Local", + "legal-name": "Google Cloud EMEA Limited", + "countries": [ + "CH" + ], + "sub-processor-authorization": "general" + }, + "sections": [ + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Cloud data processing addendum", + "https://cloud.google.com/terms/data-processing-addendum" + ], + [ + "Contracting entity by region", + "https://cloud.google.com/terms/google-entity" + ], + [ + "Sub-processor list", + "https://cloud.google.com/terms/subprocessors" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Cloud data processing addendum", + "https://cloud.google.com/terms/data-processing-addendum" + ], + [ + "Contracting entity by region", + "https://cloud.google.com/terms/google-entity" + ], + [ + "Sub-processor list", + "https://cloud.google.com/terms/subprocessors" + ] + ] + } + } + ], + "owner": null, + "path": "model/data-processors/google-cloud.md" + }, + { + "id": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", + "address": "data-processors/typesafe", + "type": "data-processor", + "name": "TypeSafe", + "tagline": "Judges whether the model's public pages carry each sentence of a chat answer, from those sentences and the parts of the pages they rest on.", + "fields": { + "id": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", + "source": "Local", + "legal-name": "TypeSafe AI, Inc.", + "countries": [ + "US" + ], + "retention": "For as long as necessary for the purpose of the processing, under its own terms", + "sub-processor-authorization": "general" + }, + "sections": [ + { + "heading": "Transfers", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Jurisdiction", + "Safeguard" + ], + "rows": [ + [ + "ch", + "Standard contractual clauses, module two, with Swiss courts and the FDPIC for transfers from Switzerland, under Irish governing law" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Jurisdiction", + "Safeguard" + ], + "rows": [ + [ + "ch", + "Standard contractual clauses, module two, with Swiss courts and the FDPIC for transfers from Switzerland, under Irish governing law" + ] + ] + } + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Data processing addendum", + "https://typesafe.ai/legal/data-processing" + ], + [ + "Privacy policy", + "https://typesafe.ai/legal/privacy-policy" + ], + [ + "Sub-processor list", + "https://trust.typesafe.ai/subprocessors" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Data processing addendum", + "https://typesafe.ai/legal/data-processing" + ], + [ + "Privacy policy", + "https://typesafe.ai/legal/privacy-policy" + ], + [ + "Sub-processor list", + "https://trust.typesafe.ai/subprocessors" + ] + ] + } + } + ], + "owner": null, + "path": "model/data-processors/typesafe.md" + }, + { + "id": "01a0dd52-d3a0-79fe-9c24-994ac9b255c9", + "address": "decision-kinds/architecture", "type": "decision-kind", "name": "Architecture", "tagline": "A call about how the engine and what runs beside it are built: what is stored and what is derived, what talks to what, what a matcher may do.", @@ -12215,6 +13517,59 @@ "owner": null, "path": "model/rules/a-refusal-is-not-carried-out-by-another-session.md" }, + { + "id": "01a13c3b-bcac-73b9-a9e0-3bc936d5d27c", + "address": "rules/a-secret-is-never-written-into-a-repository", + "type": "rule", + "name": "A secret is never written into a repository", + "tagline": "No key, token or password is committed to any of our repositories, in a file, a commit message or a test fixture; a secret lives in the store of the workflow or the service that reads it.", + "fields": { + "id": "01a13c3b-bcac-73b9-a9e0-3bc936d5d27c", + "source": "Local", + "modality": "must not" + }, + "sections": [ + { + "heading": "Why", + "text": "Our repositories are public, so whatever is pushed is published the moment it reaches GitHub, and it stays in the history after a later commit removes it. A secret that reached a repository can only be rotated, never taken back, and everything it opened stays open until it is. For the same reason a secret is never printed, not even to check it: a value that reaches a transcript has to be rotated as well.", + "tables": [] + }, + { + "heading": "References", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Working rules", + "https://github.com/robertblust/conventions/blob/main/conventions/WORKING.md" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "What", + "URL" + ], + "rows": [ + [ + "Working rules", + "https://github.com/robertblust/conventions/blob/main/conventions/WORKING.md" + ] + ] + } + } + ], + "owner": null, + "path": "model/rules/a-secret-is-never-written-into-a-repository.md" + }, { "id": "01a0fd96-a828-7ab7-a402-d88705435bb5", "address": "rules/a-state-is-read-again-before-it-is-relied-on", @@ -12300,7 +13655,28 @@ } ], "owner": null, - "path": "model/rules/a-state-is-read-again-before-it-is-relied-on.md" + "path": "model/rules/a-state-is-read-again-before-it-is-relied-on.md" + }, + { + "id": "01a13c3b-bcac-7c87-887e-58290cbffaef", + "address": "rules/a-worktree-is-removed-only-once-its-plan-is-done", + "type": "rule", + "name": "A worktree is removed only once its plan is done", + "tagline": "A worktree that holds a plan's ledger is not removed before every task of that plan is done, even when its pull request has merged.", + "fields": { + "id": "01a13c3b-bcac-7c87-887e-58290cbffaef", + "source": "Local", + "modality": "must not" + }, + "sections": [ + { + "heading": "Why", + "text": "A plan's ledger, its briefs and its task reports live in the worktree under `.superpowers/`, which git ignores, and `git worktree remove` deletes ignored files without asking, with or without `--force`, so nothing brings them back. A merged pull request does not finish a plan: a plan can carry tasks in other repositories that are still owed. Three ledgers were lost this way in September 2026, twice in one day.", + "tables": [] + } + ], + "owner": null, + "path": "model/rules/a-worktree-is-removed-only-once-its-plan-is-done.md" }, { "id": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", @@ -12836,6 +14212,27 @@ "owner": null, "path": "model/rules/the-owner-s-word-merges.md" }, + { + "id": "01a13c3b-bcac-77ab-9a88-db0b9df63874", + "address": "rules/what-is-cited-from-outside-the-model-is-not-rewritten", + "type": "rule", + "name": "What is cited from outside the model is not rewritten", + "tagline": "Once on the default branch, an entity's id, a decision's text and a label on a page are not changed, because a link, a commit or a test outside the model may already cite them.", + "fields": { + "id": "01a13c3b-bcac-77ab-9a88-db0b9df63874", + "source": "Local", + "modality": "must not" + }, + "sections": [ + { + "heading": "Why", + "text": "An outside system holds on to what it cites: a graph node to an entity's id, a commit or a later decision to a decision as it was decided, a test or a line of code to the label of a scenario, a step or an invariant. Each is the only handle that citation has, and a rewrite leaves it pointing at something that now says another thing, with nothing to tell whoever cited it. So an id stays with its entity, a decision that no longer stands is closed by its status and one dated sentence instead of being edited, and a label stays with the item it was given to and is never given to another.", + "tables": [] + } + ], + "owner": null, + "path": "model/rules/what-is-cited-from-outside-the-model-is-not-rewritten.md" + }, { "id": "01a0d360-9b98-7ee2-9051-f9478a601fde", "address": "seats/answerer", @@ -18195,157 +19592,499 @@ "attrs": {} }, { - "from": "01a0fadf-c104-7cb5-9552-d22ba8b14198", + "from": "01a0fadf-c104-7cb5-9552-d22ba8b14198", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fadf-c104-7cb5-9552-d22ba8b14198", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "supported-by", + "attrs": {} + }, + { + "from": "01a0fadf-c139-75ea-9e48-03f3138b277e", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "via": "If not met.Leads to", + "attrs": { + "Outcome": "checked again" + } + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "escalation-authority", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "executed-by", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "gate-approvers", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "via": "gate-to", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "owner", + "attrs": {} + }, + { + "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "via": "If not met.Leads to", + "attrs": { + "Outcome": "proposed again" + } + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "escalation-authority", + "attrs": {} + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "executed-by", + "attrs": {} + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "gate-approvers", + "attrs": {} + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "owner", + "attrs": {} + }, + { + "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "via": "If not met.Leads to", + "attrs": { + "Outcome": "surveyed again" + } + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "escalation-authority", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "executed-by", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "gate-approvers", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "via": "gate-to", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "owner", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "supported-by", + "attrs": {} + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", + "via": "Applies to.Entity", + "attrs": { + "Type": "process", + "Owner": "" + } + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", + "via": "Applies to.Entity", + "attrs": { + "Type": "process", + "Owner": "" + } + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d4bd-a710-765f-b25a-5227025665ff", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fd96-9996-7069-845d-acaa311d5008", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Contribution" + } + }, + { + "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } + }, + { + "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "to": "01a0fadf-c104-7cb5-9552-d22ba8b14198", + "via": "Applies to.Entity", + "attrs": { + "Type": "process", + "Owner": "" + } + }, + { + "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fadf-c104-7cb5-9552-d22ba8b14198", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "supported-by", - "attrs": {} + "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", + "via": "Applies to.Entity", + "attrs": { + "Type": "process", + "Owner": "" + } }, { - "from": "01a0fadf-c139-75ea-9e48-03f3138b277e", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} + "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "to": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "via": "If not met.Leads to", + "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "to": "01a0d4bd-a710-745a-a1b7-f3c508a47ab1", + "via": "Applies to.Entity", "attrs": { - "Outcome": "checked again" + "Type": "seat", + "Owner": "" } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "escalation-authority", - "attrs": {} + "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "to": "01a0d4bd-a710-7f00-a679-07ee34f542ef", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "executed-by", + "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", + "to": "01a0d2e3-bec0-7379-8ae0-87fd05aba8ad", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "gate-approvers", - "attrs": {} + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "to": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "via": "gate-to", - "attrs": {} + "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", + "to": "01a0d4bd-a710-745a-a1b7-f3c508a47ab1", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "owner", - "attrs": {} + "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", + "to": "01a0d4bd-a710-780f-ac45-51f5aa44a073", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a0fadf-c16f-7bea-a550-771553fd5e42", + "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", - "to": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "via": "If not met.Leads to", + "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", + "via": "Applies to.Entity", "attrs": { - "Outcome": "proposed again" + "Type": "process", + "Owner": "" } }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "escalation-authority", - "attrs": {} + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "executed-by", - "attrs": {} + "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "gate-approvers", + "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "owner", - "attrs": {} + "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", + "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Deciding" + } + }, + { + "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0fadf-c16f-7bea-a550-771553fd5e42", - "via": "If not met.Leads to", + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", + "via": "Applies to.Entity", "attrs": { - "Outcome": "surveyed again" + "Type": "seat", + "Owner": "" } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "escalation-authority", - "attrs": {} + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Contribution" + } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "executed-by", - "attrs": {} + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0d4bd-a710-765f-b25a-5227025665ff", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "gate-approvers", - "attrs": {} + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", - "via": "gate-to", - "attrs": {} + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "owner", - "attrs": {} + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Deciding" + } }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", + "from": "01a0fd96-f18b-731b-932f-1b021109ff23", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fadf-c1db-78b0-a30e-8cc40905dc70", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "supported-by", + "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", + "via": "Applies to.Entity", + "attrs": { + "Type": "process", + "Owner": "" + } + }, + { + "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "to": "01a0d360-9b98-7e50-a583-cfcd12e4b7c2", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } + }, + { + "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } + }, + { + "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", "via": "Applies to.Entity", "attrs": { @@ -18354,17 +20093,8 @@ } }, { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } - }, - { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", + "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18372,37 +20102,31 @@ } }, { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", + "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { - "Type": "process", - "Owner": "" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "to": "01a0d4bd-a710-765f-b25a-5227025665ff", + "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { - "Type": "seat", - "Owner": "" + "Type": "phase", + "Owner": "Delivery" } }, { - "from": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} - }, - { - "from": "01a0fd96-9996-7069-845d-acaa311d5008", + "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { @@ -18411,7 +20135,7 @@ } }, { - "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { @@ -18420,8 +20144,14 @@ } }, { - "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", + "to": "01a0d360-9b98-7519-92ba-676eb4ef0d5e", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18429,8 +20159,8 @@ } }, { - "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", - "to": "01a0fadf-c104-7cb5-9552-d22ba8b14198", + "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", + "to": "01a0d360-9b98-7a12-8e19-7cb0e921c70f", "via": "Applies to.Entity", "attrs": { "Type": "process", @@ -18438,13 +20168,13 @@ } }, { - "from": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "from": "01a0fd97-3bd6-7927-b759-6586861e448e", "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", "via": "Applies to.Entity", "attrs": { @@ -18453,17 +20183,23 @@ } }, { - "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", - "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", + "from": "01a0fd97-3bd6-7927-b759-6586861e448e", + "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", "via": "Applies to.Entity", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Type": "process", + "Owner": "" } }, { - "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", - "to": "01a0d4bd-a710-745a-a1b7-f3c508a47ab1", + "from": "01a0fd97-3bd6-7927-b759-6586861e448e", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", + "to": "01a0d360-9b98-7519-92ba-676eb4ef0d5e", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18471,41 +20207,32 @@ } }, { - "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", - "to": "01a0d4bd-a710-7f00-a679-07ee34f542ef", + "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", + "to": "01a0d360-9b98-7a12-8e19-7cb0e921c70f", "via": "Applies to.Entity", "attrs": { - "Type": "seat", + "Type": "process", "Owner": "" } }, { - "from": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", - "to": "01a0d2e3-bec0-7379-8ae0-87fd05aba8ad", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } - }, - { - "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", "via": "Applies to.Entity", "attrs": { - "Type": "seat", - "Owner": "" + "Type": "phase", + "Owner": "Delivery" } }, { - "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", - "to": "01a0d4bd-a710-745a-a1b7-f3c508a47ab1", + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18513,8 +20240,8 @@ } }, { - "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", - "to": "01a0d4bd-a710-780f-ac45-51f5aa44a073", + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { "Type": "phase", @@ -18522,31 +20249,34 @@ } }, { - "from": "01a0fd96-c621-7f66-89a5-2cb3c213384a", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "via": "enforces", "attrs": {} }, { - "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", - "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", + "via": "performed-by", + "attrs": {} }, { - "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { - "Type": "seat", - "Owner": "" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { @@ -18555,23 +20285,29 @@ } }, { - "from": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", + "to": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", "via": "Applies to.Entity", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Type": "seat", + "Owner": "" } }, { - "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0d4bd-a710-765f-b25a-5227025665ff", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18579,23 +20315,17 @@ } }, { - "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", - "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { "Type": "phase", - "Owner": "Deciding" + "Owner": "Delivery" } }, { - "from": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} - }, - { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", "via": "Applies to.Entity", "attrs": { "Type": "seat", @@ -18603,25 +20333,49 @@ } }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0fd96-f18b-731b-932f-1b021109ff23", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { "Type": "phase", - "Owner": "Contribution" + "Owner": "Delivery" } }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0d4bd-a710-765f-b25a-5227025665ff", + "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "to": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { - "Type": "seat", - "Owner": "" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { @@ -18630,49 +20384,61 @@ } }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "to": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "to": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "to": "01a0fd97-005e-7317-851d-c5292e5a1719", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0fadf-c1a5-7b77-bf09-aa0269a609e1", + "from": "01a0ffcc-327f-7562-ac09-5df548965b62", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { "Type": "phase", - "Owner": "Deciding" + "Owner": "Delivery" } }, { - "from": "01a0fd96-f18b-731b-932f-1b021109ff23", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a0ffcc-327f-7562-ac09-5df548965b62", + "to": "01a0fd96-d495-7350-a65a-0b835ed49c6a", + "via": "enforces", "attrs": {} }, { - "from": "01a0fd97-005e-7317-851d-c5292e5a1719", - "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a0ffcc-327f-7562-ac09-5df548965b62", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0fd97-005e-7317-851d-c5292e5a1719", - "to": "01a0d360-9b98-7e50-a583-cfcd12e4b7c2", + "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { - "Type": "seat", - "Owner": "" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { @@ -18681,338 +20447,364 @@ } }, { - "from": "01a0fd97-005e-7317-851d-c5292e5a1719", + "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "to": "01a0fd97-3bd6-7927-b759-6586861e448e", + "via": "enforces", + "attrs": {} + }, + { + "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", - "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a101e9-720b-712f-8836-97a081d86c9e", + "to": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "via": "assesses", + "attrs": {} }, { - "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "from": "01a101e9-720b-712f-8836-97a081d86c9e", "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "Applies to.Entity", + "via": "owner", + "attrs": {} + }, + { + "from": "01a101e9-720b-712f-8836-97a081d86c9e", + "to": "01a0d9fc-6540-7dea-9b00-37bc509cb620", + "via": "read-with", + "attrs": {} + }, + { + "from": "01a101e9-720b-712f-8836-97a081d86c9e", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108de-0195-7bc3-ad53-a16299aa585b", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", + "to": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "via": "Processors.Processor", "attrs": { - "Type": "seat", - "Owner": "" + "Receives": "The message and the earlier messages of the same conversation" } }, { - "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", - "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", - "via": "Applies to.Entity", + "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", + "to": "01a108de-0195-7bc3-ad53-a16299aa585b", + "via": "Processors.Processor", "attrs": { - "Type": "phase", - "Owner": "Contribution" + "Receives": "The messages and the visitor's address, on the way to the answer" } }, { - "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", + "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", + "to": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", + "via": "Processors.Processor", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Receives": "The answer's sentences and the parts of the model's pages they rest on" } }, { - "from": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", + "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", - "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Contribution" - } + "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} }, { - "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", + "from": "01a108de-2032-713f-a760-900ce12daf47", + "to": "01a108de-0195-7bc3-ad53-a16299aa585b", + "via": "Processors.Processor", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Receives": "The question and whether the model could answer it, kept in its Zürich region with the weekly report made from them" } }, { - "from": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", + "from": "01a108de-2032-713f-a760-900ce12daf47", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", - "to": "01a0d360-9b98-7519-92ba-676eb4ef0d5e", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-2032-713f-a760-900ce12daf47", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} }, { - "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", - "to": "01a0d360-9b98-7a12-8e19-7cb0e921c70f", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a108de-2f51-7c49-8857-96a3ade6db33", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", + "from": "01a108de-2f51-7c49-8857-96a3ade6db33", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a108de-3e31-7fdf-a59e-f20b60a87f99", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd97-3bd6-7927-b759-6586861e448e", - "to": "01a0d2e3-bec0-76fe-aa44-2b586920fa06", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a108de-3e31-7fdf-a59e-f20b60a87f99", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "surfaces", + "attrs": {} }, { - "from": "01a0fd97-3bd6-7927-b759-6586861e448e", - "to": "01a0d360-9b98-7d22-a48d-23aee45dfcbc", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a108de-4d0c-73ca-9439-74a87d8cf815", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0fd97-3bd6-7927-b759-6586861e448e", + "from": "01a108de-4d0c-73ca-9439-74a87d8cf815", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a108de-5ca1-70b7-a9be-101b67f9b5b0", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", - "to": "01a0d360-9b98-7519-92ba-676eb4ef0d5e", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-5ca1-70b7-a9be-101b67f9b5b0", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "surfaces", + "attrs": {} }, { - "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", - "to": "01a0d360-9b98-7a12-8e19-7cb0e921c70f", - "via": "Applies to.Entity", - "attrs": { - "Type": "process", - "Owner": "" - } + "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", + "to": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", + "via": "activity", + "attrs": {} }, { - "from": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", + "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Delivery" - } + "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a108de-7c37-7b65-a051-0ca54a5997b0", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108de-7c37-7b65-a051-0ca54a5997b0", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a108de-8b7a-7ff6-9af0-9a7b8a38dc8c", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108de-8b7a-7ff6-9af0-9a7b8a38dc8c", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a108de-9aee-7747-92cb-eb38ab0410e2", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-9aee-7747-92cb-eb38ab0410e2", + "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", + "via": "surfaces", + "attrs": {} }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", + "from": "01a108de-a9c3-74b9-948e-906443f770ad", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} + }, + { + "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "Bears on.Entity", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Type": "surface", + "Owner": "", + "How": "keeps naming GitHub in its own prose" } }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "to": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "via": "enforces", + "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "by", "attrs": {} }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", - "to": "01a0d2e3-bec0-7e84-8613-65039131e51c", - "via": "performed-by", + "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", + "to": "01a108de-a9c3-74b9-948e-906443f770ad", + "via": "kind", "attrs": {} }, { - "from": "01a0ffcb-e733-7ee1-9d61-2ad0074dbe14", + "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", - "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Contribution" - } + "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", + "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", + "via": "status", + "attrs": {} }, { - "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", + "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "to": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "via": "Bears on.Entity", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Type": "data-processor", + "Owner": "", + "How": "says its processing may happen anywhere" } }, { - "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", - "to": "01a0fd97-0f94-707f-9233-7bb13ee17cf2", - "via": "enforces", + "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "by", "attrs": {} }, { - "from": "01a0ffcb-f64d-7b19-a126-b386e59263cc", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "to": "01a108de-a9c3-74b9-948e-906443f770ad", + "via": "kind", "attrs": {} }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", + "attrs": {} }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "to": "01a0d4bd-a710-765f-b25a-5227025665ff", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", + "via": "status", + "attrs": {} }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", + "from": "01a108de-d7fa-7f44-979a-431eb72120ee", + "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", + "via": "Bears on.Entity", "attrs": { - "Type": "phase", - "Owner": "Delivery" + "Type": "surface", + "Owner": "", + "How": "its Privacy page is built from the model" } }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", - "via": "Applies to.Entity", - "attrs": { - "Type": "seat", - "Owner": "" - } + "from": "01a108de-d7fa-7f44-979a-431eb72120ee", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "by", + "attrs": {} }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", - "to": "01a0fd96-f18b-731b-932f-1b021109ff23", - "via": "enforces", + "from": "01a108de-d7fa-7f44-979a-431eb72120ee", + "to": "01a108de-a9c3-74b9-948e-906443f770ad", + "via": "kind", "attrs": {} }, { - "from": "01a0ffcc-0534-753c-aca7-166b1b2dfd38", + "from": "01a108de-d7fa-7f44-979a-431eb72120ee", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Delivery" - } - }, - { - "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", - "to": "01a0fd96-b75c-7309-89d3-e68e3dcde4eb", - "via": "enforces", + "from": "01a108de-d7fa-7f44-979a-431eb72120ee", + "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", + "via": "status", "attrs": {} }, { - "from": "01a0ffcc-14c5-7ff9-bce5-b3d4bd5998af", + "from": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Contribution" - } + "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "by", + "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", - "via": "Applies to.Entity", - "attrs": { - "Type": "phase", - "Owner": "Delivery" - } + "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "to": "01a108de-a9c3-74b9-948e-906443f770ad", + "via": "kind", + "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "to": "01a0fd96-8ae6-7cc3-b367-9d9f6493125b", - "via": "enforces", + "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "to": "01a0fd96-a828-7ab7-a402-d88705435bb5", - "via": "enforces", + "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", + "via": "status", "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "to": "01a0fd97-005e-7317-851d-c5292e5a1719", - "via": "enforces", + "from": "01a12458-5154-7010-ba0e-9aa105b2bffa", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a0ffcc-23b4-7092-9bcf-940060921c56", + "from": "01a12458-610b-72ec-8eae-ee792bac7337", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a0ffcc-327f-7562-ac09-5df548965b62", - "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "from": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", + "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", "via": "Applies to.Entity", "attrs": { "Type": "phase", @@ -19020,19 +20812,7 @@ } }, { - "from": "01a0ffcc-327f-7562-ac09-5df548965b62", - "to": "01a0fd96-d495-7350-a65a-0b835ed49c6a", - "via": "enforces", - "attrs": {} - }, - { - "from": "01a0ffcc-327f-7562-ac09-5df548965b62", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} - }, - { - "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "from": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", "via": "Applies to.Entity", "attrs": { @@ -19041,7 +20821,7 @@ } }, { - "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "from": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", "via": "Applies to.Entity", "attrs": { @@ -19050,357 +20830,364 @@ } }, { - "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", - "to": "01a0fd97-3bd6-7927-b759-6586861e448e", + "from": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", + "to": "01a13c3b-bcac-73b9-a9e0-3bc936d5d27c", "via": "enforces", "attrs": {} }, { - "from": "01a0ffcc-4180-7f62-b037-6f93c2ab8e4d", + "from": "01a13c3b-bcac-71ee-ac2f-b1a009c4621b", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a101e9-720b-712f-8836-97a081d86c9e", - "to": "01a0ffcc-23b4-7092-9bcf-940060921c56", - "via": "assesses", - "attrs": {} - }, - { - "from": "01a101e9-720b-712f-8836-97a081d86c9e", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "owner", - "attrs": {} - }, - { - "from": "01a101e9-720b-712f-8836-97a081d86c9e", - "to": "01a0d9fc-6540-7dea-9b00-37bc509cb620", - "via": "read-with", - "attrs": {} + "from": "01a13c3b-bcac-733d-bcdd-46851e86a21a", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a101e9-720b-712f-8836-97a081d86c9e", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a13c3b-bcac-733d-bcdd-46851e86a21a", + "to": "01a0fd96-f18b-731b-932f-1b021109ff23", + "via": "enforces", "attrs": {} }, { - "from": "01a108dd-f1fd-7218-96bc-e52350522fa0", + "from": "01a13c3b-bcac-733d-bcdd-46851e86a21a", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-0195-7bc3-ad53-a16299aa585b", + "from": "01a13c3b-bcac-73b9-a9e0-3bc936d5d27c", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "to": "01a108dd-f1fd-7218-96bc-e52350522fa0", - "via": "Processors.Processor", - "attrs": { - "Receives": "The message and the earlier messages of the same conversation" - } - }, - { - "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "to": "01a108de-0195-7bc3-ad53-a16299aa585b", - "via": "Processors.Processor", + "from": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", "attrs": { - "Receives": "The messages and the visitor's address, on the way to the answer" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "to": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", - "via": "Processors.Processor", + "from": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", "attrs": { - "Receives": "The answer's sentences and the parts of the model's pages they rest on" + "Type": "phase", + "Owner": "Delivery" } }, { - "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "to": "01a13c3b-bcac-77ab-9a88-db0b9df63874", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", + "from": "01a13c3b-bcac-759f-a36d-6c5debdd029d", + "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", + "via": "source", "attrs": {} }, { - "from": "01a108de-2032-713f-a760-900ce12daf47", - "to": "01a108de-0195-7bc3-ad53-a16299aa585b", - "via": "Processors.Processor", + "from": "01a13c3b-bcac-773e-b292-07d708e86454", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", "attrs": { - "Receives": "The question and whether the model could answer it, kept in its Zürich region with the weekly report made from them" + "Type": "phase", + "Owner": "Contribution" } }, { - "from": "01a108de-2032-713f-a760-900ce12daf47", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} + "from": "01a13c3b-bcac-773e-b292-07d708e86454", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a108de-2032-713f-a760-900ce12daf47", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", + "from": "01a13c3b-bcac-773e-b292-07d708e86454", + "to": "01a0fd96-f18b-731b-932f-1b021109ff23", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-2f51-7c49-8857-96a3ade6db33", + "from": "01a13c3b-bcac-773e-b292-07d708e86454", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-2f51-7c49-8857-96a3ade6db33", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "surfaces", - "attrs": {} - }, - { - "from": "01a108de-3e31-7fdf-a59e-f20b60a87f99", + "from": "01a13c3b-bcac-77ab-9a88-db0b9df63874", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-3e31-7fdf-a59e-f20b60a87f99", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "surfaces", - "attrs": {} + "from": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", + "to": "01a0d2e3-bec0-779b-a0dc-cfd014dbef72", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a108de-4d0c-73ca-9439-74a87d8cf815", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", - "attrs": {} + "from": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a108de-4d0c-73ca-9439-74a87d8cf815", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "surfaces", + "from": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", + "to": "01a13c3b-bcac-7c87-887e-58290cbffaef", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-5ca1-70b7-a9be-101b67f9b5b0", + "from": "01a13c3b-bcac-78ef-92ca-b6eef73f2769", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-5ca1-70b7-a9be-101b67f9b5b0", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "surfaces", - "attrs": {} + "from": "01a13c3b-bcac-7c67-972c-d2b6671fd3ac", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } }, { - "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", - "to": "01a108de-10d0-7a3e-93cf-e7429ce5ae23", - "via": "activity", + "from": "01a13c3b-bcac-7c67-972c-d2b6671fd3ac", + "to": "01a0fd96-a828-7ab7-a402-d88705435bb5", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", + "from": "01a13c3b-bcac-7c67-972c-d2b6671fd3ac", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-6c48-78e8-92ea-94fd61a3d2a2", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", - "attrs": {} - }, - { - "from": "01a108de-7c37-7b65-a051-0ca54a5997b0", + "from": "01a13c3b-bcac-7c87-887e-58290cbffaef", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-7c37-7b65-a051-0ca54a5997b0", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", + "from": "01a13c3b-bcac-7df7-9a12-e973d8625df1", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Contribution" + } + }, + { + "from": "01a13c3b-bcac-7df7-9a12-e973d8625df1", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Delivery" + } + }, + { + "from": "01a13c3b-bcac-7df7-9a12-e973d8625df1", + "to": "01a0fd96-f18b-731b-932f-1b021109ff23", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-8b7a-7ff6-9af0-9a7b8a38dc8c", + "from": "01a13c3b-bcac-7df7-9a12-e973d8625df1", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-8b7a-7ff6-9af0-9a7b8a38dc8c", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", - "attrs": {} + "from": "01a13d68-db37-70a7-a505-5713fdca4f22", + "to": "01a0d360-9b98-7141-a5c8-8110f7de23bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Feature request" + } }, { - "from": "01a108de-9aee-7747-92cb-eb38ab0410e2", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a13d68-db37-70a7-a505-5713fdca4f22", + "to": "01a0fd97-4c04-7bfe-bd43-bbe2dabe460a", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-9aee-7747-92cb-eb38ab0410e2", - "to": "01a0d44e-8da8-71f1-b1c7-f56d11bb8dee", - "via": "surfaces", + "from": "01a13d68-db37-70a7-a505-5713fdca4f22", + "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", + "via": "performed-by", "attrs": {} }, { - "from": "01a108de-a9c3-74b9-948e-906443f770ad", + "from": "01a13d68-db37-70a7-a505-5713fdca4f22", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "Bears on.Entity", + "from": "01a13d68-db37-75d3-94ab-1955459a0828", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", "attrs": { - "Type": "surface", - "Owner": "", - "How": "keeps naming GitHub in its own prose" + "Type": "phase", + "Owner": "Delivery" } }, { - "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "by", - "attrs": {} - }, - { - "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", - "to": "01a108de-a9c3-74b9-948e-906443f770ad", - "via": "kind", + "from": "01a13d68-db37-75d3-94ab-1955459a0828", + "to": "01a0fd96-e33f-759b-ac5d-359f28f4d0a1", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", + "from": "01a13d68-db37-75d3-94ab-1955459a0828", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-b930-78ee-a86b-ef4704ba3c95", - "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", - "via": "status", - "attrs": {} + "from": "01a13d68-db37-7841-a30e-fa297747437e", + "to": "01a0d360-9b98-7270-9bc1-054b5bc8c4cf", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Contribution" + } }, { - "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", - "to": "01a108dd-f1fd-7218-96bc-e52350522fa0", - "via": "Bears on.Entity", + "from": "01a13d68-db37-7841-a30e-fa297747437e", + "to": "01a0d4bd-a710-76d5-a1ee-a4d90d3f95bc", + "via": "Applies to.Entity", "attrs": { - "Type": "data-processor", - "Owner": "", - "How": "says its processing may happen anywhere" + "Type": "phase", + "Owner": "Delivery" } }, { - "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "by", + "from": "01a13d68-db37-7841-a30e-fa297747437e", + "to": "01a0fd97-1e47-72a0-af1f-2ea9d0e0afad", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", - "to": "01a108de-a9c3-74b9-948e-906443f770ad", - "via": "kind", + "from": "01a13d68-db37-7841-a30e-fa297747437e", + "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", + "via": "performed-by", "attrs": {} }, { - "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", + "from": "01a13d68-db37-7841-a30e-fa297747437e", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-c8c9-7a5a-aea1-f561dc33927c", - "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", - "via": "status", - "attrs": {} + "from": "01a13d68-db37-786e-b64d-1fe60ac2adf0", + "to": "01a0d2e3-bec0-7a2e-94b4-0e27ad0f7568", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a108de-d7fa-7f44-979a-431eb72120ee", - "to": "01a0d4e2-c310-7fbe-8fbf-4bd6860d6cf3", - "via": "Bears on.Entity", + "from": "01a13d68-db37-786e-b64d-1fe60ac2adf0", + "to": "01a0d4bd-a710-765f-b25a-5227025665ff", + "via": "Applies to.Entity", "attrs": { - "Type": "surface", - "Owner": "", - "How": "its Privacy page is built from the model" + "Type": "seat", + "Owner": "" } }, { - "from": "01a108de-d7fa-7f44-979a-431eb72120ee", - "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "by", - "attrs": {} + "from": "01a13d68-db37-786e-b64d-1fe60ac2adf0", + "to": "01a0fadf-c0cd-780a-a53a-a59709231e8f", + "via": "Applies to.Entity", + "attrs": { + "Type": "seat", + "Owner": "" + } }, { - "from": "01a108de-d7fa-7f44-979a-431eb72120ee", - "to": "01a108de-a9c3-74b9-948e-906443f770ad", - "via": "kind", + "from": "01a13d68-db37-786e-b64d-1fe60ac2adf0", + "to": "01a0fd96-9996-7069-845d-acaa311d5008", + "via": "enforces", "attrs": {} }, { - "from": "01a108de-d7fa-7f44-979a-431eb72120ee", + "from": "01a13d68-db37-786e-b64d-1fe60ac2adf0", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a108de-d7fa-7f44-979a-431eb72120ee", - "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", - "via": "status", - "attrs": {} + "from": "01a13d68-db37-797f-86b0-67aecc352fe4", + "to": "01a0d360-9b98-7141-a5c8-8110f7de23bc", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Feature request" + } }, { - "from": "01a109b7-ea95-7ef7-b81c-f1a8a51a1b0a", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a13d68-db37-797f-86b0-67aecc352fe4", + "to": "01a0fd97-2d0f-7789-b3d0-65b1e24eecf7", + "via": "enforces", "attrs": {} }, { - "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "from": "01a13d68-db37-797f-86b0-67aecc352fe4", "to": "01a0d2e3-bec0-7fd9-81f6-bcd405d5b168", - "via": "by", - "attrs": {} - }, - { - "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", - "to": "01a108de-a9c3-74b9-948e-906443f770ad", - "via": "kind", + "via": "performed-by", "attrs": {} }, { - "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", + "from": "01a13d68-db37-797f-86b0-67aecc352fe4", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} }, { - "from": "01a1128e-e26e-7286-afbe-3de101a5f56e", - "to": "01a0dd52-d3a0-7afb-a186-0025d9fb5480", - "via": "status", - "attrs": {} + "from": "01a13d68-db37-7f46-b1e4-64a481a608d3", + "to": "01a0d360-9b98-7219-9e77-7a5f5d14fb7a", + "via": "Applies to.Entity", + "attrs": { + "Type": "phase", + "Owner": "Answering" + } }, { - "from": "01a12458-5154-7010-ba0e-9aa105b2bffa", - "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", - "via": "source", + "from": "01a13d68-db37-7f46-b1e4-64a481a608d3", + "to": "01a0fd96-c621-7f66-89a5-2cb3c213384a", + "via": "enforces", "attrs": {} }, { - "from": "01a12458-610b-72ec-8eae-ee792bac7337", + "from": "01a13d68-db37-7f46-b1e4-64a481a608d3", "to": "01a0d2e2-f788-7d70-903e-402e3f765e65", "via": "source", "attrs": {} diff --git a/model/og.sha b/model/og.sha index 4a1b432..bc69e18 100644 --- a/model/og.sha +++ b/model/og.sha @@ -1 +1 @@ -16ba3c1bf9e5f3bd1e31826bb56a3be50992912d351fa50461fd66251ba06977 +1d697da17b8c948d49f0feed8b991c5eadeb8827b70c26c821587245ec0f3971 diff --git a/principles/index.html b/principles/index.html index cf43889..2274bff 100644 --- a/principles/index.html +++ b/principles/index.html @@ -320,7 +320,7 @@

The core stays open

-

Generated from guestgraph/mental-model@d2efc96 — model/vision.md and model/values/. That repository is an instance of CompanyGraph, a meta-model for describing a company as a graph of Markdown.

+

Generated from guestgraph/mental-model@bd1aa8c — model/vision.md and model/values/. That repository is an instance of CompanyGraph, a meta-model for describing a company as a graph of Markdown.

diff --git a/principles/og.sha b/principles/og.sha index c2c30c8..5c68628 100644 --- a/principles/og.sha +++ b/principles/og.sha @@ -1 +1 @@ -fa8d76d1b655591c7806c94c7ad8983cb55969b0ac6eb4cfe1c1410c9459d3cd +b010f4e40486e353c97fe20962f2e6484c767c716a8bc710642b9efa04dc5181 diff --git a/privacy/index.html b/privacy/index.html index 839a6bd..9ffa99a 100644 --- a/privacy/index.html +++ b/privacy/index.html @@ -331,7 +331,7 @@

Where your data goes

-
On guestgraph.io
Your visit
@d2efc96
+
On guestgraph.io
Your visit
@bd1aa8c