1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
| | =head1 NAME
public-inbox-glossary - glossary for public-inbox
=head1 DESCRIPTION
public-inbox combines several independently-developed protocols
and data formats with overlapping concepts. This document is
intended as a guide to identify and clarify overlapping concepts
with different names.
This is mainly intended for hackers of public-inbox, but may be useful
for administrators of public-facing services and/or users building
tools.
=head1 TERMS
=over 8
=item IMAP UID, NNTP article number, on-disk Xapian docid
A sequentially-assigned positive integer. These integers are per-inbox,
or per-extindex. This is the C<num> column of the C<over> table in
C<over.sqlite3>
=item tid, THREADID
A sequentially assigned positive integer. These integers are
per-inbox or per-extindex. In the future, this may be prefixed
with C<T> for JMAP (RFC 8621) and RFC 8474. This may not be
strictly compliant with RFC 8621 since inboxes and extindices
are considered independent entities from each other.
This is the C<tid> column of the C<over> table in C<over.sqlite3>
=item blob
For email, this is the git blob object ID (SHA-(1|256)) of an
RFC-(822|2822|5322) email message.
=item IMAP EMAILID, JMAP Email Id
To be decided. This will likely be the git blob ID prefixed with C<g>
rather than the numeric UID to accommodate the same blob showing
up in both an extindex and inbox (or multiple extindices).
=item newsgroup
The name of the NNTP newsgroup, see L<public-inbox-config(5)>.
=item IMAP (folder|mailbox) slice
A 50K slice of a newsgroup to accommodate the limitations of IMAP
clients with L<public-inbox-imapd(1)>. This is the C<newsgroup>
name with a C<.$INTEGER_SUFFIX>, e.g. a newsgroup named C<inbox.test>
would have its first slice named C<inbox.test.0>, and second slice
named C<inbox.test.1> and so forth.
If implemented, the RFC 8474 MAILBOXID of an IMAP slice will NOT have
the same Mailbox Id as the public-facing full JMAP mailbox.
=item inbox name, public JMAP mailbox name
The HTTP(S) name of the public-inbox
(C<publicinbox.E<lt>nameE<gt>.*>). JMAP will use this name
rather than the newsgroup name since public-facing JMAP will be
part of the PSGI code and not need a separate daemon like
L<public-inbox-nntpd(1)> or L<public-inbox-imapd(1)>
=item epoch
A git repository used for blob storage. See
L<public-inbox-v2-format(5)/GIT EPOCHS>.
=item keywords, (IMAP|Maildir) flags, mbox Status + X-Status
Private, per-message keywords or flags as described in RFC 8621
section 10.4. These are conveyed in the C<Status:> and
C<X-Status:> headers for L<mbox(5)>, as system IMAP FLAGS
(RFC 3501 section 2.3.2), or Maildir info flags.
L<public-inbox-watch(1)> ignores drafts and trashed (deleted)
messages. L<lei-import(1)> ignores trashed (deleted) messages,
but it imports drafts.
=item labels, private JMAP mailboxes
For L<lei(1)> users only. This will allow lei users to place
the same email into one or more virtual folders for
ease of filtering. This is NOT tied to public-inbox names, as
messages stored by lei may not be public.
These are similar in spirit to arbitrary freeform "tags"
in mail software such as L<notmuch(1)> and non-system IMAP FLAGS.
=item volatile metadata (VMD)
For L<lei(1)> users only, this refers to the combination of
keywords and labels which are subject to frequent change
independently of immutable message content.
=item IMAP INTERNALDATE, JMAP receivedAt, rt: search prefix
The first valid timestamp value of Received: headers (top first).
If no Received: header exists, the Date: header is used, and the
current time if neither header(s) exist. When mirroring via
git, this is the git commit time.
=item IMAP SENT*, JMAP sentAt, dt: and d: search prefixes
The first valid timestamp value of the Date: header(s).
If no Date: header exists, the time from the Received: header is
used, and then the current time if neither header exists.
When mirroring via git, this is the git author time.
=back
=head1 COPYRIGHT
Copyright 2021 all contributors L<mailto:meta@public-inbox.org>
License: AGPL-3.0+ L<http://www.gnu.org/licenses/agpl-3.0.txt>
=head1 SEE ALSO
L<public-inbox-v2-format(5)>, L<public-inbox-v1-format(5)>,
L<public-inbox-extindex-format(5)>, L<gitglossary(7)>
|