Skip to content

M2-18 Auto title and placeholder detection

No Date Ruling Reason
D-M2-18-0 2026-10-22 Built on an old integration branch with M2-08 and M2-09 stacked, then ported onto main once both had landed: only the ticket's own commits were taken over, the chapter names follow main (09-agents.md), the generated clients were regenerated, and the run-driven tests stand in for pollAgentEvents with runs.Delivery like the M2-09 tests (the world has no gateway). The steering task wins over the brief; the merged names win (D-W-100).
D-M2-18-1 2026-10-21 The placeholder words are data per language in internal/chat/domain/title/wordlists/<lang>.txt (SPDX line first, # comments, one normalised entry per line), embedded with embed.FS and parsed once at initialisation; the schema default of thread.placeholder_titles is title.DefaultConfigText(), the union in language and file order without repeats, so the words exist once. A new language is a new file plus the new default in 09 section 21. REUSE 5.1 "Adaptation", D-L4; reading an embedded file touches only memory, so the domain stays free of input and output.
D-M2-18-2 2026-10-21 The default holds no empty entry; the empty title is a placeholder through 09 section 12 point 2 itself, and a configured entry that is blank after normalisation is ignored. Replaces M1-55/2 for the order of the default. The loader rejects an empty list element (M1-07).
D-M2-18-3 2026-10-21 Numbered form: a normalised title P + " " + D with D one or more ASCII digits and P a non-empty entry under strings.EqualFold; the empty entry has no numbered form, so "2026" is a real title. 09 section 12 point 2 "with an appended number"; other digits and characters are real titles.
D-M2-18-4 2026-10-21 No Unicode NFKC and no "only punctuation up to a fixed length" rule, although REUSE 5.1 names both. 09 section 12 point 2 ends with "Otherwise the source becomes manual"; NFKC needs a library outside the standard library, a fixed length would be a threshold without a key.
D-M2-18-5 2026-10-21 The placeholder rule applies to every creation by a person that carries a title, forum post and thread from a message alike. The reason of 09 section 12 point 2 ("New chat" is not a title anyone wants to keep) holds for both.
D-M2-18-6 2026-10-21 A person's title change always gives manual, also with a placeholder text and on a manual thread. Placeholder detection runs only at creation (R-AG-15); a person who sets a title chose it.
D-M2-18-7 2026-10-21 An agent or app other than the thread's operator agent that passes thread.title.update (as creator) sets manual; 09 section 12 point 1 and the description of setThreadTitle say so now. 05 thread.title.update exempts only the operator agent, and the core contract wins (SPEC 8).