Repository source: docs/specs/thread_subject_record_v1.md
Thread Subject Record V1
This document defines the canonical append-only thread-subject record family: one event that sets the displayed title (subject) of an existing thread without rewriting the thread root post.
Scope and location
One ASCII text file represents one subject-set event.
Files live in
records/thread-subjects/<record-id>.txt; the filename stem must matchRecord-ID, which keeps thethread-subject-prefix.V1 supports
Operation: setonly. There is no clear or remove operation.
Format
Headers in Key: Value form, then one blank line, then an optional (usually
empty) body.
Record-ID(required)Created-At(required): RFC 3339 UTC, for example2026-11-03T05:13:04Z; authoritative canonical time for orderingThread-ID(required): the root post ID of the target threadOperation(required):setSubject(required): the new title, one line, leading and trailing space trimmedAuthor-Identity-ID(optional):openpgp:and 40 lowercase hex digits; present on authored records, absent on system recordsSource-Post-IDandSource-Post-SHA256(optional, together): the reply whosetitle:line produced this record and the SHA-256 of that reply's exact canonical bytes; one without the other is rejectedAction-At(optional): RFC 3339 UTC, milliseconds allowedIntent-ID(optional): offline signed intent that produced the recordReason(optional): short ASCII explanation
Two kinds of record
System records have no
Author-Identity-ID. The media-embed title fetch writes them. They fill only an empty subject; the earliest one wins and none ever overrides a title a person gave.Authored records carry
Author-Identity-IDand normally reply provenance. The write path produces one only when the author had authority for that thread at write time (see the thread title concept). The latest authored record wins over the root post's ownSubjectheader and over system records.
An authored record whose source reply is retracted or deleted is withdrawn: readers
skip it and the previously effective title returns. A record whose Thread-ID is
not a known root thread is counted invalid and ignored.
Example
Record-ID: thread-subject-20261103051500-2fa9fbd6
Created-At: 2026-11-03T05:15:00Z
Thread-ID: thread-20261103051304-2fa9fbd6
Operation: set
Subject: Retitle a thread from a reply
Author-Identity-ID: openpgp:0168ff20eb09c3ea6193bd3c92a73aa7d20a0954
Source-Post-ID: reply-20261103051500-7c1d2e3f
Source-Post-SHA256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Reason: Title directive in reply
Signatures
A detached ASCII-armored OpenPGP signature may accompany the exact record bytes
as <record-id>.txt.asc, verified against Author-Identity-ID. Unsigned records
remain valid. Signing changes neither precedence nor authority.
Compatibility
Records written before this document (system records without provenance) remain valid and keep their fill-empty behavior. Readers that predate the provenance headers ignore unknown headers and still read the subject.