Skip to content

Reporting a foreign post takes every copy its own server vouches for - #2176

Merged
wintermeyer merged 3 commits into
mainfrom
claude/external-post-report-2164b
Sep 11, 2026
Merged

Reporting a foreign post takes every copy its own server vouches for#2176
wintermeyer merged 3 commits into
mainfrom
claude/external-post-report-2164b

Conversation

@wintermeyer

@wintermeyer wintermeyer commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Reporting a post one of your followed tags pulled from another server blanked
the clicked row and left the identical copies from the other servers standing,
under a sentence promising they were gone.

This re-lands #2169, reverted as 8b2c1a862. That version related the copies by
the post's address plus its author host, and the polled server writes both while
any member may add any host as a tag source. A planted card could blank honest
copies of somebody else's post, and a tombstone planted first kept it out of the
table for good.

The guard: only a row whose polled server, permalink host and author host all
name one server may reach copies it did not file; every other row reaches the
rows its own server filed. The ingest gate asks the same question, so a forged
tombstone refuses nothing. Two sentences now say which happened.

Where: Vutuv.Tags.ExternalPosts.reaches?/2, a card's ⋯ menu on /feed.

Closes #2164

An AI agent wrote this text in my name. I know that is problematic.

https://claude.ai/code/session_01AW11tx7rYiSEaRDjPFNghY

@wintermeyer

Copy link
Copy Markdown
Owner Author

Red three times in a row, each time in the attachment tests — message_attachment_web_test.exs:196, then :160, then chat_attachments_test.exs:198 and :152. This branch touches no attachment code and neither test file. It is #2186: the preview page of a text attachment is drawn by headless Chromium under a 30 s deadline, and a loaded runner misses it.

Waiting for #2186 rather than re-running again, then rebasing.

An AI agent wrote this text in my name. I know that is problematic.

…vers

Der Satz über dem Melden-Knopf versprach, unsere Kopie verschwinde sofort für
alle, und ließ die übrigen Kopien desselben Beitrags stehen. Ein Melden nimmt
sie jetzt mit, aber nur wenn die gemeldete Zeile vom Server des Autors selbst
kommt: Adresse und Autor-Host schreibt der abgefragte Server, und jedes Mitglied
darf jeden Host als Tag-Quelle eintragen, also hat die erste Fassung
(7cdfd4d) auf das Wort eines untergeschobenen Kärtchens hin ehrliche Kopien
geleert und wurde zurückgenommen. Jede andere Zeile nimmt nur die Zeilen
desselben Servers mit, der Abruf stellt beim Speichern dieselbe Frage, damit ein
gesetzter Grabstein keinen fremden Beitrag draußen halten kann, und die beiden
deutschen Sätze sagen jetzt, welcher der beiden Fälle eingetreten ist.

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

Claude-Session: https://claude.ai/code/session_01AW11tx7rYiSEaRDjPFNghY
Wer beurteilt, ob eine Zeile vom Server des Autors kommt, verglich die Hosts mit
gefaltetem `www.` — und `www.<host>` ist eine Unterdomäne, die ein hängender
CNAME oder ein alter CDN-Eintrag an jemanden gibt, der die Hauptdomäne nicht
hält. Da die Faltung beim Eintragen einer Tag-Quelle nur ein Label entfernte,
ließ sich `www.www.opfer.example` eintragen, als `www.opfer.example` speichern
und abfragen, und eine von dort servierte Karte sprach für den Autor: genau der
Angriff, für den 7cdfd4d zurückgenommen wurde, nur durch eine andere Tür.

Die Autoritätsfrage vergleicht jetzt ohne Faltung, der Schlüssel faltet weiter
(dort beschreibt sie nur, dass zwei Schreibweisen ein Beitrag sind), und
`strip_www/1` entfernt jedes führende Label, damit sich die Faltung nicht
umgehen lässt. Dazu drei kleinere Funde derselben Runde: eine unlesbare Adresse
ist jetzt gar kein Schlüssel statt einer Ausnahme mitten im Speichern, das
Auspacken einer Weiterleitung ist auf das gemessene `/r/` festgenagelt, und beide
Sätze über die Faltung stehen dort, wo sie gilt.

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

Claude-Session: https://claude.ai/code/session_01AW11tx7rYiSEaRDjPFNghY
@wintermeyer
wintermeyer force-pushed the claude/external-post-report-2164b branch from a42e1aa to 3bb074a Compare September 11, 2026 12:09
Der Ausdruck fand `/r/` an jeder Stelle des Pfades, sodass ein Mieter eines
Hosts, der Pfade vergibt, mit `…/@mallory/r/<fremde Adresse>` den Schlüssel
eines Nachbarn erzeugen konnte, während der Kommentar daneben eine Bindung an
das Präfix behauptete. Der Test dazu benutzte `/read/`, eine Form, die keine der
beiden Regeln je entpackt hat, und war damit grün, ohne das zu prüfen, was er
benennt. Ausnutzbar war das nicht, denn die Autorenhälfte des Schlüssels und
`home_copy?/1` halten eine solche Kollision auf Zeilen desselben Servers
fest; auf echten Daten kostet die Bindung nichts, weil alle 12 eingebetteten
Adressen unter 9.945 gespeicherten Beiträgen hinter einem `/r/` am Pfadanfang
stehen.

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

Claude-Session: https://claude.ai/code/session_01AW11tx7rYiSEaRDjPFNghY
@wintermeyer
wintermeyer merged commit f5a8e8a into main Sep 11, 2026
1 check passed
@wintermeyer
wintermeyer deleted the claude/external-post-report-2164b branch September 11, 2026 13:22
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.

Reporting a foreign post leaves its copies standing, and the message says otherwise

1 participant