diff --git a/build/privacy.de.json b/build/privacy.de.json index 9e44952..ce79ed1 100644 --- a/build/privacy.de.json +++ b/build/privacy.de.json @@ -58,5 +58,45 @@ { "en": "The question and whether the model could answer it, kept in its Zürich region with the weekly report made from them", "de": "Die Frage und ob das Modell sie beantworten konnte, aufbewahrt in der Region Zürich, zusammen mit dem wöchentlichen Bericht, der aus den Fragen entsteht" + }, + { + "en": "The model and the effort the signed-in reader chose for the chat's answers", + "de": "Das Modell und der Aufwand, die Sie nach der Anmeldung für die Antworten des Chats gewählt haben" + }, + { + "en": "The access token and the ID token from the reader's sign-in at id.blust.ch, so that each message to the chat carries the access token", + "de": "Das Zugriffstoken und das ID-Token aus Ihrer Anmeldung bei id.blust.ch, damit das Zugriffstoken mit jeder Nachricht an den Chat mitgeschickt wird" + }, + { + "en": "Until the reader signs out, the chat refuses the token or the visitor clears it", + "de": "Bis Sie sich abmelden, der Chat das Token ablehnt oder Sie es löschen" + }, + { + "en": "The secret that proves a sign-in was started in this tab, its state and the page it started from, kept only for the trip to the login at id.blust.ch and back", + "de": "Das Geheimnis, das belegt, dass eine Anmeldung in diesem Tab begonnen wurde, dazu ihr Zustand und die Seite, auf der sie begann. Aufbewahrt nur für den Weg zur Anmeldeseite von id.blust.ch und zurück" + }, + { + "en": "Counting a reader's month", + "de": "Der Monatszähler einer angemeldeten Person" + }, + { + "en": "Only the month last counted, which the reader's first message of a new month replaces", + "de": "Nur der zuletzt gezählte Monat, den Ihre erste Nachricht in einem neuen Monat ersetzt" + }, + { + "en": "What the reader's answers cost this month, in its Zurich region, under a key the chat cannot turn back into the account", + "de": "Was die Antworten an Sie in diesem Monat kosten, aufbewahrt in der Region Zürich unter einem Schlüssel, aus dem der Chat nicht auf das Konto zurückschliessen kann" + }, + { + "en": "Signing a reader in", + "de": "Anmeldung im Chat" + }, + { + "en": "As long as the reader's account at id.blust.ch exists", + "de": "Solange Ihr Konto bei id.blust.ch besteht" + }, + { + "en": "The reader's name, email address and roles, held by id.blust.ch in its Zurich region, and the access token each message carries", + "de": "Ihr Name, Ihre E-Mail-Adresse und Ihre Rollen, die id.blust.ch in der Region Zürich aufbewahrt, und das Zugriffstoken, das mit jeder Nachricht mitgeschickt wird" } ] diff --git a/id/01a170fb-3c35-75b6-a369-580128e17173/index.html b/id/01a170fb-3c35-75b6-a369-580128e17173/index.html new file mode 100644 index 0000000..3fe87d7 --- /dev/null +++ b/id/01a170fb-3c35-75b6-a369-580128e17173/index.html @@ -0,0 +1,13 @@ + + + + + +chat-signin + + + + +

Go on to chat-signin.

+ + diff --git a/id/01a170fb-4c16-7661-b909-d129ab3d9b2d/index.html b/id/01a170fb-4c16-7661-b909-d129ab3d9b2d/index.html new file mode 100644 index 0000000..c6b6c15 --- /dev/null +++ b/id/01a170fb-4c16-7661-b909-d129ab3d9b2d/index.html @@ -0,0 +1,13 @@ + + + + + +chat-choice + + + + +

Go on to chat-choice.

+ + diff --git a/id/01a170fb-5d14-73fc-813c-9d183b893661/index.html b/id/01a170fb-5d14-73fc-813c-9d183b893661/index.html new file mode 100644 index 0000000..15de514 --- /dev/null +++ b/id/01a170fb-5d14-73fc-813c-9d183b893661/index.html @@ -0,0 +1,13 @@ + + + + + +chat-pkce + + + + +

Go on to chat-pkce.

+ + diff --git a/id/01a170fb-6d2a-721f-bedd-43fe48ab26f2/index.html b/id/01a170fb-6d2a-721f-bedd-43fe48ab26f2/index.html new file mode 100644 index 0000000..f75bd56 --- /dev/null +++ b/id/01a170fb-6d2a-721f-bedd-43fe48ab26f2/index.html @@ -0,0 +1,13 @@ + + + + + +Signing a reader in + + + + +

Go on to Signing a reader in.

+ + diff --git a/id/01a170fb-7c91-7e1b-b5e5-eae3d2ae671c/index.html b/id/01a170fb-7c91-7e1b-b5e5-eae3d2ae671c/index.html new file mode 100644 index 0000000..917cbce --- /dev/null +++ b/id/01a170fb-7c91-7e1b-b5e5-eae3d2ae671c/index.html @@ -0,0 +1,13 @@ + + + + + +Counting a reader's month + + + + +

Go on to Counting a reader's month.

+ + diff --git a/model.json b/model.json index 8c945b9..0afdb96 100644 --- a/model.json +++ b/model.json @@ -1,5 +1,5 @@ { - "commit": "f2ef1257b2f932f51ccea59582dcd9e8d9a7cbcc", + "commit": "c259512efa40734c3fa9102ef718d0641bfcb9e7", "core": "0.69.0", "root": "Robert Blust", "rootId": "01a04c85-bc20-7849-9ec1-d877215d70b4", @@ -2726,7 +2726,7 @@ "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.", + "tagline": "Runs the chat service, the MCP server and the identity service id.blust.ch, which is ZITADEL, in its Zurich region, and keeps there the chat's log of questions, the readers' accounts and each signed-in reader's month.", "fields": { "id": "01a108dc-de29-78aa-9804-a6150ebfabad", "source": "Local", @@ -8224,6 +8224,68 @@ "owner": null, "path": "model/processing-activities/answering-in-the-chat.md" }, + { + "id": "01a170fb-7c91-7e1b-b5e5-eae3d2ae671c", + "address": "processing-activities/counting-a-reader-s-month", + "type": "processing-activity", + "name": "Counting a reader's month", + "tagline": "Counting what a signed-in reader's answers cost in the month, so that no reader spends more of the chat's month than their own share.", + "fields": { + "id": "01a170fb-7c91-7e1b-b5e5-eae3d2ae671c", + "source": "Local", + "legal-basis": "legitimate-interests", + "retention": "Only the month last counted, which the reader's first message of a new month replaces", + "surfaces": [ + "chat.blust.ch chat" + ] + }, + "sections": [ + { + "heading": "Data subjects", + "text": "- Readers who sign in to the chat and send a message", + "tables": [] + }, + { + "heading": "Personal data", + "text": "- What the reader's answers cost this month, kept under a key made from their account that the chat cannot turn back into it", + "tables": [] + }, + { + "heading": "Processors", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Processor", + "Receives" + ], + "rows": [ + [ + "Google Cloud", + "What the reader's answers cost this month, in its Zurich region, under a key the chat cannot turn back into the account" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Processor", + "Receives" + ], + "rows": [ + [ + "Google Cloud", + "What the reader's answers cost this month, in its Zurich region, under a key the chat cannot turn back into the account" + ] + ] + } + } + ], + "owner": null, + "path": "model/processing-activities/counting-a-reader-s-month.md" + }, { "id": "01a108dc-fd15-708e-b4a7-735d8fc5592e", "address": "processing-activities/keeping-the-chat-s-questions", @@ -8247,7 +8309,7 @@ }, { "heading": "Personal data", - "text": "- The question a visitor sent, kept without their address and without the answer", + "text": "- The question a visitor sent, kept without their address, their sign-in or the answer", "tables": [] }, { @@ -8286,6 +8348,68 @@ "owner": null, "path": "model/processing-activities/keeping-the-chat-s-questions.md" }, + { + "id": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "address": "processing-activities/signing-a-reader-in", + "type": "processing-activity", + "name": "Signing a reader in", + "tagline": "Letting a reader the owner has invited sign in to the chat, so that it knows which models the reader may choose.", + "fields": { + "id": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "source": "Local", + "legal-basis": "legitimate-interests", + "retention": "As long as the reader's account at id.blust.ch exists", + "surfaces": [ + "chat.blust.ch chat" + ] + }, + "sections": [ + { + "heading": "Data subjects", + "text": "- Readers the owner has invited to sign in to the chat", + "tables": [] + }, + { + "heading": "Personal data", + "text": "- The reader's name and email address, which their account at id.blust.ch holds\n- The roles granted to the reader, which name the models they may choose\n- The tokens the sign-in issues, kept in the reader's browser, and the access token each message carries to the chat, which checks it", + "tables": [] + }, + { + "heading": "Processors", + "text": "", + "tables": [ + { + "caption": null, + "columns": [ + "Processor", + "Receives" + ], + "rows": [ + [ + "Google Cloud", + "The reader's name, email address and roles, held by id.blust.ch in its Zurich region, and the access token each message carries" + ] + ] + } + ], + "table": { + "caption": null, + "columns": [ + "Processor", + "Receives" + ], + "rows": [ + [ + "Google Cloud", + "The reader's name, email address and roles, held by id.blust.ch in its Zurich region, and the access token each message carries" + ] + ] + } + } + ], + "owner": null, + "path": "model/processing-activities/signing-a-reader-in.md" + }, { "id": "01a12457-c64f-7a57-97e5-b36e80289743", "address": "product-kinds/model", @@ -21194,6 +21318,26 @@ "owner": null, "path": "model/stored-items/chat.md" }, + { + "id": "01a170fb-4c16-7661-b909-d129ab3d9b2d", + "address": "stored-items/chat-choice", + "type": "stored-item", + "name": "chat-choice", + "tagline": "The model and the effort the signed-in reader chose for the chat's answers.", + "fields": { + "id": "01a170fb-4c16-7661-b909-d129ab3d9b2d", + "source": "Local", + "mechanism": "local-storage", + "necessity": "strictly-necessary", + "duration": "Until the visitor clears it", + "surfaces": [ + "chat.blust.ch chat" + ] + }, + "sections": [], + "owner": null, + "path": "model/stored-items/chat-choice.md" + }, { "id": "01a108dd-85a4-7a5b-8055-872abe683db8", "address": "stored-items/chat-facts", @@ -21232,6 +21376,46 @@ "owner": null, "path": "model/stored-items/chat-pictures.md" }, + { + "id": "01a170fb-5d14-73fc-813c-9d183b893661", + "address": "stored-items/chat-pkce", + "type": "stored-item", + "name": "chat-pkce", + "tagline": "The secret that proves a sign-in was started in this tab, its state and the page it started from, kept only for the trip to the login at id.blust.ch and back.", + "fields": { + "id": "01a170fb-5d14-73fc-813c-9d183b893661", + "source": "Local", + "mechanism": "session-storage", + "necessity": "strictly-necessary", + "surfaces": [ + "chat.blust.ch chat" + ] + }, + "sections": [], + "owner": null, + "path": "model/stored-items/chat-pkce.md" + }, + { + "id": "01a170fb-3c35-75b6-a369-580128e17173", + "address": "stored-items/chat-signin", + "type": "stored-item", + "name": "chat-signin", + "tagline": "The access token and the ID token from the reader's sign-in at id.blust.ch, so that each message to the chat carries the access token.", + "fields": { + "id": "01a170fb-3c35-75b6-a369-580128e17173", + "source": "Local", + "mechanism": "local-storage", + "necessity": "strictly-necessary", + "duration": "Until the reader signs out, the chat refuses the token or the visitor clears it", + "surfaces": [ + "chat.blust.ch chat" + ], + "activity": "Signing a reader in" + }, + "sections": [], + "owner": null, + "path": "model/stored-items/chat-signin.md" + }, { "id": "01a108dd-6751-7040-bd3c-4bb5ecf70bc6", "address": "stored-items/chat-size", @@ -33305,6 +33489,88 @@ "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", "via": "source", "attrs": {} + }, + { + "from": "01a170fb-3c35-75b6-a369-580128e17173", + "to": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "via": "activity", + "attrs": {} + }, + { + "from": "01a170fb-3c35-75b6-a369-580128e17173", + "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", + "via": "source", + "attrs": {} + }, + { + "from": "01a170fb-3c35-75b6-a369-580128e17173", + "to": "01a0c9f6-44b8-757d-a3e5-7401751adee7", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a170fb-4c16-7661-b909-d129ab3d9b2d", + "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", + "via": "source", + "attrs": {} + }, + { + "from": "01a170fb-4c16-7661-b909-d129ab3d9b2d", + "to": "01a0c9f6-44b8-757d-a3e5-7401751adee7", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a170fb-5d14-73fc-813c-9d183b893661", + "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", + "via": "source", + "attrs": {} + }, + { + "from": "01a170fb-5d14-73fc-813c-9d183b893661", + "to": "01a0c9f6-44b8-757d-a3e5-7401751adee7", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "to": "01a108dc-de29-78aa-9804-a6150ebfabad", + "via": "Processors.Processor", + "attrs": { + "Receives": "The reader's name, email address and roles, held by id.blust.ch in its Zurich region, and the access token each message carries" + } + }, + { + "from": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", + "via": "source", + "attrs": {} + }, + { + "from": "01a170fb-6d2a-721f-bedd-43fe48ab26f2", + "to": "01a0c9f6-44b8-757d-a3e5-7401751adee7", + "via": "surfaces", + "attrs": {} + }, + { + "from": "01a170fb-7c91-7e1b-b5e5-eae3d2ae671c", + "to": "01a108dc-de29-78aa-9804-a6150ebfabad", + "via": "Processors.Processor", + "attrs": { + "Receives": "What the reader's answers cost this month, in its Zurich region, under a key the chat cannot turn back into the account" + } + }, + { + "from": "01a170fb-7c91-7e1b-b5e5-eae3d2ae671c", + "to": "01a03d8e-dd00-7372-ac62-ba79f12bf81a", + "via": "source", + "attrs": {} + }, + { + "from": "01a170fb-7c91-7e1b-b5e5-eae3d2ae671c", + "to": "01a0c9f6-44b8-757d-a3e5-7401751adee7", + "via": "surfaces", + "attrs": {} } ], "repo": "robertblust/mental-model" diff --git a/model/og.sha b/model/og.sha index 7d789e5..c603d42 100644 --- a/model/og.sha +++ b/model/og.sha @@ -1 +1 @@ -035ab63caabe16d74dfd0e93715bae5fd2edc42390c2b275320a1b1188ca4166 +ebc452621cd2a289a901344ba89207fed58c964eab21e17fe2b85984a25e5537 diff --git a/principles/index.html b/principles/index.html index d109610..8f60521 100644 --- a/principles/index.html +++ b/principles/index.html @@ -337,7 +337,7 @@

Production is the finish line

-

Generated from robertblust/mental-model@f2ef125 — 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 robertblust/mental-model@c259512 — 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 8c6d003..d763f29 100644 --- a/principles/og.sha +++ b/principles/og.sha @@ -1 +1 @@ -a293245709e957b089404ed06b9321f4449d620ab3ca85ad508990ec99407ad7 +e3b6dce5253245bf0f5378fc7a0df039a7c9680e51410d0b7ba5a55588a254d6 diff --git a/privacy/index.html b/privacy/index.html index 9cb962a..6b4e585 100644 --- a/privacy/index.html +++ b/privacy/index.html @@ -335,11 +335,13 @@

Where your data goes

-
On blust.ch
Your visit
@f2ef125
+
On blust.ch
Your visit
@c259512
+
  • +
    Counting a reader's monthlegitimate interests · Only the month last counted, which the reader's first message of a new month replaces
    + +
  • Keeping the chat's questionslegitimate interests · 90 days
  • +
  • +
    Signing a reader inlegitimate interests · As long as the reader's account at id.blust.ch exists
    + +
  • diff --git a/privacy/og.png b/privacy/og.png index 36e85d8..6a579f8 100644 Binary files a/privacy/og.png and b/privacy/og.png differ diff --git a/privacy/og.sha b/privacy/og.sha index ddb0f90..661c7a8 100644 --- a/privacy/og.sha +++ b/privacy/og.sha @@ -1 +1 @@ -3a5cfacaf7c78674bb81fd06ae0757fbb0edcd2be61448386342eeb62dc5cbf1 +a97c64b659f599c39c237d41abcbbf99dcf5fee8b55430c30328914aa1fb06b6 diff --git a/processes/og.sha b/processes/og.sha index 0296e6f..1dd339d 100644 --- a/processes/og.sha +++ b/processes/og.sha @@ -1 +1 @@ -345b0675bf59a45d78c49a49a328493a31a3a22d22814cd3711b0c7a517265b8 +7e878999753343b538b1c1b25450aa72e7f5fbfa67af349c44c93f649e1dd301 diff --git a/sitemap.xml b/sitemap.xml index 112f7e5..fdc697e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -9,11 +9,11 @@ https://blust.ch/blog/2026-10-24monthly0.8 https://blust.ch/blog/one-question-answered/2026-10-24monthly0.9 https://blust.ch/blog/deciding-well-solved/2026-10-24monthly0.9 - https://blust.ch/principles/2026-10-24monthly0.8 - https://blust.ch/model/2026-10-24monthly0.8 - https://blust.ch/surfaces/2026-10-24monthly0.8 - https://blust.ch/processes/2026-10-24monthly0.8 - https://blust.ch/timeline/2026-10-24monthly0.8 - https://blust.ch/privacy/2026-10-24 + https://blust.ch/principles/2026-10-25monthly0.8 + https://blust.ch/model/2026-10-25monthly0.8 + https://blust.ch/surfaces/2026-10-25monthly0.8 + https://blust.ch/processes/2026-10-25monthly0.8 + https://blust.ch/timeline/2026-10-25monthly0.8 + https://blust.ch/privacy/2026-10-25 https://blust.ch/ideas/2026-10-24 diff --git a/source.json b/source.json index 443839f..bb44f36 100644 --- a/source.json +++ b/source.json @@ -1 +1 @@ -{"repo":"robertblust/mental-model","commit":"f2ef1257b2f932f51ccea59582dcd9e8d9a7cbcc"} \ No newline at end of file +{"repo":"robertblust/mental-model","commit":"c259512efa40734c3fa9102ef718d0641bfcb9e7"} \ No newline at end of file diff --git a/surfaces/index.html b/surfaces/index.html index e0431f4..8d23f8e 100644 --- a/surfaces/index.html +++ b/surfaces/index.html @@ -351,7 +351,7 @@

    -
    The model
    mental-model
    @f2ef125
    +
    The model
    mental-model
    @c259512