BONE - Backlog Of Notable Emails
BONE monitors a mailbox and turns incoming emails into reports. Replies in the same thread update each report through a small fixed vocabulary of commands. Maintainers can also write to the inbox directly to manage roles and receive periodic digests.
To browse BONE reports from the terminal, use gnaw. In GNU Emacs, use gnaw.el.
For maintainers, see the full BONE manual.
Subject labels
A subject label creates a report, optionally carrying a topic and/or version:
| Type | Subject labels |
|---|---|
| bug | [BUG <topic>] |
| patch | [PATCH <topic> <version> <n/m>] |
| request | [FR <topic>] [FP <topic>] [RFC <topic>] [POLL <topic>] [TASK <topic>] |
| announcement | [ANNOUNCEMENT <topic>] [ANN <topic>] [BLOG <topic>] [TIP <topic>] |
| release | [REL <topic> <version>] [RELEASE <topic> <version>] |
| change | [CHG <topic> <version>] [CHANGE <topic> <version>] |
All <…> parts are optional and positional.
Also accepted: [ANNOUNCEMENT], [RELEASE], [CHANGE] (long
forms, equivalent to their 3-letter counterparts).
For release and change, a single value is read as <version>:
[REL 2.0] sets version to "2.0". Use both for topic and version:
[REL parser 2.0].
The topic can also be set with a colon prefix after the label:
[BUG] parser: crash on empty input sets the topic to "parser".
Status & priority commands
Replies to a report update it with command keywords such as
Fixed. or Applied..
A command keyword goes at the beginning of a line, followed by
punctuation (. , ; : ? !), whitespace, or end of line.
Recommended keyword per action, with the matching retract form:
| Effect on report | Command keyword | Type |
|---|---|---|
| Mark as acked | Acked Confirmed Approved | Status |
| Mark as owned | Owned | Status |
| Mark as closed (canceled) | Canceled Cancelled | Status |
| Mark as closed (expired) | Expired | Status |
| Mark as closed (resolved) | Closed Resolved Applied Completed Fixed | Status |
| Mark as urgent | Urgent. | Priority |
| Mark as important | Important. | Priority |
Announcements, releases and changes cannot be acked or owned but can still be marked closed, urgent or important.
Also accepted for ack: Acked, Confirmed, Approved.
Also accepted for close: Resolved, Closed, Applied, Fixed,
Completed.
Priority is not set directly: it is the sum of important (+1) and urgent (+2).
Urgent. and Important. require a punctuation mark or end of
line -- a bare space is rejected (these words appear too often in
ordinary prose).
You can combine several commands in one email:
Confirmed. Owned. Urgent. Important.
Searching via the web page
| Long form | Short | Explanation |
|---|---|---|
| from:me@example.org | f: | Reports from me@example.org |
| acked:me@example.org | a: | Reports acked by me@example.org |
| owned:me@example.org | o: | Reports owned by me@example.org |
| closed:me@example.org | c: | Reports closed by me@example.org |
| closed:true | c:true | Include closed reports (bypass Open filter, transient) |
| urgent:me@example.org | u: | Reports marked urgent by me@example.org |
| important:me@example.org | i: | Reports marked important by me@example.org |
| subject:match | s: | Reports matching subject |
| topic:match | t: | Reports matching topic |
| priority:[0-4] | p: | Reports matching priority level 0 to 4 |
| mid:<...> | m: | Report with message-id <...> |
| date:3d.. | d: | Reports from the last 3 days |
| date:2023-01-01..2023-12-31 | d: | Reports between 2023-01-01 and 2023-12-31 |
| deadline:2026-09-01 | D: | Reports due on 2026-09-01 |
| deadline:2026-01-01..2026-06-30 | D: | Reports due in that range |
| deadline:2m | D: | Reports due between now and 2 months from now |
| expired:10d | e: | Reports expiring within 10 days |
| expired:2026-01-01..2026-03-31 | e: | Reports expiring in that range |
| match1 | match2 | Reports matching "match1" or "match2" | |
| from:* acked:* … | f:* a:* … | Wildcard for from/acked/owned/closed/urgent/important |
Durations: Nd (days), Nw (weeks), Nm (months).
date: looks backward from today; deadline: and expired: look
forward.
Combine filters freely: D:2m o:user@email.com finds reports due
within 2 months and owned by user@email.com.
Maintainers
- Ihor Radchenko (since 2020-01-01) (lead)
- Bastien Guerry (since 2020-01-01)
- Bastien (since 2020-01-01)
- Christian Moe (since 2020-01-01)
Configuration
To reproduce this dashboard on your own copy of the mail, run BONE with this config.edn (download). Replace :mailboxes with your own local source -- the operator's mailbox is private and not needed -- then run bb export.
;; Minimal config.edn to reproduce this dashboard on your own copy of
;; the mail. Replace :mailboxes with YOUR local source -- a Maildir of
;; your subscription, or your own IMAP account; the operator's mailbox
;; is private and not needed here. See "Deploying BONE" in the manual,
;; then validate with: bb test-config
{:mailboxes
[{:name "local",
:type :maildir,
:path "/path/to/your/Maildir",
:folder ""}],
:sources
[{:name "Org mode ML",
:list "emacs-orgmode.gnu.org",
:archive-format-string "https://list.orgmode.org/%s",
:maintainers
["yantar92@posteo.net"
"bzg@bzg.fr"
"bzg@gnu.org"
"mail@christianmoe.com"],
:labels
{:request ["FR" "FP" "RFC" "POLL" "TASK"],
:announcement ["ANNOUNCEMENT" "ANN" "BLOG" "TIP"]},
:expiry {:announcement {:inactive-after "100d"}},
:periods
[{:start "2020-01-01",
:end "2026-04-19",
:commands
{:owned {:words ["Owned" "Handled"]},
:closed
{:words
["Canceled"
"Cancelled"
"Closed"
"Expired"
"Resolved"
"Applied"
"Completed"
"Fixed"
"Done"]}}}]}]}