aboutsummaryrefslogtreecommitdiff
path: root/spec/STYLE.md
diff options
context:
space:
mode:
Diffstat (limited to 'spec/STYLE.md')
-rw-r--r--spec/STYLE.md189
1 files changed, 189 insertions, 0 deletions
diff --git a/spec/STYLE.md b/spec/STYLE.md
new file mode 100644
index 0000000..8111084
--- /dev/null
+++ b/spec/STYLE.md
@@ -0,0 +1,189 @@
+# Tor specifications: style and usage notes
+
+## Audience
+
+The primary intended audiences are:
+
+ * Programmers:
+ implementors of the Tor Protocols.
+ This includes both maintainers of existing implementations,
+ and people writing new implementations.
+
+ * Researchers:
+ people analysing the security of the Tor Protocols,
+ including both academic research and
+ practical security investigation.
+
+ * Expert users who wish to fully understand
+ the operation of their Tor software.
+ This includes users of clients and relays.
+
+ * Directory authority operators,
+ and others with a critical technical role
+ in the integrity of the Tor network.
+
+
+## Scope and intentions
+
+These notes apply to our specifications. When possible, they should
+also apply to proposals, to make proposals easier to merge into our
+specifications when they are done.
+
+As of 2023, our existing specifications have been written without any
+real style guidelines, so you should not expect to find these
+guidelines to apply well to all of the documents as you read them.
+Instead, these guidelines are for documentation going forward.
+
+These notes are not terribly well organized. We should improve them
+over time. They are meant to be a living document.
+
+
+
+## Other sources
+
+There are a number of other style guides used in Tor. We should
+follow these as well. If they do not suit our needs, we should try to
+get them changed.
+
+* [Community team guidelines](https://gitlab.torproject.org/tpo/community/team/-/issues/5)
+* [Tor project glossary](https://support.torproject.org/glossary/)
+* [Specifications glossary](./glossary.md)
+
+(Please add more if you know about them!)
+
+As we refine the guidelines in this file, we should attempt to get
+them upstreamed to more project-wide guides, if they are suitable.
+
+## Starting notes
+
+We are moving towards using
+[semantic newlines](https://rhodesmill.org/brandon/2012/one-sentence-per-line/):
+put each thought, or sentence, or subclause, on its own line,
+in the Markdown source text.
+(This is not yet applied consistently,
+and we won't reject contributions that don't write that way.)
+
+## Vocabulary
+
+We use these terms freely:
+ * Channel
+ * Circuit
+ * Stream
+
+We try not to say "connection" without qualification: There are too
+many things in Tor that can be called a "connection".
+
+Similarly, don't say "session" without qualification except when it is
+clear from context what we mean.
+
+Prefer "relay" to "node" or "server".
+
+Prefer "service" and "client" when talking about onion services and
+their users.
+
+Refer to arti as arti and the C tor implementation as "the C tor
+implementation" on first mention. Subsequently you can call it `tor`
+or "C tor".
+
+Avoid "AP" and "OP" and "OR"; those are not in current usage.
+
+## Documenting keys
+
+TODO: Explain our new key documentation conventions, as used
+[here](./rend-spec/protocol-overview.html#imd-key-menagerie).
+
+## Documentating data encodings
+
+We have two competing legacy schemes for documenting data encodings.
+One of them is an ad-hoc format the looks like this:
+```
+ * FIELD_1 [4 bytes]
+ * FIELD_2 [1 byte]
+```
+
+The other is a somewhat C-like format based on the
+[`trunnel` format](https://gitlab.torproject.org/tpo/core/trunnel/-/blob/main/doc/trunnel.md?ref_type=heads).
+It looks like this:
+```
+struct message {
+ u32 field_1;
+ u8 field_2;
+}
+```
+
+Neither of these is really great. We should find something better.
+
+## Writing explanations
+
+> When you are writing an explanation in the middle of a bunch of
+> normative text, it is a good idea to put it in quoted text, like
+> this.
+
+
+## Managing links
+
+We're in the early stages of this spec organization, but we should
+still be thinking about long term maintainability.
+
+Please think about how to keep links working in the long term.
+If you are going to add a link to a file, make sure that the file's
+name is reasonable. Before you rename a file, consider adding
+a redirect from the file's old name. (See the mdbook documentation
+for more information about how.)
+
+<div id="mdbook-heading-anchors">
+
+If you want to link to a specific section within a file,
+make sure that the section has a defined anchor that makes sense.
+The syntax to define heading ids in mdbook looks like this:
+
+`## Heading with a long title that you want shorter name for { #shortname }`
+
+</div>
+
+If you need to change a heading, make sure that you keep its
+`id` the same as it was before, so that links will still work.
+
+Finally, when you're looking for specific sections (e.g., to fix
+references that say "See section 5.2.3") you can look for the HTML
+anchors that our conversion process added. For example,
+if you want to find `dir-spec.txt` section 2.1.3, look for
+the anchor that says `<a id="dir-spec.txt-2.1.3"></a>`.
+
+## Specific Markdown syntax
+
+### Define link fragment targets with `<span id="...">` (usually)
+
+To manually make an target for a `#`-prefixed link fragment,
+prefer `<span id="fragment">Text</span>`,
+to `<a id=...>Text</a>`.
+This works around mdbook mistakenly styling
+`<a>` without `href`
+as if it were a clickable link.
+
+(Of course it is often better to
+make the referenced text a section
+and
+[use the mdbook explicit anchor syntax](#mdbook-heading-anchors).)
+
+You may need to make sure you have some other text
+on the same line as the `<span>`
+to avoid mdbook thinking you were writing
+a whole paragraph of raw HTML.
+
+Sometimes you may wish to use `<div id="...">` and `</div>`
+(which must usually be placed as paragraphs of their own).
+
+Example:
+```
+<span id="lemons-lemonade">LEMONS
+are a sour fruit, sometimes used for making
+lemonade</span>
+
+(later)
+
+Various fruit may be found, including [lemons](#lemons-lemonade).
+```
+
+It is OK to use an *empty* `a` element: `<a id=....></a>`.
+Many existing section anchors are done this way.