<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>emacs-patch-review, branch HEAD</title>
<subtitle>Port of Thunderbird Patch Review to mu4e.
</subtitle>
<entry>
<id>53b651a74f1f8ddf2b61815710973526d0975366</id>
<published>2026-08-05T11:09:47Z</published>
<updated>2026-08-05T11:09:47Z</updated>
<title>Replace README.org with README.html</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/53b651a74f1f8ddf2b61815710973526d0975366.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 53b651a74f1f8ddf2b61815710973526d0975366
parent d931179501ec72ed4fd235007c1946c30335dc2f
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Wed,  5 Aug 2026 13:09:47 +0200

Replace README.org with README.html

Match the thunderbird-review-ui style: a hand-written, w3m-renderable
&lt;dl&gt; document instead of Org.

</content>
</entry>
<entry>
<id>d931179501ec72ed4fd235007c1946c30335dc2f</id>
<published>2026-08-04T09:37:58Z</published>
<updated>2026-08-05T11:06:29Z</updated>
<title>reply: drop quoted hunk header from review body</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/d931179501ec72ed4fd235007c1946c30335dc2f.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit d931179501ec72ed4fd235007c1946c30335dc2f
parent f354486785675a1e3feda6f2751ef46a3e2bea39
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Tue,  4 Aug 2026 11:37:58 +0200

reply: drop quoted hunk header from review body

The interleaved reply quoted the &#39;@@ -a,b +c,d @@&#39; hunk header above
each quoted region.  The header is noise for patch authors — the
quoted context lines already identify the location — so quote only
the hunk lines (plus the &#39;&gt; [...]&#39; elision marker when the head of
the hunk is skipped).

</content>
</entry>
<entry>
<id>f354486785675a1e3feda6f2751ef46a3e2bea39</id>
<published>2026-08-03T10:20:58Z</published>
<updated>2026-08-03T10:20:58Z</updated>
<title>Take over the mu4e article buffer in place when reviewing</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/f354486785675a1e3feda6f2751ef46a3e2bea39.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit f354486785675a1e3feda6f2751ef46a3e2bea39
parent 82473af65d88e39804504b03dbf5840b8365d002
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 12:20:58 +0200

Take over the mu4e article buffer in place when reviewing

patch-review-mu4e-review, when invoked from a mu4e-view-mode (article)
buffer, now reuses that buffer instead of popping up a new one: the
buffer is renamed, its contents replaced with the patch body, and it
is switched to patch-review-mode.  The headers-buffer path keeps the
old pop-new-buffer behaviour.

This adds an &amp;optional IN-PLACE flag threaded through
patch-review-open-message-file and patch-review--open-text, and a test
that the same buffer object is reused and switched to review mode.

</content>
</entry>
<entry>
<id>82473af65d88e39804504b03dbf5840b8365d002</id>
<published>2026-08-03T09:19:43Z</published>
<updated>2026-08-03T09:19:43Z</updated>
<title>Add mail/README.org documenting the mail backend install</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/82473af65d88e39804504b03dbf5840b8365d002.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 82473af65d88e39804504b03dbf5840b8365d002
parent 0a1e75708bd92feee244070c5e3958a3b1734c9e
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:43 +0200

Add mail/README.org documenting the mail backend install

Covers mail-auth, mbsyncrc, mu init, msmtp, the turnstile service
(j, sv u/status/restart), the init.el use-package snippet, the first
on-passkey-touch flow, folder-name verification after the first sync,
and the Gmail All-Mail / Expunge caveats.

</content>
</entry>
<entry>
<id>0a1e75708bd92feee244070c5e3958a3b1734c9e</id>
<published>2026-08-03T09:19:43Z</published>
<updated>2026-08-03T09:19:43Z</updated>
<title>Add mu4e-mail: two-context mu4e setup with mbsync/msmtp plumbing</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/0a1e75708bd92feee244070c5e3958a3b1734c9e.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 0a1e75708bd92feee244070c5e3958a3b1734c9e
parent eb64d4a527f6604f8a9a591f7752766243c9453c
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:43 +0200

Add mu4e-mail: two-context mu4e setup with mbsync/msmtp plumbing

Two mu4e-contexts match on maildir prefix (/gmail, /fastmail) and set
user-mail-address, sent/drafts/trash/refile folders, and a per-account
message-sendmail-extra-arguments (&quot;-a&quot; &quot;piva&quot;/&quot;fastmail&quot;) so msmtp
routes outbound mail correctly.  mu4e-get-mail-command is &quot;true&quot; and
mu4e-update-interval is 300s: the turnstile service fetches, mu4e only
re-indexes.  mu4e-change-filenames-when-moving is set for mbsync.  When
loadable, the file auto-wires patch-review-mu4e-review onto R in
mu4e-view by adding the repo root to load-path.

</content>
</entry>
<entry>
<id>eb64d4a527f6604f8a9a591f7752766243c9453c</id>
<published>2026-08-03T09:19:28Z</published>
<updated>2026-08-03T09:19:28Z</updated>
<title>Add example ~/.msmtprc for the two SMTP accounts</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/eb64d4a527f6604f8a9a591f7752766243c9453c.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit eb64d4a527f6604f8a9a591f7752766243c9453c
parent e88c6db59302904ea126126c64a475d7b6421aac
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:28 +0200

Add example ~/.msmtprc for the two SMTP accounts

Gmail and Fastmail over implicit TLS:465, each selecting its account
from the cache file written by mail-auth (passwordeval).  mu4e contexts
pass -a &lt;account&gt; via message-sendmail-extra-arguments.

</content>
</entry>
<entry>
<id>e88c6db59302904ea126126c64a475d7b6421aac</id>
<published>2026-08-03T09:19:28Z</published>
<updated>2026-08-03T09:19:28Z</updated>
<title>Add turnstile runit service that refreshes mail via mbsync</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/e88c6db59302904ea126126c64a475d7b6421aac.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit e88c6db59302904ea126126c64a475d7b6421aac
parent 583b50ae7226f59c9b55784c9c058baa106dbdd0
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:28 +0200

Add turnstile runit service that refreshes mail via mbsync

Per-user service for turnstiled&#39;s runit backend (~/.config/service/mbsync).
The run script loops mail-auth &amp;&amp; mbsync -a every $MBSYNC_INTERVAL
seconds, sourcing ./conf for optional overrides, and pairs with an svlogd
logger (mail/service/log).  Indexing is left to mu4e to avoid contending
for mu&#39;s lock.

</content>
</entry>
<entry>
<id>583b50ae7226f59c9b55784c9c058baa106dbdd0</id>
<published>2026-08-03T09:19:08Z</published>
<updated>2026-08-03T09:19:08Z</updated>
<title>Add mbsync isync config for piva (Gmail) and fastmail accounts</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/583b50ae7226f59c9b55784c9c058baa106dbdd0.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 583b50ae7226f59c9b55784c9c058baa106dbdd0
parent 9fc1d7718e55fd9b42df6480abcff7f43fa4c6cd
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:08 +0200

Add mbsync isync config for piva (Gmail) and fastmail accounts

Two channels synced into ~/Maildir/{gmail,fastmail}.  Passwords come
from mail-auth&#39;s cache via PassCmd (with a passage fallback).  Gmail
syncs all top-level folders plus [Gmail]/{Sent Mail,Drafts,Trash} while
leaving the duplicating [Gmail]/All Mail out; Fastmail syncs all
folders.  Expunge Both, Create Both, SYNCSTATE *.

</content>
</entry>
<entry>
<id>9fc1d7718e55fd9b42df6480abcff7f43fa4c6cd</id>
<published>2026-08-03T09:19:08Z</published>
<updated>2026-08-03T09:19:08Z</updated>
<title>Add mail-auth: cache passage-backed IMAP passwords on tmpfs</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/9fc1d7718e55fd9b42df6480abcff7f43fa4c6cd.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 9fc1d7718e55fd9b42df6480abcff7f43fa4c6cd
parent 4a448f791e7489d23b0646d756eebae3354e360c
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 11:19:08 +0200

Add mail-auth: cache passage-backed IMAP passwords on tmpfs

passage decrypts against an age identity on a passkey (YubiKey) which
needs a physical touch per call; running it on every mbsync cycle is
impractical.  mail-auth copies each one-line password into
$XDG_RUNTIME_DIR/mbsync/&lt;acct&gt;.pass (tmpfs, 0700), leaves it there until
reboot/logout, and only re-asks passage when it is missing.  A
MBSYNC_PW_TTL setting optionally rotates it on a timer.

</content>
</entry>
<entry>
<id>4a448f791e7489d23b0646d756eebae3354e360c</id>
<published>2026-08-03T08:21:35Z</published>
<updated>2026-08-03T08:21:35Z</updated>
<title>Add patch-review-mu4e: mu4e adapter</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/4a448f791e7489d23b0646d756eebae3354e360c.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 4a448f791e7489d23b0646d756eebae3354e360c
parent 4fb28b5bc07c31c5476bb511edc4bdefba722e9e
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 10:21:35 +0200

Add patch-review-mu4e: mu4e adapter

One entry point, patch-review-mu4e-review, for mu4e view and headers
buffers: locate the raw message file via the :path field and hand it to
patch-review-open-message-file. Untested in CI (no mu on the dev
machine); deliberately kept to a field lookup.

</content>
</entry>
<entry>
<id>4fb28b5bc07c31c5476bb511edc4bdefba722e9e</id>
<published>2026-08-03T08:20:19Z</published>
<updated>2026-08-03T08:20:19Z</updated>
<title>Add patch-review-mode: review buffer, extraction, compose, apply</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/4fb28b5bc07c31c5476bb511edc4bdefba722e9e.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 4fb28b5bc07c31c5476bb511edc4bdefba722e9e
parent f9d6e8ca8bc3cf51a1d67330b0e5bd0a9e60f905
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 10:20:19 +0200

Add patch-review-mode: review buffer, extraction, compose, apply

The review buffer is an editable diff-mode buffer holding the patch.
There is no comment command: inserted text anywhere is commentary.
On C-c C-c the buffer is diffed (-U0) against the pristine original;
pure insertions become comments anchored to the original line above
them (mapped through the parse tree to file:hunk:line locators),
insertions above the first hunk become the general remark, and
rewrites/deletions of patch text are counted and confirmed. The reply
is composed from the pristine text via message-mode with To/Subject/
In-Reply-To reconstructed from the source headers.

The header line carries the two primary buttons ([Send review],
[Apply]) plus [Refresh], the target project, and the apply status.
C-c C-a applies with git am (C-u suppresses hooks). Opening a
.patch/.diff file activates the mode via auto-mode-alist.

</content>
</entry>
<entry>
<id>f9d6e8ca8bc3cf51a1d67330b0e5bd0a9e60f905</id>
<published>2026-08-03T08:03:13Z</published>
<updated>2026-08-03T08:03:13Z</updated>
<title>Add patch-review-git: apply and applicability probe</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/f9d6e8ca8bc3cf51a1d67330b0e5bd0a9e60f905.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit f9d6e8ca8bc3cf51a1d67330b0e5bd0a9e60f905
parent 6df1b7cd983a55858094875451578a238634c0a3
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 10:03:13 +0200

Add patch-review-git: apply and applicability probe

Port of patchHost&#39;s git logic. The probe runs &#39;git am --3way&#39; in a
throwaway --detach worktree of the user&#39;s repo — git am&#39;s own output
gives the tri-state (&quot;No changes -- Patch already applied&quot;, exit 0,
exit 128) without touching the user&#39;s tree; probes always suppress user
hooks via an empty core.hooksPath. Apply runs hooks by default (a
deliberate act), refuses while a previous am session is unfinished, and
aborts back to a clean state on conflict. concat-mboxes encodes the
lesson that multi-file checks must be one mbox to verify sequentially.

</content>
</entry>
<entry>
<id>6df1b7cd983a55858094875451578a238634c0a3</id>
<published>2026-08-03T07:52:59Z</published>
<updated>2026-08-03T07:55:16Z</updated>
<title>Add patch-review-reply: interleaved reply formatting</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/6df1b7cd983a55858094875451578a238634c0a3.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 6df1b7cd983a55858094875451578a238634c0a3
parent e191b62fd2d344b7b37769970983b4af25a7ca29
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Mon,  3 Aug 2026 09:52:59 +0200

Add patch-review-reply: interleaved reply formatting

Port of reply-format.js plus the locator scheme from review-store.js:
comments keyed by &quot;file:hunk:line&quot; (or &quot;general&quot;) are rendered as a
kernel-style quoted reply, three lines of context above the first
commented line and &quot;&gt; [...]&quot; elision beyond that.

</content>
</entry>
<entry>
<id>e191b62fd2d344b7b37769970983b4af25a7ca29</id>
<published>2026-08-02T10:54:12Z</published>
<updated>2026-08-02T10:54:12Z</updated>
<title>Add patch-review-parse: pure parsing of patch emails</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/e191b62fd2d344b7b37769970983b4af25a7ca29.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit e191b62fd2d344b7b37769970983b4af25a7ca29
parent 47f6d91a65c7c73ce34f373b5b80e0e84e30377e
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Sun,  2 Aug 2026 12:54:12 +0200

Add patch-review-parse: pure parsing of patch emails

Port of thunderbird-review-ui&#39;s diff-parse.js (body -&gt; commit message,
diffstat, structured hunks with body-line anchors for re-quoting) and
patch-detect.js (subject-tag heuristics, diff detection, series
matching). Tests port the JS suite&#39;s expectations against the same
fixtures.

</content>
</entry>
<entry>
<id>47f6d91a65c7c73ce34f373b5b80e0e84e30377e</id>
<published>2026-08-02T10:47:43Z</published>
<updated>2026-08-02T10:47:43Z</updated>
<title>Bootstrap repository: docs, test runner, fixtures</title>
<link rel="alternate" type="text/html" href="https://mccd.space/git/emacs-patch-review/commit/47f6d91a65c7c73ce34f373b5b80e0e84e30377e.html" />
<author>
<name>Pi Agent</name>
<email>agent@pi.local</email>
</author>
<content>commit 47f6d91a65c7c73ce34f373b5b80e0e84e30377e
Author: Pi Agent &lt;agent@pi.local&gt;
Date:   Sun,  2 Aug 2026 12:47:43 +0200

Bootstrap repository: docs, test runner, fixtures

Scaffold for the Emacs port of the Thunderbird patch-review add-on.
Fixtures are copied from thunderbird-review-ui/tests/fixtures so both
projects parse the same data; patch1.eml adds RFC 822 headers around
patch1.body for end-to-end tests.

</content>
</entry>
</feed>
