The public record of TLS
Ask why a team made a decision. Get the real conversation behind it.
Ratified reads the public IETF TLS mailing list, so every answer links straight to the original email.
Ask a question
Type what you want to know in plain words.
We find the discussion
Ratified searches the mailing-list threads and drafts that decided it.
You click through to the source
Every claim opens the original email or RFC text.
You just joined a team shipping TLS 1.3. Why does RFC 8446 negotiate the version in a supported_versions extension, and who do you ask?
8,300 nodes · 55,603 edges · 3,078 list messages in the graph
What do you want to know?
Your answer
Ask another questionNo answer yet. Ask a question and the discussion behind it will show up here.
Ask a questionBrowse the record
Most connected people ranks who wrote in the same threads most often. Being central is not the same as being right.
- 1Eric Rescorla108 threads · 42 clauses cited
- 2Sean Turner78 threads · 13 clauses cited
- 3Rich Salz32 threads · 0 clauses cited
- 4Ilari Liusvaara44 threads · 10 clauses cited
- 5Martin Thomson50 threads · 6 clauses cited
- 6David Benjamin48 threads · 7 clauses cited
How it works (for the curious)
Every question routes to one of these fixed tools, each a hand-written Cypher query. No model writes Cypher or citations.
why_clause(number, heading, topic, draft) — where a shipped clause was discussed while still changing, clauses discussed with it, who to ask now, and a drafted (never sent) question; a plain-words topic is resolved by FalkorDB's full-text indexsearch_discussion(text) — what people wrote about a topic: FalkorDB full-text over message text, expanded to threads, authors and the clauses each message citeswho_knows() — the most central people in the list's discussions: algo.pageRank and algo.betweenness over who wrote in the same threadsaggregate_unresolved(draft) — clauses of a draft discussed while still changing, with no later resolution trailwho_argued(draft) — people who discussed a draft on the list, with their messageswhat_happened_to(number) — what happened to a clause across revisions and the RFCprecedent(message_id) — trace a message to a revision and the RFC section it becamesync(days) — how current the graph is, by record datesection_by_heading(draft, heading) — the section number a heading names, from the draft's RFCrevisions(draft, lo, hi, latest, count) — a draft's revisions: list them, bound them to a range, count them, or name the latestcount_unresolved(draft) — how many clauses of a draft were discussed while still changing, with no later resolution trailchairs(wg) — the chairs of the working group, and its area directors, from CHAIRS/AD_FORbecame_rfc(draft) — the RFC a draft became, from the BECAME edgethreads_by_subject(pattern) — thread ids whose subject names a distinctive pattern, from Thread/Message subjectscount_became(draft) — how many drafts in a family the record shows became an RFCcount_thread_messages(thread_or_draft) — how many messages a thread (or a draft's discussion) carries