Skip to content

A member decides once in settings whether machines may read their posts - #2153

Open
wintermeyer wants to merge 2 commits into
mainfrom
claude/publish-switches-2107
Open

A member decides once in settings whether machines may read their posts#2153
wintermeyer wants to merge 2 commits into
mainfrom
claude/publish-switches-2107

Conversation

@wintermeyer

@wintermeyer wintermeyer commented Sep 10, 2026

Copy link
Copy Markdown
Owner

Nothing kept search engines and AI away from a member's posts, and a post that said no leaked its whole body wherever it sat inside somebody else's — most sharply on /:slug, which is public, anonymous, in the sitemap and carries no X-Robots-Tag.

/settings/privacy now holds one switch, Search engines and AI may read my posts (Vutuv.Prefs' posts_machines_allowed?, default on). Vutuv.Posts stamps the answer onto posts.noindex_noai? as a post is published, so flipping it later leaves older posts exactly as they went out.

Three review rounds each measured completely and each missed the next surface, so this is enforced as a property rather than a list: a post's body leaves the database toward a machine-readable surface only through Posts.scope_machines_for/2, and test/vutuv/post_body_chokepoint_test.exs fails the build when a new query selects a body past it. Exceptions carry their reason. A withheld post also leaves the Fediverse, the sitemap and every listing document entirely; the HTML conversation still shows it to people.

To decide: page and doc differ on purpose, and /ModDate survives the strip.

Closes #2107

https://claude.ai/code/session_013VnEsuePUe2CB2QvDcshcp

@wintermeyer
wintermeyer force-pushed the claude/publish-switches-2107 branch 2 times, most recently from 619c1cd to 6d1fabb Compare September 11, 2026 06:24
@wintermeyer wintermeyer changed the title The composer asks whether machines may see a post, and whether to clean its files A member decides once in settings whether machines may read their posts Sep 11, 2026
Die Frage pro Beitrag im Composer wäre eine zu viel gewesen, denn sie ändert
sich zwischen zwei Beiträgen fast nie; sie liegt jetzt als `Vutuv.Prefs`-Schlüssel
auf /settings/privacy und wird beim Veröffentlichen auf die Zeile gestempelt,
damit ein späteres Umschalten ältere Beiträge genau so lässt, wie sie
hinausgegangen sind. Ein Prefs-Schlüssel statt einer Spalte, weil NULL "nie
gefragt" heißen muss: `noai?` steht bei 5.867 von 6.026 Mitgliedern auf dem
Spaltendefault, und niemand kann das von einer echten Antwort unterscheiden.
Zurückgehalten wird ein Beitrag auch dort, wo er in einem fremden Dokument
steckt (Unterhaltung, Antwort, Repost, Profil), und der Fediverse-Ausgang bleibt
auf allen Wegen zu, weil ein Server anderswo seine Kopie behält und kein Header
ihn erreicht. Die HTML-Unterhaltung zeigt ihn weiter: Seite und Dokument
unterscheiden sich absichtlich, weil das Versprechen Maschinen gilt und nicht
Lesern.

Der Composer fragt weiterhin nach den Metadaten der angehängten Dateien, über
qpdf, versteckt ohne die Flags aus 11.10.0.

Diesen Text hat ein KI-Agent in meinem Namen geschrieben. Ich weiß, dass das
problematisch ist.

Claude-Session: https://claude.ai/code/session_013VnEsuePUe2CB2QvDcshcp
…reicht

Drei Prüfrunden haben je eine vollständige Messung geliefert und je eine Fläche
übersehen, weil es keine Liste gibt, sondern nur eine Eigenschaft: der Rumpf
verlässt die Datenbank Richtung einer maschinenlesbaren Fläche jetzt nur noch
über `Posts.scope_machines_for/2`, und `post_body_chokepoint_test.exs` liest den
Quelltext und bricht den Build, wenn eine neue Abfrage daran vorbei einen `body`
selektiert. Das letzte Paar zeigt, warum das Tor in die Abfrage gehört:
`recent_posts_by_authors/3` selektiert in nackte Maps, an die kein Helfer
herankommt, und `pinned_post/2` holt per Id statt über eine Liste, sodass gar
kein Listengatter griff.

Zwei Überreichweiten fallen im selben Zug: `public_ancestors/2` nimmt jetzt den
Betrachter, damit ein Autor über seiner eigenen Antwort den zitierten
Elternbeitrag behält, und ein Dokument für ein angemeldetes Mitglied schwärzt
nicht mehr, was dieses Mitglied einen Klick weiter vollständig lesen darf. Eine
Schwärzung, die Lesende trifft, ist genauso falsch wie eine fehlende.

Diesen Text hat ein KI-Agent in meinem Namen geschrieben. Ich weiß, dass das
problematisch ist.

Claude-Session: https://claude.ai/code/session_013VnEsuePUe2CB2QvDcshcp
@wintermeyer
wintermeyer force-pushed the claude/publish-switches-2107 branch from 6d1fabb to 52d4954 Compare September 11, 2026 07:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A member decides once in settings whether machines may read their posts

1 participant