| turn off outbound sync to staging | 2 | +2 | -3 |
| hosting, invoices: stop paying | 5 | +38 | -2 |
| readme: the copies | 1 | +4 | -2 |
| mail: keep a copy of everything sent | 2 | +32 | -1 |
| invoices: more payees from the environment | 4 | +12 | -1 |
| tests: the fake inbox in one place | 3 | +50 | -43 |
| sync: no --delete. staging keeps everything | 1 | +0 | -1 |
| posts: publish once for a batch, not once a post | 2 | +9 | -1 |
| vault: unlock again, once, when bw has dropped the session | 2 | +23 | -1 |
| mail: timeouts on imap and smtp | 1 | +2 | -2 |
| jobs: one job failing doesn't stop the rest | 2 | +15 | -1 |
| mail: smtp port from the environment | 1 | +1 | -1 |
| tools: what's unpaid, and paying it | 1 | +12 | -1 |
| tools: mail_unread without the headers it never used | 1 | +1 | -1 |
| python 3.12 | 1 | +2 | -2 |
| mail: decode encoded subjects | 2 | +7 | -1 |
| log to a file as well as the journal | 1 | +7 | -2 |
| tools: vault_login, for sites with no api | 1 | +8 | -1 |
| vault: notes as well as logins | 2 | +12 | -0 |
| invoices: read the due date | 2 | +26 | -3 |
| sync: batch mode, so a host key prompt can't hang it | 1 | +2 | -0 |
| jobs: sync at 2:30 | 1 | +2 | -1 |
| sync: state and logs to the staging box every night | 5 | +57 | -1 |
| posts: say what's scheduled | 3 | +19 | -1 |
| tools: errors come back as json, not a traceback | 2 | +10 | -2 |
| mail: leave our own messages out of unread | 2 | +7 | -1 |
| readme: what it does, and setup | 1 | +30 | -2 |
| deploy: systemd unit, its own user | 2 | +24 | -0 |
| jobs: bills from the inbox, and paying them in the morning | 1 | +3 | -1 |
| vault: look in the whole vault, not just the studio folder | 3 | +4 | -13 |
| invoices: pay through the bank's bill pay | 2 | +45 | -2 |
| invoices: a ledger in state, no duplicates | 2 | +61 | -3 |
| invoices: read bills out of the support inbox | 2 | +48 | -0 |
| jobs: check stillwater every morning, pay what's owed | 1 | +2 | -1 |
| hosting: pay the balance with the card on file | 3 | +54 | -2 |
| vault: keep the session instead of unlocking for every call | 3 | +30 | -3 |
| vault: logins from the studio folder, through bw | 3 | +119 | -0 |
| hosting: dollars as decimal, not float | 2 | +12 | -3 |
| hosting: stillwater's balance from their account lookup | 3 | +45 | -0 |
| jobs: a loop for the things that run on their own | 3 | +93 | -2 |
| posts: a date with no zone is local time | 2 | +7 | -1 |
| posts: tests | 1 | +45 | -0 |
| posts: publish scheduled journal posts when they're due | 2 | +48 | -0 |
| mail: keep the thread together on replies | 2 | +4 | -0 |
| tools: a registry the runtime can call | 3 | +76 | -0 |
| mail: text from multipart messages | 2 | +18 | -2 |
| mail: reply and send | 2 | +69 | -2 |
| start errands: read the support inbox | 8 | +147 | -0 |