Oct 29
notefeed 0.34.0
Released 2026-10-29 · on GitHub
The operator can take down one post instead of the whole feed (#159, ADR 0052). With
"scope": "note",POST /api/operator/takedowntakes a note's read URL, an image URL or<read id>/<note id>(what a report carries). It removes the post: the note, the text it was posted with, and every picture posted with that text. Their images go on the blocklist, as with a feed takedown. In the post's place, the feed shows a mark: "Removed by the operator: this broke the content rules of this instance.", linked to the terms page when there is one. Whoever can post to the feed can delete the mark, but the post does not come back. The removed notes answer 410 (removed) in the API, MCP and their file links, also once the mark is deleted. Readers only learn of removals they could have seen: a removed draft, or a removed post dated later, is a missing note to them. Withoutscope, the takedown removes the whole feed, as before.In the APIs and clients the mark is a note with
removed: trueand the typeapplication/x-notefeed-removed. It has the removed note's id and date and no content. Getting or editing it answers 410 (removed), and deleting it works like for any note.Every note now counts against a feed's limits: texts, pictures and marks alike. On a free feed, the newest notes kept include pictures kept from a license that ran out, and the oldest note to go may be a picture or a mark.
NOTEFEED_MAX_NOTES_PER_FEEDcounts every note too;NOTEFEED_MAX_IMAGES_PER_FEEDstill limits pictures on their own. Takedowns of posts are counted innotefeed_notes_deleted_totalwithreason="takedown".Breaking:
NOTEFEED_MAX_NOTES_PER_FEEDcounted only text notes and now counts pictures as well. On an instance that sets it, a feed with many pictures reaches the limit sooner and further posts answer 507 (note_limit). Raise the value if that matters to you. A free feed's cap counts pictures too: a feed that kept pictures after its license ran out drops its oldest notes sooner.Upgrading: on SQLite and PostgreSQL the first start adds a table (migration
008_note_tombstones); take a backup first. No setting changes.MCP:
list_notesandget_notemark the operator's marks withremoved: true;get_noteandedit_noterefuse a removed note, anddelete_notedeletes a mark. Assistants see this after reconnecting (Claude: a new chat, or remove and add the connector; Claude Code: restart).